我在 git 存储槽中有一组调试实用程序;我在分支之间移动,这些分支在存储的变化方面只有很小的差异。我 git stash apply
各自分支上的 top stash 来测试一个特性。
但是我在一个分支中遇到了适当的 merge 冲突,但我想更喜欢存储中的内容,所以我希望 merge 策略“递归”更喜欢来自存储的版本(我 猜测那将是“他们的”,参见 man git-merge
部分 MERGE-STRATEGIES
,recursive
小节)。
我能以某种方式告诉 git stash apply
使用什么 merge 策略吗?
最佳答案
是的,您可以自己进行 merge 。存储提交的命名为 stash
。
git cherry-pick -n -m1 -Xtheirs stash
Cherrypick 以 cherrypick 的父级为基础进行 merge 。 Stash commits record the worktree state with two parents, the checked-out commit and the stashed index .
-m1
告诉 cherrypick 使用第一个父级作为 merge 基础,因为这里对于您想要 merge 的确切更改有任何歧义。 -n
表示不提交结果。
这将生成一个工作树和索引,其中的更改与 stash 的工作树中的更改相匹配。相反,如果您想在 stash 索引中应用更改,请改用 cherrypick stash^2
;或者,如果您想将 stash 索引的更改(即添加的又名分阶段又名索引内容)应用到 stash 的工作树,请使用 -m2
而不是 -m1
。
如果你想只 merge 到工作树,做
savetree=`git write-tree`
git cherry-pick -n -m1 -Xtheirs stash
git read-tree $savetree
这足以处理此处问题中的情况(应用一组方便的更改),但它并不能完全重现 stash 为您所做的一切。仅将 stash 的索引更改应用于当前索引,并将 stash 的工作树更改仅应用于当前工作树,这简直是太挑剔了。 git stash
是 /usr/libexec/git-core/git-stash
中的一个脚本,如果有人想看的话。
关于git - 应用 git stash 时,我可以影响 "recursive"使用的 merge 策略吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19314287/