为什么会使用“git merge -s ours”?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么会使用“git merge -s ours”?相关的知识,希望对你有一定的参考价值。
我理解“我们的”合并策略(听到合并的引用?)实际上并没有使用来自其他分支的任何提交。
“我们的”战略有时被称为“保持对方的历史”。但它将历史记录为“应用”。奇怪的。有没有我想要这种行为的情况?
作为替代方案,您也可以导入其他分支并将其历史记录放在那里,它所属的位置。
请注意,我问的是“-s ours”策略,而不是“-s我们的”选项“-s recursive”(不同之处在于它应用那些不冲突的提交)。
一种用法是“跳过”在维护分支上进行的提交,该提交无意返回到开发的主/主干分支。请参阅此前一个问题的示例:git - skipping specific commits when merging
另一个原因是,如果您的分支与活动分支非常不同步,并且您希望使用活动分支更新旧分支,但可能的合并冲突会阻止使用正常合并轻松完成此操作。
例如,我的用例是:
你有一个master和dev分支,由于某种原因,你没有在几周内更新你的主分支,并且你试图将你的dev分支合并到master现在会导致合并冲突。你可能想要做的是用dev分支的当前状态覆盖你的主分支,所以让它们同步。
在这种情况下你可以做的如下,使用另一个SO用户in another SO answer here概述的步骤。但请参阅下面的警告说明。
git checkout dev
git merge -s ours master
git checkout master
git merge dev
值得一提的是:最后,我的主人与我的开发人员保持同步,但开发人员显示4个提交被推送到遥控器,这很奇怪。应该有0推,因为我只是想更新master。不过,代码看起来很好。值得注意的是,因为我之前从未使用过git merge -s ours
所以我不是100%使用它。
我还找到了另一个使用ours
的答案,这对人们有用:https://stackoverflow.com/a/13307342/339803
我在另一个分支中使用这个伪合并来跟踪其他分支,包括被遗弃的分支。这个额外的分支实际上只有一个文件(称为branches-list
),它包含活动和非活动分支的文本列表,但在重要点(主要是分支点和“分支结束”,要么合并要么放弃)开发分支合并(使用“-s ours”)到此分支。
这是our project最近的截图:
因此,我最后从大师那里分支elo-test
,然后从我分支stroke-transform-example
为我的question here(和答案 - 这应该是两个不同的提交,但)。在每个这样的分支点,更重要的是,在分支结束时的每个点,而不是它被合并到其他分支(当我下次清理时将发生在stroke-transform-example
),我现在将这个分支与-s ours
合并到meta-分支branches
。
然后我可以在不丢失历史的情况下删除未使用的分支,因此git branch -a
的输出总是非常小。如果我想回顾一下我做了什么,我很容易找到它们。
(我认为这不是真正的选择,但它的效果非常好。)
另一种用途是作为强制推动的替代方案,其不会导致其他人的非快进变化。
例如。你想恢复传入(愚蠢)提交,但你不想做git push -f
,因为那时你将花费下一个半小时指导你的客户从中恢复,你想要一个更短的替代品
git checkout -b temp remote/origin
git revert HEAD
git push temp:origin
git checkout master
git merge origin/master
所以你干脆做
git merge -s ours origin/master
一个用途是作为另一个合并的准备。
假设您有一些下游更改要与新的上游版本合并,但新的上游版本不是旧版上游版本的git后代(可能是因为旧的上游版本是一个与trunk不同的稳定分支,也许是因为上游版本实际上是导入工具的结果)。
你能做的是。
- 查看新的上游版本。
- “psuedomerge”旧的上游版本。
- 合并新的下游版本。
通过这种方式,您的本地更改将被合并,但是git不会尝试合并旧的上游更改,因为它认为它们已经合并。
以上是关于为什么会使用“git merge -s ours”?的主要内容,如果未能解决你的问题,请参考以下文章