撤回仓库的提交
结论先行
- 未推送提交:可以使用
git reset --soft HEAD~1
或git reset --hard HEAD~1
来撤回提交,选择保留或丢弃修改。 - 已推送提交:可以使用
git reset --soft HEAD~1
后,通过git push --force
强制覆盖远程的提交记录。
问题描述
我把一个代码修改提交到了 本地的test分支上,但是我现在想撤回,不想提交了,要怎么办
解决
如果你已经将代码提交到本地的 test
分支上,但现在想撤回提交,有以下几种方式可以选择,具体取决于你是否已经推送了提交到远程仓库。
1. 撤回未推送的提交
如果你提交了代码但还没有推送到远程仓库,想要撤回,可以使用以下方法:
使用 git reset
撤回提交
git reset
可以撤回最近的提交并保留修改在工作区中。
git reset --soft HEAD~1
--soft
:撤销提交,但保留代码变更在暂存区(相当于你还没有git add
的状态)。HEAD~1
:表示回退到当前提交的前一个提交。
结果:
你的提交记录会被撤销,但代码依然存在,可以继续修改或选择不提交。
使用 git reset --hard
完全撤销
如果你不仅想撤回提交,还想丢弃代码修改,可以使用 --hard
:
git reset --hard HEAD~1
--hard
:不仅撤销提交,还会清除工作区的所有修改。
注意:
使用 --hard
会丢失未保存的修改,所以要谨慎使用。
2. 撤回已经推送到远程的提交
如果你已经将提交推送到远程仓库,还可以撤回提交,但需要使用 git push --force
。
使用 git reset
回退并强制推送
首先,使用 git reset
撤销本地提交:
git reset --soft HEAD~1
然后,强制推送到远程仓库,覆盖已经推送的提交:
git push --force
注意:
强制推送会覆盖远程仓库的历史记录,其他开发者如果基于这些提交做了修改,可能会造成问题,所以在多人协作时需要小心使用。
总结:
- 未推送提交:可以使用
git reset --soft HEAD~1
或git reset --hard HEAD~1
来撤回提交,选择保留或丢弃修改。 - 已推送提交:可以使用
git reset --soft HEAD~1
后,通过git push --force
强制覆盖远程的提交记录。