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

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

我不小心将错误的文件提交给Git,但我还没有将提交推送到服务器。

如何从本地存储库中撤消这些提交?


温温酱
浏览 6096回答 4
4回答

智慧大石

如果您不知道它是如何工作的,撤消提交有点可怕。但是如果你理解的话,它实际上非常容易。假设您有这个,其中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天,所以你通常可以回去拯救一个你不想甩掉的人。

慕少森

添加/删除文件以获得您想要的方式:git rm classdir git add sourcedir然后修改提交:git commit --amend之前的错误提交将被编辑以反映新的索引状态 - 换句话说,它就像你从未犯过错误一样。请注意,只有在尚未推送的情况下才应执行此操作。如果你已推,那么你只需要正常提交修复。
打开App,查看更多内容
随时随地看视频慕课网APP