如何在 git 存储流行音乐上指定默认合并策略



当我做git stash pop时,如何指定默认的合并策略?

我试过了

git stash pop --theirs

但这行不通。

现在可以这样做:

git cherry-pick -n -m1 -Xtheirs stash

文字字符串stash现在表示顶部的存储条目(您也可以对其下面的条目执行stash@{1},依此类推。

有关其工作原理的更多详细信息,请参阅此答案。

旁注:你不希望--theirs——这是一个git checkout的选项,而不是合并——而且没有-s theirs策略,只有一个-X theirs策略选项(我喜欢称这些"扩展选项"来区分它们-s策略)。

然而,答案是你不能:它根本不支持作为git stash代码的一部分。

可以用不同的方式做到这一点。git stash脚本是一个 shell 脚本,您可以复制和修改或逐段运行其各种位,运行git merge-recursive $b_tree -- $c_tree $w_tree以合并到存储的工作树提交中。 您可以自己执行此操作,也可以手动或通过复制和修改脚本来执行此操作,并使用其他-X扩展选项。 但是,这不能保证执行您想要的操作。 它只会影响 Git 认为冲突的部分,在这种情况下,它将有利于一方或另一方:-X ours表示支持$b_tree$c_tree更改,而不是$b_tree$w_tree更改,-X theirs意味着支持$b_tree$w_tree更改。 但是,您可能希望提交$w_tree整个文件,或者不进行一些不冲突的更改。

(创建自己的提交会更容易、更直接,你可以在私有分支上进行;然后您可以随时从该提交中提取单个文件和/或执行您喜欢的任何合并,而不必担心git stash脚本的特定内部细节可能会从一个 Git 版本更改为另一个 Git 版本。 请注意,要一次合并一个特定文件,您可以使用git merge-file,但这有点笨拙。

因此,如果您在冲突git stash pop后到达这里,如下所示:

$ git stash pop
Auto-merging foo.json
CONFLICT (content): Merge conflict in bar.json

而且您宁愿丢弃您藏在bar.json中的东西,最简单的方法是查看我们的:

$ git checkout --ours bar.json

从藏匿处出来的东西被认为是"他们的"。因此,如果您想丢弃它,请查看"我们的"。

最新更新