如何将主干(master)分支合并到当前分支,但当前分支落后于主干分支?

5

假设分支看起来像这样

master: A B C D*
           \  
my-branch:  E F G H*

我希望它看起来像这样

master: A B C D*
               \
my-branch:      E F G H*

注意:分支名称标识的是分支中的最后一个提交,而不是第一个。分支my-branch中的第一个提交是提交A。提交A也是分支master中的第一个提交。该提交位于两个分支中。当完成变基时,您将获得四个新提交:原始的四个E-F-G-H提交仍然存在,E的父提交仍然是B,因此名称my-branch标识了提交H副本。如果我们称之为H-prime(H'),则名称my-branch定位到H',它定位到G',它定位到F',它定位到E',它定位到D - torek
所以重新设置基础会复制所有这些提交吗?但最早的提交父级被更改了? - Muhammad Umer
是的。Rebase 必须 复制提交以进行任何更改,因为提交的哈希 ID 是提交内容的校验和。更改内容会生成一个新的、不同的提交,具有新的、不同的哈希 ID。Rebase 需要使 E'E 在两个方面不同:它有一个不同的父级,并且它有(可能)一个不同的快照(假设 D 中的快照与 B 中的不同)。 - torek
校验和是否还包括父提交的哈希值?否则内容没有改变。 - Muhammad Umer
是的。从技术上讲,它是元数据的校验和;快照使用Git tree对象,并通过元数据进行指定。任何提交的元数据都是人类可读的:尝试git cat-file -p HEAD查看它。 - torek
2个回答

9

只需要将您的分支变基到主分支上:

git checkout my-branch
git rebase master

3
或者只需一条命令:git rebase master my-branch,它实际上执行了上述两个命令。 - Adrian Shum

0

将主分支rebase到你的分支上,然后将你的分支合并到主分支。

git checkout my-branch
git rebase master
git checkout master
git merge my-branch

大师在 OP 的示例中从未移动。 - Mad Physicist
2
这个需要最终完成,但现在不需要。 - Muhammad Umer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接