前言
开发过程就经常会遇到代码提交后,想撤销操作,那么如何进行Git的各种撤销操作呢?本文将Git的各种误提交对症下药的方法分享出来,读者可以选择情况学习,也可以收藏本文以备速查使用。
一图胜千言
文中会涉及到rebase操作,这时候会打开编辑器,用不习惯git的编辑器,这里建议将git的编辑器默认由vscode或vim打开,配置方法如下:
# 配置为vscode
git config --global core.editor "code --wait"
# 配置为vim
git config --global core.editor "vim"
你需要提前了解的知识
- Git的工作区、暂存区、版本库
- Git的rebase、revert、reset命令
按是否已经commit细说各种情况:
1. 未commit的撤销方法
未commit
分为以下两个场景
1.1 未commit,未add
场景: 本地做了文件增加或变更,但还未做git操作(git add .
),希望清除本地变更,与git仓库保持一致。
这种情况是最简单的
STEP 1
执行 git checkout .
即可重置已经修改的文件(不包括新增的文件,因为新增的文件还没被记录到git版本控制中)。
STEP 2(可选)
如果需要清除新增的文件,可以单个逐一删除,也可以执行git clean -df
一键删除所有不在git版本控制的文件。
git clean 是什么?
1.2 未commit,已add
场景: 本地做了文件增加或变更,但已经执行了git add .
,希望清除本次变更,与git仓库保持一致。
STEP 1
执行git restore --staged .
将文件从暂存区拉回待commit列表
SETP 2
按照上文的「 未commit,未add」 操作即可
2. 已commit的撤销方法
2.1 撤回最近一次提交重新编辑
场景: 本地做了文件增加或变更,但已经执行了commit
,希望撤回最近一次提交重新编辑。
STEP 1
首先保证做了错误提交的操作后,当前工作区是干净的。执行 git reset --soft HEAD^
,即可将本次提交撤回。 注意是 使用soft
软重置来保持所有本地的变动。
执行后就回到了git add .
后的状态了,至于是否需要继续修改,还是撤销add后的变更(参考上文的方法),可根据实际情况进行。
STEP 2 (如果push过,需要执行)
如果做了错误的commit后,还顺手push上远端仓库了,就需要在reset后执行以下危险操作 git push -f origin 你的分支名
或缩略命令git push -f
强推到远端仓库。
当然这其中涉及到仓库的分支保护策略是否限制你进行强推该分支,以及是否只有你本人在该分支上做变更。比如 在你push后,又有别的开发同学进行了push,那么可能你强推仓库,开发大哥会强推你本人。
2.2 丢弃最近一次提交
场景: 变更已经commit,希望直接丢弃掉上一次变更,并且不留下提交记录
STEP
危险操作 执行 git reset --hard HEAD^
,将代码库硬重置(会丢弃所有改动)指向到前一次提交,如果需要指定到某个commit id 可以 reset --hard 某个commitid
2.3 回滚某一次提交
场景: 变更已经commit,希望直接丢弃掉这一次变更,留下提交记录
STEP
执行 git revert
新增一个回滚提交。
2.4 修改Commit Message
场景: commit后,填错Commit Message了,希望保持本次提交,仅修改Commit Message。
STEP
执行 git commit --amend
注:它同样可以用于修改最后一次提交
2.5 合并多次提交
场景: 修改一个文件a的过程,连续进行了多次commit,希望将多次连续commit合并为一个,其他开发同学只看到一次提交。
例如:合并三次提交为一次
STEP 1
git rebase -i HEAD~3
STEP 2
这时会展示出最近三次提交,如下
pick 690cb73 1
pick 6f6a377 2
pick 0a267b8 3
我们将最后两次提交的pick
改为squash
,然后保存退出编辑器,如下
pick 690cb73 1
squash 6f6a377 2
squash 0a267b8 3
STEP 3
连续三次自己的提交,一般是不会有冲突的,有冲突就处理下再commit,然后弹出的编辑器输入新的commit message,保存退出编辑器后提示,即完成操作啦。
2.6 改写某个提交记录
场景: 先后做了a,b,c三提交,但是还没push,想夹带私货,再对历史的b提交多做一些变更。
STEP 1
git rebase -i HEAD~~
STEP 2
将第一行的“pick”改成“edit”,然后保存并退出。
pick 09ba200 b
pick bc376e3 c
STEP 3
修改文件后,用commit --amend
保存修改
STEP 4
git rebase --continue
继续执行rebase
STEP 5
这时,有可能其他提交会发生冲突, 请修改冲突部分后再执行add和rebase --continue
总结
至此git的各种撤销提交方案说完了,借助git rebase 和git reset 还有更多的操作方法,大家可以在开发的漫漫长路中继续探索。
参考资料
用rebase -i 修改提交
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!