如何撤消我上次的git add/commit?

dav*_*ave 18 git commit undo repository

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

git add file.py
git commit -m 'fixed bug'
Run Code Online (Sandbox Code Playgroud)

然后我编辑了另一个文件并执行了一个小错误修复.我不希望两个提交,一个接一个,显示'错误修复'.我想要一个提交'bug fixes'.

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

我一直在寻找的git reset,git revert,git undo命令,但我不想搞砸了我的回购带猜

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

Gau*_*ier 35

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

git reset HEAD^
Run Code Online (Sandbox Code Playgroud)

现在您HEAD处于第一次提交,并且本地文件的内容保持不变.

git add <the file(s) for the second bug fix>
git commit --amend -m'bug fixes'
Run Code Online (Sandbox Code Playgroud)

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

git commit -a --amend
Run Code Online (Sandbox Code Playgroud)

修改提交正是这样的:

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

但要小心:如果你分发了第一个提交,其他人的回购会变得奇怪.您不应该更改其他人提取的提交.


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

压扁也适用git rebase.