Git忘了将文件更改添加到尚未推送的提交(不是最后一个)

时间:2014-05-18 19:51:12

标签: git

我想将文件更改添加到尚未推送的提交(不是最后一个)。

我们说我有以下情况:

git init
touch test.txt
// do some changes to the text file
git commit -a -m "First change"

# if I now change something I can add it to the previous commit with:
git add test.txt
git commit --amend -C HEAD


# more changes to test.txt
git commit -a -m "Second change"

# more changes to test.txt
git commit -a -m "Third change"

# one more change
# how can I add the change to my second commit (second change)?

我希望问题很清楚。如果没有,请告诉我。我试过了git commit --amend -C HEAD~2,但那个在我真正的git项目中引起了一些奇怪的麻烦。

1 个答案:

答案 0 :(得分:5)

您可以使用git rebase。我建议您阅读git help rebase,特别是INTERACTIVE_MODE部分,因为在执行rebase时要小心谨慎。

假设您的上次提交是“第三次更改”,您可以:

  1. 调用git rebase -i HEAD~2
  2. git将调用您的编辑器,其中两行显示第二次和第三次提交,每次提交都有一个“pick”前缀。将“第二次更改”提交的“选择”前缀更改为“编辑”。它应该看起来像:
  3. edit xxxxxxx Second change
    pick xxxxxxx Third change
    
    1. 保存并退出编辑器。
    2. 您现在将回滚到“第二次更改后”的状态,git将停止允许您编辑/修改提交。所以你现在可以git add其他文件,一旦你准备好了git commit --amend,它将加载一个编辑器,你可以编辑第二个更改的提交日志消息。
    3. 一旦您对新的“第二次更改”感到满意,请发出git rebase --continue。这将重新修改第二次修改后的第三次更改。