【问题标题】:How can I undo my last git add/commit?如何撤消上一次 git add/commit?
【发布时间】:2011-05-28 18:00:41
【问题描述】:

我编辑了一个文件并做了:

git add file.py
git commit -m 'fixed bug'

然后我编辑了另一个文件并执行了一个小错误修复。我不想要两个提交,一个接一个,显示“错误修复”。我想要一个带有“错误修复”的提交。

如何撤消最后一次添加/提交并更改第一个提交消息?

我正在查看git resetgit revertgit undo 命令,但我不想用猜测来搞砸我的回购

编辑:了解如何操作:http://www.gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html

【问题讨论】:

    标签: git repository commit undo


    【解决方案1】:

    如果您已经提交了第二次更改,请先将其重置:

    git reset HEAD^
    

    现在您的HEAD 处于第一次提交时,您本地文件的内容没有改变。

    git add <the file(s) for the second bug fix>
    git commit --amend -m'bug fixes'
    

    如果要在第二个错误修复中包含所有跟踪和更改的文件,您可以像往常一样运行它:

    git commit -a --amend
    

    修改提交就是这样:

    • 将索引中的更改添加到上一次提交中(因此需要git add,或-a
    • 允许您更改提交消息

    不过要小心:如果你已经分发了第一个提交,其他人的 repo 会变得很奇怪。您不应更改其他人已获取的提交。


    您也可以使用git merge --squash,感觉更合乎逻辑,但不一定更容易。使用它将包含您的两个提交的分支合并到上一个提交。

    挤压也适用于git rebase

    【讨论】:

    • 使用我编辑的两个 I 文件,我已经完成了git add file; git commit。执行git --amend -m 'asd' 只会编辑我之前的提交消息,不是吗?将第一次提交留在日志中?
    • 不,--amend 将索引的内容添加到新创建的提交中。旧的提交消失了(变成悬空的)。您可能仍然可以在 gitk 中看到它,在 gitk 中运行重新加载(Ctrl+F5)使其消失。悬空提交将在稍后从内存中消失(git gc 应该将其清除)。
    • 您是否已经提交了两次?在这种情况下,您可以在上面的命令前加上git reset HEAD^。请在执行所有操作之前备份您的 repo(确保 .git 文件夹在您的备份中),我不想对数据丢失负责。
    • 索引中没有任何内容。我有两个提交要合并为一个...
    猜你喜欢
    • 2012-08-21
    • 2011-06-06
    • 2017-01-08
    • 2010-11-30
    • 2017-05-11
    • 2015-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多