如果需要将修复提交到master和另一个分支(在远程共享仓库上),那么最佳做法是什么? 既然我们不能在这里使用git merge,因为并不是所有的master或branch中的提交都应该进入另一个,是挑选最佳选择吗?
-
示例:
将FIX提交给主人
结帐分行
从主人那里挑选FIX并推送
-
cherry-pick是否与rebase具有相同的问题(如果将要共享提交,则永远不会进行rebase)?
答案 0 :(得分:2)
cherry-pick
是一个不错的选择!
cherry-pick是否与rebase具有相同的问题(如果是的话,永远不会改变 提交将被分享)?
Cherry-pick没有任何问题,例如rebase
,因为它的工作方式是:读取 commit 的差异,你正在挑选并将补丁应用到{{1 }}。这不会破坏历史记录(如branch
)。在操作之后,这些提交将不会以任何方式耦合!
答案 1 :(得分:2)
首选做法应该是在分支上进行修复,该分支是应该将修补程序合并到的所有分支的公共基础,并将该提交合并到所有目标分支中。这允许您在“在分支B中提交A”和“在分支B中修复错误A”之间存在对应关系。
如果您没有自然拥有这样的分支,您可以从历史中的适当位置制作临时分支,例如使用git merge-base
找到。
这可能证明有问题的情况是分支机构分歧如此之大,以至于基本上你需要做出改变以解决每个分支中的相同问题。
E.g。
git checkout -b quickfix $(git merge-base master branch)
# Note, you may want to check 'git merge-base -a' and choose the best one
# code, code code
git add <modified files>
git commit -m "Fix for pressing issue"
git checkout master
git merge quickfix
# Review merge and test result, fixup merge if necessary
git checkout branch
git merge quickfix
# Review merge and test result, fixup merge if necessary
# Optionally, push all branches to 'origin'
git push origin branch master
答案 2 :(得分:0)
Cherry pick是正确的选择。
承诺掌握,并且樱桃也会在你的分支上选择提交。
我不理解你与rebase
的比较,但请注意,cherry pick会创建一个全新的提交(当然,因为父数据和其他元数据会有所不同)
答案 3 :(得分:0)
如果你排除了合并确实樱桃选择是唯一的选择。首先推送主服务器,然后使用将原始哈希添加到提交消息的表单选择分支。
挑选的问题是他们创建了一个新的提交,这使得很难知道真正包含的内容。因此,尽量保留尽可能多的关系信息。