如何在git stash pop上指定默认合并策略

时间:2017-05-03 21:46:16

标签: git

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

我试过

git stash pop --theirs

但这不起作用。

3 个答案:

答案 0 :(得分:6)

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

但答案是,您无法做到:git stash代码不支持它。

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

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

答案 1 :(得分:3)

现在可以:

git cherry-pick -n -m1 -Xtheirs stash

文字字符串stash现在表示最上方的隐藏项(您也可以为下面的隐藏项执行stash@{1},依此类推。

有关其工作原理的更多详细信息,请参见this answer

答案 2 :(得分:0)

因此,如果您在git stash pop之后遇到冲突而到达这里,看起来像这样:

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

而您只想丢弃保存在bar.json中的内容,最简单的方法是检出我们的内容:

$ git checkout --ours bar.json

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