- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我的承诺树看起来像
---A---B---C master
\
D-----E dev
---A---B--C--F master
\ /
D-----E dev
> git checkout master
> git merge -X theirs E
> git merge -X theirs dev
最佳答案
DR:你需要-s theirs
不存在
不过,有几种替代品。请参阅此问题的其他答案,搜索stackoverflow以查找“git merge strategy their”,和/或仔细阅读Is there a "theirs" version of "git merge -s ours"?(因为原来的queryent实际上正在查找-X theirs
,我在下面描述了这一点)。或者使用以下非常神奇的sh/bash脚本代码:
git merge --ff-only $(git commit-tree -p HEAD -p dev dev^{tree} -F /tmp/commitmsg)
/tmp/commitmsg
后。一定要确定这是你真正想做的,因为这几乎从来都不是。
-X
(扩展参数)和
ours
并不意味着使用我们的版本或使用它们的版本。相反,他们的意思是,当发生冲突时,使用我们的变化或使用他们的变化。
theirs
的提示是commit
master
,
C
的提示是commit
dev
。因此,如果当前分支是
E
,则当前提交是
master
。此时,将名称
C
或commit
dev
的hash id传递给
E
:都选择commit
git merge
作为要合并的commit。
E
都是合并基,因为从
A
和
C
同时向后跟踪到它们相遇的第一个点,就会到达commit
E
。
A
将:
git merge
的diff commit
A
:这是当前分支中发生的更改,即
C
。
ours
与commit
A
:这是
E
中的更改。
theirs
。在commit
animals.txt
中,我们找到了一些关于猫和大象的台词。有更多的行(关于土豚,蝙蝠,狗,雀,沙鼠,仓鼠,鬣蜥,豺兔,等等,每一个字母的字母!)但我们暂时会把注意力集中在猫和大象身上…也在共享的史莱士身上。
A
中,有一个关于cats的新的或不同的声明。所以从
C
到
A
的差异显示了猫的这种变化。什鲁斯也有变化:
$ git diff <hash-of-A> <hash-of-C>
...
@@ ... @@
blah blah
-something about Cats
+something different about Cats
blah blah
@@ ... @@
etc
-the Shrew flies through the air, carefree
+the Shrew swims the ocean, carefree
etc
A
中,与
C
相比,有一个新的或不同的关于大象的声明。因此,
E
-到-
A
的差异显示了大象的这种变化。什鲁斯有一个不同的、相互冲突的变化,我们将在这里省略除此之外的所有内容:
@@ ... @@
etc
-the Shrew flies through the air, carefree
+the Shrew eats rhinos, though it causes indigestion
etc
A
-to-
E
获取对cats的更改,并从
A
-to-
C
获取对大象的更改。这些更改不会冲突,因此合并它们没有问题。但它也会看到关于什鲁斯的谎言的变化,这些变化相互冲突,不能合并。
A
选项指示git选择冲突的一方或另一方
E
选项,git被告知要么选择我们的,要么选择他们的,然后继续前进。但这只会影响相互冲突的变化。Git仍然会像往常一样合并不冲突的更改:在上面的示例中,无论您选择哪个
-X
更改,Git都会同时接受猫和大象的更改,而
-X
只会选择要选择哪个悍妇的更改。
-X
的git合并策略,调用为
-X
,它与
ours
选项非常不同。这个策略告诉git根本不需要使用合并基,只需要保持源树不被“ours”提交。git将在根本不做任何工作来生成正确的合并之后,进行合并提交。其效果是“杀死”另一个分支,同时保留其提交;这允许您删除另一个分支名称,保留提交以备将来查看,同时声明您将不再使用它们(但显然不太确定:-)。
git merge -s ours
存在,它会做同样的事情,除了它会“杀死”当前分支而支持新的分支。有时候你想要这个,当他们出现的时候,如果git有
-X ours
可能会很好,但是不管出于什么原因,它只有
git merge -s theirs
。
git merge -s theirs
的技巧允许你任意使用任意现有的源树连接到任意现有的提交,从而覆盖了
git merge -s ours
(使用< cc>)和
git commit-tree
。生成的commit对象没有名称,但它是
-s ours
commit的直接后代,因此
HEAD^{tree}
会将其添加到当前分支。
关于git - 强制git merge无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46715637/
我从一个 Mercurial 存储库开始,它有多个我试图 merge 到其中的子存储库,就好像它们一直是主存储库的一部分一样。它们从一开始就不应该是子存储库。 我整理了一个将旧历史转换为单个存储库的过
假设我有一个主线分支和一个功能分支。我已经多次将主线分支 merge 到功能分支中,但只有少数非常小的 merge 冲突。我想清理历史,以便最后只有一个 merge 。执行此操作的最佳方法是什么? 最
首先我使用heapq.merge创建了a&b的两个结果,但是在mergea&b之后,我发现a的列表是空的。 >>> a=merge([1,2],[3,4]) >>> b=merge([4,5],[6,
我和我的团队正在使用远离主轨道 (origin/dev) 的远程分支 (origin/our_feature_branch) 开发一项功能。 Gerrit用于审查等。 使用 git merge ori
这个问题在这里已经有了答案: Is there a way to merge with Strategy "ours" without producing a new commit? (1 个回答)
GitLab 无法自动 merge 请求。所有 merge 请求都会收到消息“此 merge 请求包含必须解决的 merge 冲突。您可以在命令行上手动尝试” 消息似乎不正确,我通过使用“git br
git 有没有办法在不 merge 文件的情况下 merge 两个分支?换句话说就是绘制 merge 箭头。 假设我有分支 A 和 B。我需要将分支 B merge 到 A,但不需要 B 中的所有更改
我想使用提供 git 集成的流行的开源问题跟踪器 (Redmine)。不幸的是,跟踪器中的每个项目只能与一个 git repo 相关联。在跟踪器中创建多个项目不是我理想的设置。 考虑到这一点,我尝试使
在我们的存储库中,我们遵循基于 git-flow 的工作流程。我们有一个已完成的发布(安装在生产环境中),因此发布分支已 merge 到主分支中。 B---C---D---E [release
git merge 命令有一个执行快进 merge 的选项,但这不是我想要的,因为如果它不能执行快进 merge ,它会使用普通 merge . 是否有一个 git 命令仅执行快进 merge (从跟
尝试合并 TFS2008 时出现此错误。源分支或目标分支上都没有挂起的更改。 TF14083: The item {0} has a pending merge from the current me
为了更好地理解这些操作,我想知道 github 或 gitlab 到底是如何 merge 这些请求的。当压缩、 rebase 、 merge ......时详细执行哪些 git 命令? 最佳答案 PR
为了更好地理解这些操作,我想知道 github 或 gitlab 到底是如何 merge 这些请求的。当压缩、 rebase 、 merge ......时详细执行哪些 git 命令? 最佳答案 PR
我试图将提交的一部分从默认分支(不是所有文件和其他文件的部分) merge 到一个命名分支。我试过 graft ,但它只需要整个提交,而没有给我选择的机会。这将如何完成? 例子: A---B---C-
我正在进行 merge ,此时我已准备好提交,但我在 TortoiseHg 中的提交对话框显示许多文件已修改,但是当我与 parent 进行比较时,它说所有文件都是二进制相等的。 我没有也从未有过 e
我已经尝试了以下几种变体,但我仍然遇到错误。有什么办法可以解决这个问题。 DB2 10.1(DB2 for z/OS V10) 对于以下 MERGE INTO TRGT t USING SRC s O
我的数据库模型有用户和 MAC 地址。一个用户可以有多个MAC地址,但一个MAC只能属于一个用户。如果某个用户设置了他的 MAC,并且该 MAC 已经链接到另一个用户,则现有关系将被删除,并在新所有者
假设我有一个新功能,所以我创建了一个新分支。这个分支是一个会持续很长时间的副项目,所以我最终将 master merge 回它以使其保持最新状态。这已经发生了 50 次,因为我一直在更新它并消除该功能
过去几个小时我在 Mercurial 中进行了一次巨大的 merge 。 merge 131 个文件后,我的 merge 工具 meld 崩溃,显示 python 回溯。在尝试退出 meld 时,我无
我有一个关于 git merge 的问题。假设我的存储库中有两个分支(本地和远程):master 和 test。当我在测试分支上工作时,主分支被其他人更新了。在终端中,我写: git checkout
我是一名优秀的程序员,十分优秀!