当我执行git stash pop
时,如何指定默认合并策略?
我试过
git stash pop --theirs
但这不起作用。
答案 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
从藏匿处出来的东西被认为是“他们的”。因此,如果要丢弃它,请查看“我们的”。