Che*_*ony 2 git version-control
这是我上班时经常发生的事情:
[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
Run Code Online (Sandbox Code Playgroud)
如您所见,.DS_Store
在Finder中打开文件夹后,我意外地提交了macOS所创建的文件。
在这种情况下,我通常会再次克隆存储库,将新代码复制并粘贴到其中,然后再次提交而不使用.DS_Store
。但是我知道这不是干净的方法。
那么,如何彻底撤消提交?我已经尝试过,git reset --hard HEAD
但是它也会删除我的新文件。
git reset HEAD~1
Run Code Online (Sandbox Code Playgroud)
这将“撤消”您的最后一次提交,而无需触摸您的工作目录(我们的任何文件)。与相同git reset --mixed HEAD~1
。您也可以执行git reset --soft HEAD~1
,这会将所有文件保留为标记为提交。
如果您最喜欢自己的提交,但只想对其内容或提交消息进行少量更改,则可以修改当前提交:
git rm .DS_Store
git commit --amend
Run Code Online (Sandbox Code Playgroud)
这将提示您编辑提交消息(您可以保持不变),然后使用所做的更改来修改提交。
git reset
基本上意味着“将我当前的分支移至给定的提交”,并HEAD~1
意味着“上一次提交”。您命令的唯一问题是它包含了--hard
“”,它说:“哦,还要使我的所有文件看起来像在该提交中一样”。
分支只是引用特定提交的标签。它可以自由移动(尽管如果您已推动分支并将其向后移动,则在尝试推动或拉动时会遇到问题)。
如果您觉得需要重新克隆存储库,那么git中几乎总是有更好的解决方案。在git中提交,其中的文件可以撤消,重做,移动,有时甚至可以复活。另外,提交是本地的:在您推送之前,没有人看到它们。