我目前的Git仓库有三个分支:mainline
,feature_a
和feature_b
。历史如下:
mainline
是从远程仓库克隆的feature_a
分支已从mainline
feature_a
进行了更改,并将其作为commit_a
feature_b
分支已从feature_a
feature_b
进行了更改,并将其作为commit_b
feature_a
进行了更改,并修改为commit_a
如何更新feature_b
分支并将更改修改为commit_a
?
答案 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]
技术上提交A
和B
仍然在回购中,但由于它们没有被使用,Git会在以后对它们进行垃圾收集。
答案 1 :(得分:-1)
或者:
feature_b
,然后git merge feature_a
。OR:
feature_a
,然后git rebase feature_b
。 另外,为什么要修改提交而不是创建新提交?通常,最好只创建一个新提交。但是,如果您有兴趣使用提交维护特定的历史故事情节,则上面的rebase选项可能更有利。
如果您正在协作使用此存储库,请注意git commit --amend
或git rebase
,因为这两个命令都会编辑提交ID历史记录,并且可能会让您的协作者陷入困境。