gpt4 book ai didi

git - 将两个分支之间的差异 merge 到第三个分支

转载 作者:太空狗 更新时间:2023-10-29 13:10:18 27 4
gpt4 key购买 nike

假设我有两个分支,masternew_feature

我应该处理一个特定的功能,我认为这个功能将是 new_feature 的一部分,所以,我检查了 new_feature 的 specific_feature 分支 分支,像这样

git checkout -b specific_feature

现在我在这个 specific_feature 分支中做了很多开发,将 upstream/new_feature merge 了几次以获得远程更改。

现在,我开始知道我的 specific_feature 应该从 master 而不是 new_feature 分支出来。 (new_feature 分支还没有准备好被推送)

有没有一种方法可以区分我的 specific_feature 分支和 new_feature 分支,并将这些更改应用到新分支,比如 specific_feature_master (从 master 分支出来)?

最佳答案

这似乎是 git rebase --onto 的工作:

git rebase --onto master new_feature specific_feature

这将只接受 after new_featurespecific_feature HEAD 的提交,并将它们重播到 master 上。

请注意,然后您必须强制将 specific_feature 推送到上游(如果您之前已经将其推送):git push --force specific_feature

如果其他人已经 pull 下该分支并正在处理它,那可能是个问题。


davidriod 正确地指出:

I don't think this will work as the OP as merged several times the upstream/new_feature branch in the specific_feature branch

如果 new_feature 从未更新(只获取,从不 pull ),那么它可能仍然有效。
如果 new_feature 已更新( pull )并 merge 到 specific_feature 中,则 rebase --onto 将仅播放自上次 merge 以来的最后几次提交: 在这里,只有 z' 提交会被重播,而不是第一个 z

x--x--x
\
y--y--Y--y--y (new_feature)
\ \
z--M--z'--z' (specific_feature)

而不是 cherry-pick ,我会:

  • master 中创建 specific_feature(并将 specific_feature 分支标记为 tmp)
  • merge Y( merge 到 specifc_feature 的最后一个 new_feature 提交)到新的 specific_feature 分支

即:

git checkout -b tmp specific_feature
git checkout -B specific_feature master
git merge $(git merge-base tmp new_feature) # that merges Y

----------M (specific_feature)
/ /
x--x--x /
\ /
y--y--Y--y--y (new_feature)
\ \
z--M--z'--z' (tmp)

然后 rebase --onto 可以使用相同的共同祖先 Y 作为正确的基础:

git rebase --onto specific_feature $(git merge-base tmp new_feature) tmp
git branch -D tmp

----------M--z''--z'' (specific_feature)
/ /
x--x--x /
\ /
y--y--Y--y--y (new_feature)

关于git - 将两个分支之间的差异 merge 到第三个分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29315281/

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