使用commit --amend时,使子组与Parent保持同步

时间:2016-10-12 00:23:32

标签: git

我目前的Git仓库有三个分支:mainlinefeature_afeature_b。历史如下:

  1. mainline是从远程仓库克隆的
  2. feature_a分支已从mainline
  3. 签出
  4. feature_a进行了更改,并将其作为commit_a
  5. 提交
  6. feature_b分支已从feature_a
  7. 签出
  8. feature_b进行了更改,并将其作为commit_b
  9. 提交
  10. feature_a进行了更改,并修改为commit_a
  11. 如何更新feature_b分支并将更改修改为commit_a

2 个答案:

答案 0 :(得分:4)

你的历史可能看起来像这样:

           A' [feature_a]
          /
*--*--*--* [mainline]
          \
           A [original feature_a]
            \
             B [feature_b]

提交A是您在feature_a上提交的原始提交。当您使用git commit --amend修改提交时,它创建了一个提交,A'

您需要重新定位feature_b以将其附加到新提交A'。做:

git rebase --onto feature_a A feature_b

(你可能也可以通过简单地执行git rebase feature_a feature_b来逃避,但我不确定这是如何工作的,因为你修改了提交A。)< / p>

现在您的历史记录如下:

             B' [feature_b]
            /
           A' [feature_a]
          /
*--*--*--* [mainline]

技术上提交AB仍然在回购中,但由于它们没有被使用,Git会在以后对它们进行垃圾收集。

答案 1 :(得分:-1)

或者:

  • 结帐feature_b,然后git merge feature_a

OR:

  • 结帐feature_a,然后git rebase feature_b

另外,为什么要修改提交而不是创建新提交?通常,最好只创建一个新提交。但是,如果您有兴趣使用提交维护特定的历史故事情节,则上面的rebase选项可能更有利。

如果您正在协作使用此存储库,请注意git commit --amendgit rebase,因为这两个命令都会编辑提交ID历史记录,并且可能会让您的协作者陷入困境。