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天,所以你通常可以回去拯救一个你不想甩掉的人。
TA贡献2019条经验 获得超9个赞
添加/删除文件以获得您想要的方式:
git rm classdir git add sourcedir
然后修改提交:
git commit --amend
之前的错误提交将被编辑以反映新的索引状态 - 换句话说,它就像你从未犯过错误一样。
请注意,只有在尚未推送的情况下才应执行此操作。如果你已推,那么你只需要正常提交修复。
- 4 回答
- 0 关注
- 6148 浏览
添加回答
举报