前言
在使用 Git 开发管理源代码的时候,我们会遇到这种尴尬情况:刚刚提交和推送一个新的 commit,就发现有个小的 bug 需要 fix。而这个小的 bug 可能就是一行或者几行代码的事儿,在代码管理层面来说,不应作为一个新的 commit。
所以我们希望将刚才推送(push)至远端仓库的提交(commit)在保留原有修改的基础上,从远端仓库撤销提交。再将 bug 修复,一并作为新的 commit,重新提交和推送至远端仓库。
1 撤销本地仓库提交
(1) 输入命令,查看提交信息;
git log
可以看到有 3 次提交历史,我们的操作都是基于提交版本号,所以需要记录好 commit 版本号。
这里,假设我们当前的提交是 ①(1ae6528fc3ba06e3d23adbbcc20ab7281fa2a4f0),现在需要回退至提交 ②(47c31999a97a0c05c09c3872b22cbcda01efc432)。
(2) 输入命令,撤销本地提交;
git reset --soft 指定commit版本号
git reset --soft "版本号":重置至指定版本的提交。这里我们指定版本号为 ②,从而达到撤销 ①的目的。
参数soft:保留当前工作区(代码和文件的更改),以便重新提交;
参数hard:撤销相应工作区的修改,相当于彻底删除提交和代码的更改。
(3) 输入命令,查看本地分支提交;
git log
可以看到,我们本地分支只有 ② 和 ③ 的提交,① 已经被删除。
(4) 查看远端分支的提交;
在远端仓库我们看到,还是有 3 次提交。① commit 并没有撤销。
2 撤销远端仓库提交
(1) 输入命令,撤销远端仓库提交;
git push origin stm32 --force
git push origin stm32 --force:强制推送当前版本号至远端分支。
我们当前版本号是 ②,强制推送至远端,以达到撤销版本 ① 的目的。
注意这里需要加参数 --force,否则会推送失败。
(2) 再次查看远端分支提交;
可以看到,① commit 已经删除,剩下 ② 和 ③。
3 重新提交至远端仓库
(1) 修复 bug,添加至暂存区;
// fix bug
git add .
(2) 重新提交;
git commit -m "Repair gpio declaration."
(3) 重新推送至远端分支;
git push origin stm32
(4) 查看远端分支提交;
当前远端分支有 3 次提交,但是 ① commit 的版本号已经变更了。
总结
以上就是撤销推送(push)至远端分支的提交(commit),保留上一次的代码修改,再次修复 bug 后,一并提交和推送至远端。
版权归原作者 EmotionFlying 所有, 如有侵权,请联系我们删除。