【问题标题】:how to specify default merge strategy on git stash pop如何在 git stash pop 上指定默认合并策略
【发布时间】:2017-05-03 21:46:15
【问题描述】:

当我执行git stash pop 时如何指定默认合并策略?

我试过了

git stash pop --theirs

但这不起作用。

【问题讨论】:

    标签: git


    【解决方案1】:

    这现在是可能的:

    git cherry-pick -n -m1 -Xtheirs stash
    

    文字字符串stash 现在表示顶部的存储条目(您也可以为下面的条目执行stash@{1},依此类推。

    有关其工作原理的更多详细信息,请访问this answer

    【讨论】:

      【解决方案2】:

      因此,如果您在 git stash pop 发生冲突后到达这里,看起来像这样:

      $ git stash pop
      Auto-merging foo.json
      CONFLICT (content): Merge conflict in bar.json
      

      您宁愿丢弃您在bar.json 中保存的内容,最简单的方法是查看我们的:

      $ git checkout --ours bar.json
      

      从藏匿处出来的东西被认为是“他们的”。因此,如果您想丢弃它,请查看“我们的”。

      【讨论】:

        【解决方案3】:

        旁注:你不想要--theirs——这是git checkout 的一个选项,而不是合并——并且没有-s theirs 策略,只有-X theirs 策略选项(我喜欢称这些“扩展选项”以区别于-s 策略)。

        但是,答案是您不能:它根本不支持作为 git stash 代码的一部分。

        可以用不同的方式来做。 The git stash script 是一个 shell 脚本,您可以复制和修改或零碎运行它的各个位,运行 git merge-recursive $b_tree -- $c_tree $w_tree 以合并到隐藏的工作树提交中。您可以手动执行此操作,也可以通过复制和修改脚本以及额外的-X 扩展选项来执行此操作。但是,不能保证这样做what you want。它只会影响 Git 认为有冲突的部分,在这种情况下,它会偏向一侧或另一侧:-X ours 表示赞成 $b_tree-to-$c_tree 更改,而不是 $b_tree 到 @ 987654337@ 更改,-X theirs 表示赞成将$b_tree 更改为$w_tree。不过,您可能希望 $w_tree 提交的整个文件,或者不进行一些不会发生冲突的更改。

        (进行自己的提交会更容易和更直接,您可以在私有分支上进行;然后您可以随时从该提交中提取单个文件和/或进行任何您喜欢的合并,并且不必担心 git stash 脚本的特定内部细节可能会从一个 Git 版本更改为另一个。请注意,要一次合并一个特定文件,您可以使用 git merge-file,但这有点笨拙。)

        【讨论】:

        • 这不是特别好的消息。因此,我可能会不遗余力地记住这一切:创建一个 [临时] 分支而不是存储 -> 签出目标以使用 [不再] 隐藏的更改进行更新 -> 合并策略可用的分支。
        • @TomaszGandor:对于简单的 stash-checkout-unstash 之外的任何事情,我建议无论如何都在临时分支上进行提交。否则,建立一堆匿名藏匿处太容易了,当你稍后回到它们时,通常不知道你在做什么。也许有些人能记得,但我自己搞糊涂了:-)
        猜你喜欢
        • 1970-01-01
        • 2020-02-05
        • 2023-02-11
        • 2012-12-25
        • 2014-06-01
        • 2014-04-08
        • 2017-11-25
        • 2013-02-23
        相关资源
        最近更新 更多