为了账号安全,请及时绑定邮箱和手机立即绑定

如何撤消Git中最近的本地提交?

如何撤消Git中最近的本地提交?

Git
温温酱 2019-05-24 14:48:53
如何撤消Git中最近的本地提交?我不小心将错误的文件提交给Git,但我还没有将提交推送到服务器。如何从本地存储库中撤消这些提交?
查看完整描述

4 回答

?
智慧大石

TA贡献1946条经验 获得超3个赞

如果您不知道它是如何工作的,撤消提交有点可怕。但是如果你理解的话,它实际上非常容易。


假设您有这个,其中C是您的HEAD,(F)是您的文件的状态。


   (F)

A-B-C

    ↑

  master

你想要提交C并且永远不会再看到它。你做这个:


git reset --hard HEAD~1

结果是:


 (F)

A-B

  ↑

master

现在B是HEAD。因为您使用过--hard,您的文件将重置为它们在提交B时的状态。


啊,但是假设提交C不是灾难,而是一点点关闭。您希望撤消提交,但在进行更好的提交之前,请保留更改以进行一些编辑。从这里开始,用C作为你的HEAD:


   (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,你会看到你已经移动过的(部分)提交shas(即散列)的列表。找到你销毁的提交,并执行以下操作:


git checkout -b someNewBranchName shaYouDestroyed

你现在复活了这个提交。提交实际上并没有在Git中被摧毁大约90天,所以你通常可以回去拯救一个你不想甩掉的人。


查看完整回答
反对 回复 2019-05-24
?
慕少森

TA贡献2019条经验 获得超9个赞

添加/删除文件以获得您想要的方式:

git rm classdir
git add sourcedir

然后修改提交:

git commit --amend

之前的错误提交将被编辑以反映新的索引状态 - 换句话说,它就像你从未犯过错误一样。

请注意,只有在尚未推送的情况下才应执行此操作。如果你已推,那么你只需要正常提交修复。


查看完整回答
反对 回复 2019-05-24
  • 4 回答
  • 0 关注
  • 6094 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信