gpt4 book ai didi

Git 强制 merge

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

我想知道我应该怎么做才能强制从 dev 分支 merge 到我的 master 分支?使用“git merge dev”会导致很多冲突。但是,我不想单独处理它们。相反,我只是想使用我的 dev 分支中的所有文件并将其 merge 到 master 中。但是这个“强制 merge ”并没有我想象的那么容易。有人可以指出我正确的方向吗?

最佳答案

I simply want to use all the files from my dev branch

如果你的意思是你想使用 all 你的 dev 分支中的文件——即自从分支分开以来在 master 分支上所做的任何更改都应该被撤消——那么那里有几种方法。

merge 我们的

你可以

git checkout dev
git merge -s ours master
git checkout master
git merge dev

这有点迂回,因为没有“他们的”策略。 (默认 merge 策略有一个“他们的”策略选项,但它仍然会尝试应用来自 master 的更改,只要它们不与来自的更改冲突dev;如果您想要的是只是保留dev 版本,那是行不通的。)所以您使用我们的 策略在 masterdev 之间使用所有文件的 dev 版本创建 merge 提交,然后快进 master merge 。

这意味着 parent 的顺序将在 merge 提交时颠倒,这是您通常不会注意到的事情,但在某些情况下可能很重要(比如如果您使用 --first-parent 在日志或其他东西上)。

提交树

如果 parent 的顺序很重要,你可以求助于管道命令 commit-tree

git checkout master
git merge $(git commit-tree dev -p master -p dev -m "merging dev over master")

重写历史

上述方法的潜在缺点是它们会产生一个可能不直观的 merge 提交,因为它的结果忽略了 merge 一侧的更改(而 merge 预计会 merge 来自双方的更改边)。因为你的 merge 在正常策略下会发生冲突,所以它并没有那么大的问题,但仍然有人将其归类为“邪恶的 merge ”。如果您想避免这种情况,另一种选择是重写历史。

这也有不利的一面,尤其是当您使用此存储库与其他开发人员协作时。您可以在 git rebase 文档的“recovering from upstream rebase”下阅读该问题(以及通常如何解决)。 (虽然文档将问题称为“上游 rebase ”,但它确实适用于共享分支的任何历史记录重写。)

如果您认为重写历史是有意义的,那么最简单的事情就是移动 master 分支,使其指向与 dev 相同的提交。

git checkout dev
git branch -f master

关于Git 强制 merge ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53438353/

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