当我做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
从藏匿处出来的东西被认为是"他们的"。因此,如果您想丢弃它,请查看"我们的"。