这个问题在这里已经有了答案:
How do I undo the most recent local commits in Git?
(98 个回答)
2年前关闭。
以下是我在工作中经常发生的事情:
[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 喜欢创建的文件。在这种情况下,我通常会再次克隆 repo,复制并粘贴我的新代码,然后在没有
.DS_Store
的情况下再次提交。 .但我知道这不是干净的方法。那么,我怎样才能干净利落地撤消提交呢?我试过
git reset --hard HEAD
但它也会删除我的新文件。
最佳答案
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
,它说“哦,还要让我的所有文件看起来都像他们在那个提交中所做的那样”。分支只是引用特定提交的标签;它可以自由移动(尽管如果你推了一个 Twig 然后你向后移动,当你尝试推或 pull 时会遇到问题)。
如果您觉得需要重新克隆存储库,git 中几乎总有更好的解决方案。在 git 中提交,其中的文件可以撤消、重做、移动,有时甚至可以复活。此外,提交是本地的:在您推送之前没有人看到它们。
关于git - 如何在不丢失文件的情况下撤消 git 提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53805732/