gpt4 book ai didi

git - 将功能分支重新定位到另一个分支的特定提交

转载 作者:太空狗 更新时间:2023-10-29 14:05:02 24 4
gpt4 key购买 nike

我正在尝试将一个功能分支(从 master 分支出来) rebase 到另一个分支的特定提交上。我的初始状态如下

       C -- D            branch1
/
A -- B -- E -- F master
\
branch2 (zero commits after creating the branch)

我首先将 branch2 重新定位到 master 中的 A 上,效果很好。我现在的状态(据我理解)应该是这样的

       C -- D             branch1
/
A -- B -- E -- F master
\
B -- E -- F branch2

我验证了 branch2 在提交 A 时从 master 分支出来,并且与 master 分支一致。我现在想要得到的是这个

A -- B -- E -- F          master
\
B -- E -- F branch2
\
C -- D branch1

我试过了

git checkout branch1
git rebase --onto B branch2

但这导致了一大堆冲突,我完全不明白这些冲突是如何产生的。也许我完全误解了 rebase 的作用?

注意:在成功将 branch1 rebase 到 branch2 的 B 后,我打算将 master 重置为 A,因此最终版本应该如下所示。

A                  master
\
B -- E -- F branch2
\
C -- D branch1

最佳答案

您的假设存在一些问题。首先,分支只是指向提交的指针。您从这里开始,然后 check out master

       C -- D      branch1
/
A -- B -- E -- F master

git branch branch2 之后你有这个。

       C -- D      branch1
/
A -- B -- E -- F master & branch2

注意这里没有 stub 分支,masterbranch2 都指向 F。除了它们的名字,它们没有区别。

一旦你 checkout branch2git rebase A 没有任何改变。 branch2 的祖先已经有了 A,它仍然指向 F。您应该已经收到类似 Current branch branch2 is up date 的消息。

当您执行 git checkout branch1git rebase --onto B branch2 时,这会混淆事情。有一个假定的第三个参数,即当前 checkout 的分支。您实际运行的是 git rebase --onto B branch2 branch1。这就是说“将分支 1 可访问但分支 2 不可访问的提交(与 git log branch2..branch1 或 C 和 D 相同)并将它们放入 B”。这应该是一个空操作,但如果 branch1 和 branch2 有任何共同的变化,rebase 将把它们扔掉。

如果 C 和 E 进行了相同的更改,您最终会遇到这种情况,并且可能会发生冲突。

       C -- D      original branch1
/
A -- B -- E -- F master & branch2
\
D1 branch1

这没有多大意义,但这就是当您尝试在两个堂兄弟之间 rebase 时会发生的情况。

另请注意,重新设置分支的 ID 为 D1,而不是 D。提交 ID 包含其父代的 ID,因此 ID 必须更改。 rebase 不会重写历史,它会创建新的历史并告诉您它一直都是这样。一个微妙但重要的区别。您的原始提交仍然存在……一段时间。


如果你想从这里开始:

       C -- D      branch1
/
A -- B -- E -- F master & branch2

为此。

A                  master
\
B -- E -- F branch2
\
C -- D branch1

它可以翻转过来,以便与您拥有的更好对齐。

       C -- D      branch1
/
B -- E -- F branch2
/
A master

您需要做的就是将 master 移动到 A。有几种方法可以做到这一点,一种是 git branch -f master A。这会强制 master 移动到 A

关于git - 将功能分支重新定位到另一个分支的特定提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37227103/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com