Git 远程提交以及撤回错误的提交代码 | 参与开源项目开发-基础
2023-3-1|2024-2-12
D_SUPER
type
Post
status
Published
date
Mar 1, 2023
slug
git_push_reset
summary
基础的 Git 操作:如何修改代码,如何远程提交代码和错误提交撤回的 Git 操作。(参与开源项目的 Git 基础)
category
技术分享
tags
NotionNext
Github
Git
icon
NotionNext 作为一款部署在 Vercel 上,免费开源的静态博客系统,项目使用 NextJS + Notion API 实现博客内容渲染。拉取 Github 库后在 Vercel 上设置 Environment Variables(环境变量) 即可实现个性化部署[*]。部署完成后,仅需在 Notion 中添加/修改自己的笔记内容,即可实现无感知地更新博客。
NotionNext 支持二次开发,在本地测试好修改文件后,还可以将修改推送到主仓库,参与项目贡献。如何二次开发 NotionNext ,自定义功能详见:NotionNext 二次开发手册。
本文记录一下如何将本地的代码修改提交到上游仓库,以及如何处理错误的 Git 提交。
相关阅读:
拉取上游仓库
- 使用
vs code
打开本地 git 项目文件夹
- 切换到与上游同步的分支:
git checkout tangly1024-main
tangly1024-main
分支为设置的 NotionNext 上游同步分支,创建过程为:- 新建
tangly1024-main
分支(名字可以自取,-b
表示新建分支)
git checkout
命令 | git switch
命令
git checkout xxxx
切换分支git checkout -b xxxx
新建分支git branch -d <name>
删除分支 git checkout -b tangly1024-main main
- 拉取想要开发的代码库(填入 git 地址,git 分支
main
)
git pull https://github.com/tangly1024/NotionNext.git main
此时该分支为上游的完全代码。同样的操作用于更新 NotionNext 项目[*]。
vs code
可视化 git 分支
提交代码修改
- 在本地修改该分支(
git checkout tangly1024-main
) git status
查看文件修改追踪情况git add xxxx
提交xxxx文件修改 或git add .
提交全部修改文件git commit -m '提交行为注释'
注释提交(注释提交的目的等)
- 本地 git 处理完成后,向上游推送修改
git push --set-upstream origin tangly1024-main
指定向
tangly1024-main
上游分支修改,此时在 NotionNext 项目中出现新的 Pull requests
。可以在其中添加注释,以便上游仓库大佬更好地处理你的代码合并。
如果你提交的代码完整无误,那就安心等待处理就好啦。
撤回远程提交
然而“人有失手,马有漏蹄”。如果你提交的代码出现错误,或是不想提交了,又该怎么办呢?
- 首先检查提交历史
git log
(输入字母q
推出历史查询)。
- 在其中找到想要回复的历史状态位置,例如:
commit a835c56fec010a06ee259519c4d3031e217c1adb xxxxxx xxxxxx
- 一键“回档”
git reset --soft a835c5
git reset
git reset --soft HEAD^
reset到上一次修改git reset --soft HEAD^2
reset到上上次修改git reset --soft a835c5
reset到 a835c5…
状态此时完成本地的 Git 恢复工作。
- 再将恢复状态同步到上游仓库,覆盖提交,此时即可撤回提交状态。
git push --set-upstream origin tangly1024-main --force
等你修正好代码后可以重复提交代码修改步骤,完成提交。
更暴力的方法,view all branches
直接删除Active branch
总结
- 该操作是参与 Github 项目开发的基础 git 知识。
- 通过这次错误提交和撤回的过程,我更加熟悉 Git 的本地和远程的操作关系,也更深刻理解了分支和历史恢复。
- 延申阅读:
-
git push origin --delete <BranchName>
删除远程分支
慎用 git reset --hard
会还原部分修改代码
git reset –-soft
:回退到某个版本,只回退了 commit 的信息,不会恢复到 index file 一级。如果还要提交,直接commit即可;git reset -–hard
:彻底回退到某个版本,本地的源码也会变为上一个版本的内容,撤销的commit 中所包含的更改被冲掉;推荐阅读
- Twikoo
- Waline
- Cusdis