在git中更改旧提交中的小错误

时间:2012-01-17 11:30:43

标签: git

修复一个小错误的最好方法是什么,例如,在较旧的提交中输入错误,而不是进行修复它的新提交?我不想通过大量的错误修复来搞乱这段历史。提交。我尚未将提交推送给任何人。

让我们在这个场景中说,我想在1月15日修改代码拼写错误,同时保留其他2个提交。

commit 826da06f085664298164a4bfc9994cad109c59f8
Author: Me
Date:   Tue Jan 17 18:48:12 2012 +0800

    feature 3 working

commit d816dd97a207add63d31958c3ffba84b65681810
Author: Me
Date:   Tue Jan 16 17:47:29 2012 +0800

    feature 2 working

commit 972ded30c20692cb74ae07d0c941c43022c905bd
Author: Me
Date:   Thu Jan 15 08:48:40 2012 +0800

    feature 1 working

4 个答案:

答案 0 :(得分:2)

我使用以下方案。

  1. 修正一个小错误
  2. 提交修复
  3. git rebase -i HEAD ^ 4
  4. 这打开了一个vim编辑器(可能),后面有一个文本

    pick 972ded feature 1 working
    pick d816dd feature 2 working
    pick 826da0 feature 3 working
    pick xxxxxx fix feature 1
    

    将此更改为

    pick 972ded feature 1 working
    f xxxxxx fix feature 1
    pick d816dd feature 2 working
    pick 826da0 feature 3 working
    

    请注意,我将“修复功能1”提交到第二行并将选择更改为 f 。 这告诉git将“功能1工作”和“修复功能1”提交合并到一个提交,并使用第一个提交消息(即“功能1工作”)。

    “功能2工作”和“功能3工作”提交git叶“未触动”。 (实际上它将此提交应用于新的历史记录。因此它们将获得新的ID)

答案 1 :(得分:1)

rebase -i <sha of commit PRIOR to the one you want to change>

然后选择要更改的提交,删除等。

答案 2 :(得分:1)

git rebase -i HEAD~3

是你想要做的。你是3个提交的作者,如果你没有把它推到某个地方那么我认为继续下去是好的。在任何其他情况下,我建议不要执行该操作。

请参阅this good page for details

答案 3 :(得分:0)

我首选的方法是从有问题的提交中创建一个新分支。修复了新分支和提交的问题。然后将此新分支合并到原始分支。不确定这是不是你想要的。