我可以影响应用的Git藏匿时所使用的"递归"合并策略?

bit*_*ask 5 git merge branch git-stash

我有一组生活在git存储槽中的调试实用程序; 我正在分支机构之间移动,这些分支机构之间的差异很小.我git stash apply在相应分支上的顶部存储来测试功能.

但是我在其中一个分支中遇到了合适的合并冲突,但是我想更喜欢藏匿中的内容,所以我希望合并策略"递归"更喜欢来自藏匿的版本(我这就是"他们的",参见man git-merge章节MERGE-STRATEGIES,小节" recursive.

我可以以某种方式告诉使用git stash apply什么合并策略?

jth*_*ill 12

是的,你可以自己做合并.存储提交的名称stash.

git cherry-pick -n -m1 -Xtheirs stash
Run Code Online (Sandbox Code Playgroud)

Cherrypick与cherrypick的父母合并为基础.Stash提交记录了两个父项的worktree状态,签出提交和stashed索引.

-m1告诉cherrypick使用的第一个父为合并基础,在这里有任何含糊不清正是你想要合并而改变.该-n说不要犯结果.

这将生成一个工作树和索引,其更改与stashed工作树中的更改相匹配.相反,如果您想要在stashed索引中应用更改,请stash^2改为使用cherrypick ; 或者,如果您要将来自隐藏索引的更改(即添加的又名已暂存的索引内容)应用于隐藏的工作树使用-m2而不是-m1.

如果要合并到worktree,做

savetree=`git write-tree`
git cherry-pick -n -m1 -Xtheirs stash
git read-tree $savetree
Run Code Online (Sandbox Code Playgroud)

这足以在这里处理问题中的情况(应用一组方便的更改),但它并不完全重现存储为您所做的一切.应用stashed索引仅更改当前索引,而stashed worktree仅更改为当前工作树只是简单的挑剔. git stash是一个脚本,/usr/libexec/git-core/git-stash如果有人想看到它.