如何在历史记录中更改特定Commit中的文件?

时间:2014-07-25 21:11:46

标签: git

说我有以下提交历史记录:

4317629 Bug-100 : Formatting / Cosmetic Changes
da10348 Bug-100 : Wire Up UI
9b49b0a Bug-100 : Added UI

现在,我发现在提交da10348中,我有一些文件:a.txtb.txtc.txt包含我需要删除的行/固定。

有人可以告诉我我该怎么做吗?

3 个答案:

答案 0 :(得分:1)

您必须将您的分支重新绑定到要按顺序更改的提交 提交后更改历史记录所以实际上在这种情况下你必须重新定义 在您想要更改的(^运算符)之前的提交上的分支:

git rebase -i da10348^

更改提交以编辑和实施更改,然后:

git commit -a --amend --no-edit

最后完成了rebase:

git rebase --continue

答案 1 :(得分:1)

请注意,只有在您为要更改的提交的所有后代提交重写历史记录时,才能执行此操作。否则,您应该只在当前主分支的顶端进行更改。

如果你想这样做,你可以执行

git checkout da10348
# make changes
git commit -a --amend
git rebase --onto <amended-sha> da10348 <your-branch>

或者如果您更喜欢交互式rebase

git rebase -i da10348^
# change "pick da10348" to "edit da10348"
# save, and make changes when rebase -i stops at da10348

答案 2 :(得分:1)

这是我发现最容易对最近的提交进行小修复的方法,因为它只需要一个rebase命令(即没有git rebase --continue)并且不涉及记住提交哈希。

  1. 使用这些修补程序进行了新的提交(通常我只使用&#34;修复&#34;作为提交消息)
  2. git rebase -i origin/master如果提交尚未推送到原点,或者git rebase -i HEAD~3基于how far in the history提交更改是(可以高估 - 更老)承诺不会被改变)
  3. 在交互式rebase的编辑器中,将带有这些修复的新提交移动到要修复的提交之后,并将其命令更改为ffixup
  4. 保存并关闭编辑器,等待rebase完成并检查生成的历史记录是否符合您的要求。