如何撤消最新提交并保留更改?

时间:2011-09-06 09:29:58

标签: git

我已经有几个提交,我需要撤消最新的提交,但要对其进行更改。请告知如何做到这一点。谢谢。

2 个答案:

答案 0 :(得分:8)

git reset --soft HEAD^

请注意,如果尚未按下HEAD,则应该只回放HEAD。


修改回复您对原始问题的评论:

如果您只想编辑最近的提交,Git有一个简洁的功能commit --amend。只需使用git add / git rm / git checkout,直到您的索引处于您希望的状态(添加了新的更改,删除了一些更改,删除了文件,......)。然后使用git commit --amend,它会弹出vi(或你在core.editor中配置的任何内容)和上次提交的提交消息,供你编辑。

注意,当我说>编辑最近的提交<时,Git实际上会创建一个新的提交。因此,当提交已经从其他人(即推送到您的公共存储库)中提取时,请不要这样做

答案 1 :(得分:3)

如果您想更新最新的提交,那么修改此提交就可以完成这项工作:

<do the changes you want to>
git add <missing files>
git add <changed files>
git commit --amend

就是这样。

如果您需要更改评论并将其他文件添加到之前的提交,我建议您改为interactive rebase

<do the changes you want to>
git add <missing files>
git commit -a
git rebase -i HEAD~3

在弹出的编辑器中,您会看到类似

的内容
pick <SHA1> Commit that you wanted to change
pick <SHA2> Next commit that you seem to try to rollback in your question
pick <SHA3> Just committed fixes to SHA1

将其更改为

pick <SHA1> Commit that you wanted to change
f <SHA3> Just committed fixes to SHA1
pick <SHA2> Next commit that you seem to try to rollback in your question

('f'表示'fixup' - 压缩SHA1和SHA3并丢弃SHA3的提交消息)

保存更改,退出编辑器。你完成了。

对于你已经向上游推送的提交,永远不应该这样做。