我有两个分支:主干,生产.我在trunk中发现了一个问题,修复并提交了它,推了它.现在它已经过测试,我需要将更改合并到生产分支中作为热修复.我尝试使用樱桃挑选.但是它不起作用,因为修复程序中的更改文件在某些重构期间在先前在主干中重命名,我不想将其投入生产.
我不希望合并所有内容,但只采取此提交.樱桃选择失败了"我们删除"冲突(当然,新文件甚至从未存在于生产分支中).
将更改带入旧文件的正确方法是什么?
jav*_*ett 26
如果:
...那么你一定要考虑改变你的git配置:
$ git config merge.renameLimit 999999
Run Code Online (Sandbox Code Playgroud)
在合并/ cherry-pick期间,git可能会在找到合适的重命名匹配之前达到默认文件检查限制(我认为它是400或1000或类似的东西).提高此限制可能会导致merge/cherry-pick在搜索重命名的文件时花费更长时间,但它可以帮助避免"我们删除"合并挑战.
这应该可以解决问题,但是如果重命名的文件很小并且分支之间的变化很大,那么您也可以使用该-X rename-threshold设置,例如将其从默认的50%降低-X rename-threshold=25%.
rob*_*nst 14
我会用这个很好的旧补丁:
git show COMMIT_ID -- old/file/name.txt | patch new/file/name.txt
Run Code Online (Sandbox Code Playgroud)
面对同样的问题,我问一位同事他会怎么做,他的即时回应是:
git checkout production
git mv production-filename trunk-filename && git commit -m "Just fooling git"
git cherry-pick trunk-commit
git mv trunk-filename production-filename && git commit -m "Undo the damage"
# Now squash the 3 commits
git rebase -i HEAD~3
Run Code Online (Sandbox Code Playgroud)
对我来说就像一个魅力。