如何撤消Git中的最新提交?
我不小心commit
错误的文件commit
给Git,但我还没有push
提交提交到服务器。
我怎样才能从本地存储库中取消这些提交?
撤消提交并重做
$ git commit -m "Something terribly misguided" (1)
$ git reset HEAD~ (2)
<< edit files as necessary >> (3)
$ git add ... (4)
$ git commit -c ORIG_HEAD (5)
git status
显示为“更改未提交以进行提交”,您需要在提交之前再次添加它们)。 如果你只是想更多的变化添加到先前的承诺,或修改提交MESSAGE1,你可以使用git reset --soft HEAD~
代替,这就好比是git reset HEAD~
其中HEAD~
相同HEAD~1
)但会保留现有的更改。 git add
任何你想包含在你的新提交中的东西。 reset
将旧头复制到.git/ORIG_HEAD
; 使用-c ORIG_HEAD
commit
将打开一个编辑器,该编辑器最初包含来自旧提交的日志消息并允许您对其进行编辑。 如果您不需要编辑消息,则可以使用-C
选项。 1但是,请注意,如果您在提交消息中犯了错误,则不需要重置为较早的提交。 更简单的选项是git reset
(以便更新自己做出的更改),然后git commit --amend
,这会打开默认提交消息编辑器,并使用上次提交消息预填充。
但是要注意,如果你已经对索引添加了新的更改,使用commit --amend
将把它们添加到你以前的提交中。
----编辑Frank R. 2018-3-9
如果推动,
git push origin master --force
如果你不知道它是如何工作的,那么撤销一个提交会有点吓人。 但如果你理解的话,它确实很容易。
假设你有这个,C是你的头,(F)是你的文件的状态。
(F)
A-B-C
↑
master
你想核实提交C并永远不会再看到它 。 你做这个:
git reset --hard HEAD~1
结果是:
(F)
A-B
↑
master
现在B是头。 由于您使用了--hard
,因此在提交B时将您的文件重置为其状态。
啊,但是假设承诺C不是一场灾难,而是一点点关闭。 您希望撤销提交,但在做出更好的提交之前保留一些修改 。 从这里开始,以C作为你的头:
(F)
A-B-C
↑
master
你可以做到这一点,把--hard
:
git reset HEAD~1
在这种情况下,结果是:
(F)
A-B-C
↑
master
在这两种情况下,HEAD只是指向最新提交的指针。 当你做一个git reset HEAD~1
,你告诉Git把HEAD指针移回一个提交。 但是(除非你使用--hard
),你将文件保留原样。 所以现在git status
显示你已经签入C的变化。你还没有失去一件东西!
为了最轻松的触摸,你甚至可以撤销你的提交,但留下你的文件和索引 :
git reset --soft HEAD~1
这不仅会让您的文件独自存在,甚至会让您的索引独自存在。 当你做git status
,你会看到相同的文件在索引中。 实际上,在这个命令之后,你可以做git commit
并且你将重做刚才的同一个提交。
还有一件事: 假设你像第一个例子那样销毁一个提交 , 但是后来发现你需要它呢? 运气不好,对吧?
不,还是有办法让它恢复原状。 输入git reflog
,你会看到你已经移动过的(部分)commit shas列表。找到你所销毁的提交,并执行以下操作:
git checkout -b someNewBranchName shaYouDestroyed
你现在已经复活了那个提交。 提交并没有在Git中真正被破坏90天,所以你通常可以回去拯救一个你并不想要摆脱的东西。
这花了我一段时间才弄清楚,所以也许这会帮助别人......
有两种方法可以“撤销”最后一次提交,具体取决于是否已公开提交了提交(推送到远程存储库):
如何撤消本地提交
假设我本地提交,但现在要删除该提交。
git log
commit 101: bad commit # latest commit, this would be called 'HEAD'
commit 100: good commit # second to last commit, this is the one we want
要将所有事件恢复到最后一次提交之前的状态,我们需要reset
为HEAD
之前的提交:
git reset --soft HEAD^ # use --soft if you want to keep your changes
git reset --hard HEAD^ # use --hard if you don't care about keeping the changes you made
现在, git log
将显示我们的上一次提交已被删除。
如何撤消公共提交
如果你已经公开提交你的提交,你会想创建一个新的提交,它将“恢复”你在之前的提交(当前HEAD)中所做的更改。
git revert HEAD
您的更改现在将恢复并准备好提交:
git commit -m 'restoring the file I removed by accident'
git log
commit 102: restoring the file I removed by accident
commit 101: removing a file we don't need
commit 100: adding a file that we need
有关更多信息,请查看Git Basics - 撤消事物
链接地址: http://www.djcxy.com/p/3.html上一篇: How to undo the most recent commits in Git?
下一篇: Why is it faster to process a sorted array than an unsorted array?