我无意中将错误的文件提交到Git,但还没有将提交推到服务器。
如何撤消来自本地存储库的提交?
发布于 2009-05-29 18:13:42
撤消提交和重做
$ git commit -m "Something terribly misguided" # (0: Your Accident)
$ git reset HEAD~ # (1)
[ edit files as necessary ] # (2)
$ git add . # (3)
$ git commit -c ORIG_HEAD # (4)git reset是负责撤销的命令。当将您的工作树(磁盘上文件的状态)保持不变时,它将撤消您的上次提交。,您需要在再次提交它们之前再次添加它们)。git add您想要包含在新提交中的任何内容。reset将旧头复制到.git/ORIG_HEAD;-c ORIG_HEAD将打开一个编辑器,编辑器最初包含来自旧提交的日志消息,并允许您编辑它。如果不需要编辑消息,可以使用-C选项。或者,要编辑上一次提交(或仅仅编辑它的提交消息),commit --amend将在当前索引中向前一次提交中添加更改。
若要删除(而不是还原)已推送到服务器的提交,必须使用git push origin main --force[-with-lease]重写历史记录。取而代之的是--force-with-lease,正如git手册中所指出的
如果您已经发布了重写历史,那么您应该了解重写历史的含义。
进一步阅读
确定SHA-1用于您希望还原的提交。有了这个值之后,使用上面解释的命令序列。
HEAD~和HEAD~1是一样的。如果您想要取消多次提交,那么本文盖特里的头是什么?是很有帮助的。
发布于 2011-07-28 22:22:20
如果你不知道它是如何工作的,取消提交是有点可怕的。但如果你真的理解的话,这其实是非常容易的。我将向您展示撤销提交的4种不同方法。
假设你有这个,C是你的头,(F)是你文件的状态。
(F)
A-B-C
↑
master备选案文1:git reset --hard
您希望销毁提交C,并丢弃任何未提交的更改。你这样做:
git reset --hard HEAD~1结果是:
(F)
A-B
↑
master现在B是头。因为您使用了--hard,所以您的文件在提交B时被重置为它们的状态。
备选案文2:git reset
也许提交C不是一个灾难,但只是有点差。您希望撤消提交,但在进行更好的提交之前,请将更改保存一段时间进行编辑。再从这里开始,用C作为你的头:
(F)
A-B-C
↑
master这样做,省去了--hard
git reset HEAD~1在这种情况下,结果是:
(F)
A-B-C
↑
master在这两种情况下,HEAD只是最近提交的指针。执行git reset HEAD~1时,请告诉Git将头指针移回一次提交。但是(除非您使用--hard),您将保留原来的文件。现在,git status显示了您已签入C的更改。您没有丢失任何东西!
备选方案3:git reset --soft
对于最轻的触摸,您甚至可以撤消提交,但保留文件和 索引。
git reset --soft HEAD~1这不仅使您的文件独处,甚至使您的索引独处。当您执行git status时,您将看到索引中有相同的文件。实际上,在这个命令之后,您可以执行git commit,然后重新执行刚才的提交。
选项4:您做了git reset --hard,需要将代码拿回来
还有一件事:假设您的像第一个示例那样销毁了一个提交,那么,然后发现您需要它,毕竟?运气不好,对吧?
不,还有办法把它拿回来。键入以下内容
git reflog您将看到移动到的(部分)提交沙斯 (即散列)列表。找到已销毁的提交,然后执行以下操作:
git checkout -b someNewBranchName shaYouDestroyed你现在已经复活了。提交实际上不会在Git中被销毁约90天,所以你通常可以回去拯救一个你不是有意要摆脱的。
发布于 2011-06-16 17:27:23
有两种方法可以“撤消”上一次提交,具体取决于您是否已经将提交公开(推到远程存储库):
如何撤消本地提交
假设我是本地提交的,但现在我要删除该提交。
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将显示我们的最后一次提交已经被删除。
如何撤消公开提交
如果您已经将提交公之于众,您将希望创建一个新提交,它将“恢复”您在以前提交(当前头)中所做的更改。
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有关更多信息,请访问https://git-scm.com/book/en/v2/Git-Basics-Undoing-Things。
https://stackoverflow.com/questions/927358
复制相似问题