git - 应用 git stash 时,我可以影响 "recursive"使用的 merge 策略吗?

标签 git merge branch git-stash

我在 git 存储槽中有一组调试实用程序;我在分支之间移动,这些分支在存储的变化方面只有很小的差异。我 git stash apply 各自分支上的 top stash 来测试一个特性。

但是我在一个分支中遇到了适当的 merge 冲突,但我想更喜欢存储中的内容,所以我希望 merge 策略“递归”更喜欢来自存储的版本(我 猜测那将是“他们的”,参见 man git-merge 部分 MERGE-STRATEGIESrecursive 小节)。

我能以某种方式告诉 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/

相关文章:

git - 将我在当前分支上的所有更改移动到 Git 中的新分支

git - 为什么 "git branch"在新存储库中保持沉默?

git:如何添加自定义 merge 策略?

git - 如何使用源代码管理管理同一项目的开源和商业版本?

javascript - 如何合并对象?

Javascript 嵌套对象默认回退选项

git - 如何识别需要在 git 中 merge 的分支

version-control - Mercurial : Change root of named branch

Git - 删除丢失的 Blob 或树

git:每个 Remote 都有不同的 .gitignore 文件