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如果有人想看到它.