gpt4 book ai didi

git - 存储对分支所做的更改, merge 分支,然后将更改应用到主分支

转载 作者:太空狗 更新时间:2023-10-29 14:00:31 25 4
gpt4 key购买 nike

所以我让自己陷入了困境。我有一个 master 分支,在 master 分支之外,还有另一个分支(称之为 A)。

现在,我已经完成了 A 分支的工作,进行了提交,但我没有将它与 master merge ,而是开始研究其他功能。在进行另一次提交之前,我执行了 git checkout -b B 然后将更改提交到新的 B 分支。现在我想做的是以某种方式从分支 A 中分离这些更改,将分支 A 与 master merge ,然后将这些更改重新附加到 master 分支(以从 master 开始的新分支的形式)。

有什么办法可以做到吗?

最佳答案

这是解决这个问题的一般方法。

首先,绘制分支图(您现在拥有的)。

...-o-o-o   <-- master
\
a-a-a <-- branchA
\
b <-- branchB

其中 omaster 上的原始提交系列,a 是您在 branchA 上所做的提交, b 是您在 branchB 上进行的提交(或多次提交)。

然后,画出你最后想要的东西。这听起来像你想要的,其中 M 是分支 master 上的新 merge 提交,绑定(bind)在 branchA 上的提交:

                  b   <-- branchB
/
...-o-o-o-------M <-- master
\ /
a-a-a <-- branchA

要做到这一点,您将不得不复制提交b,因为一旦提交存在就永远无法更改,并且b 的父级是最后一个 a 提交。因此,您将制作原始 b 的副本。

我们确实需要将副本称为b' 或其他名称,以将其与原始b 区分开来。我们进去在新的b上加个标记。这样我们也可以在绘图中保留旧的 b。如果我可以为事物着色,我可以用与旧提交不同的颜色绘制新提交 — 如果您在纸上或白板上这样做,请在此处使用一些颜色或其他颜色。

                  b'  <-- new branchB
/
...-o-o-o-------M <-- master
\ /
a-a-a <-- branchA
\
b <-- old branchB, to be deleted when we're done

好的,现在让我们回到你现在拥有的东西并进行比较。我们只需要两个新提交,Mb'

制作 M 很容易。只是:

git checkout master
git merge branchA

如果一切顺利,您现在已经提交了 M。 (如果您必须解决 merge 冲突,那么就这样做,然后提交,现在您已经提交了 M。)也就是说,我们到此为止了:

...-o-o-o-------M     <-- master
\ /
a-a-a <-- branchA
\
b <-- old branchB, to be deleted when we're done

现在我们要复制原来的b并让分支标签移动。我们可以使用 git cherry-pick 加上一些更多的工作来做到这一点,但是执行 cherry-pick for you, and 的命令移动了完成后的标签是 git rebase。我们要检查 branchB 并将其“ rebase ”到分支 master:

git checkout branchB
git rebase master

这将挑选 branchB 而不是 master 上的提交,即提交 b,复制它们(或“它”,在这种情况下)到 master 的(尖端)提交的新行。所以这使得 b' 然后使 branchB 指向 b'

如果一切顺利,您现在就大功告成了。 (在这种情况下它应该会很好。在更复杂的情况下,您可能必须执行有时与 git merge 相关的相同类型的 merge 冲突解决 - 底层 cherry -pickrebase 确实使用 git merge 使用的相同 merge 代码,因此 git 可以在大多数时候自动做正确的事情。)

关于git - 存储对分支所做的更改, merge 分支,然后将更改应用到主分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22387542/

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