这是我上班时经常发生的事情:
[user@macmini ~/code/project $] git add .
[user@macmini ~/code/project $] git commit -m "Fixed whatever bug"
[master 93a3c47] Fixed whatever bug
3 files changed, 290 insertions(+)
create mode 100644 .DS_Store
create mode 100755 some-code.js
create mode 100755 some-other-code.js
如您所见,我意外地提交了.DS_Store
文件,就像在您在Finder中打开文件夹后macOS所创建的.DS_Store
文件一样。
在这种情况下,我通常会再次克隆存储库,将新代码复制并粘贴到其中,然后在没有git reset --hard HEAD
的情况下再次提交。但是我知道这不是干净的方法。
那么,如何清除撤消提交?我已经尝试过char * _list
,但它也会删除我的新文件。
答案 0 :(得分:4)
git reset HEAD~1
这将“撤消”您的上一次提交,而无需触摸您的工作目录(我们的任何文件)。它与git reset --mixed HEAD~1
相同。您还可以执行git reset --soft HEAD~1
,这会将所有文件都标记为提交。
如果您最喜欢自己的提交,但只想对其内容或提交消息进行少量更改,则可以修改当前提交:
git rm .DS_Store
git commit --amend
这将提示您编辑提交消息(您可以保持不变),然后使用所做的更改来修改提交。
git reset
的基本含义是“将当前分支移动到给定的提交”,而HEAD~1
的含义是“上一个提交”。您命令的唯一问题是它包含--hard
,它说:“哦,还要使我的所有文件看起来像在提交中一样”。
分支只是引用特定提交的标签;可以自由移动它(尽管如果您已推动分支并将其向后移动,则在尝试推动或拉动时会遇到问题)。
如果您觉得需要重新克隆存储库,则git中几乎总是有更好的解决方案。在git中提交,其中的文件可以撤消,重做,移动,有时甚至可以复活。另外,提交是本地:只有在您按下后,才会有人看到它们。