Git获取本地服务器上从分支A到分支B的更改

Git获取本地服务器上从分支A到分支B的更改,git,Git,我在做一件我确信非常容易的事情时有些挣扎 以下是我典型的git历史记录: C--F <-- [Branch B] The branch I am working on / A--B--D--E <-- [Branch A] Another branch where work is done C--F如果您只想让commit“E”,您可以选择它: git签出分支-b 吉特樱桃采摘 否则,如果要合并所有提交,可以将分支branch-a重设为分支branch-b

我在做一件我确信非常容易的事情时有些挣扎

以下是我典型的git历史记录:

     C--F   <-- [Branch B] The branch I am working on
    /
A--B--D--E  <-- [Branch A] Another branch where work is done

C--F如果您只想让commit“E”,您可以选择它:

git签出分支-b
吉特樱桃采摘
否则,如果要合并所有提交,可以将分支
branch-a
重设为分支
branch-b

git签出分支-b
git获取和git重新设置基础原点/分支-a(&G)

如@mousetail所述,在分支B上执行
git fetch和&git merge origin/A
。请注意,合并是不对称的。如报告中所述:

将命名提交中的更改(自其历史记录偏离当前分支时起)合并到当前分支中


它只会更改您所在的当前分支(本例中为分支B),并保留A的原样。当出现合并冲突时,您可以通过其他提交在本地解决这些冲突。合并完成后,您可以安全地将B合并回A,而不会发生冲突。这是解决与受保护分支的合并冲突的有效策略(例如,如果a受保护)。

git fetch和&git merge origin/a
可能是如果您想要像
a--B--D--E--C--F这样的线性历史,也可以尝试
git fetch和&git rebase origin/a
初学者规则:永远不要使用
--all
。高级Git用户的规则:几乎从不使用
--all
:-)说真的,
--all
被传递到
git fetch
,在这里它意味着所有的遥控器。除非你有多个遥控器,否则它是没有用的。即使这样,它也很少有用。这个答案应该是公认的,因为它还考虑了对问题的解释,即实际上只需要补丁
E
。原来的问题没有说“改变”,但也没有说“改变”。为了完整起见,这个答案还可以提到
git-rebase-origin/branch-a
,但我认为这将是现实中最糟糕的选择。非常感谢大家的回答!我有一个关于第一种选择的问题。如果I
cherry pick E
,这是否会将
B
的更改导入到
D
,以及将
D
的更改导入到
E
?如果是这样的话,我不理解这两种选择之间的区别。你能给我解释一下吗?理想情况下,我希望
分支B
分支A
的重基成为
分支B
上的新提交。因此,我可以很容易地恢复是两个功能不兼容。