问题:
我有一个dev
分支。它包括错误修复,新功能,不发布功能
我有一个prod
分支。它包含已发布的功能,错误修复。
要求:我想将选择性提交从dev推送到prod分支。
怎么做?
额外信息: 我读过关于git cherry pick的内容。由于某种原因,它需要合并回dev分支。我想知道是否有更好的做法? 我正在使用VSCode编辑器。(如果这个编辑器有一些集成,那就太棒了)
答案 0 :(得分:0)
采摘樱桃是你的朋友。
执行以下操作:
git fetch
- 获取最新的分支git log origin/dev --pretty=format:"%H,%ad,%s,,,%an%n" | tail -20000000r
- 这将打印dev分支的提交列表(您可以根据需要更改格式),选择要合并的提交git checkout prod
- 前往您的产品分支git cherry-pick [hash-of-desired-commit]
- 这会将提交合并到分支git push origin prod
- 将更改推送到prod branch 我强烈建议你做樱桃挑选 - >推动每一次提交。
另外 - 如果你的挑选有一些冲突 - 停止,并运行git reset --hard
,然后使用一些程序来解决冲突(我使用IntelliJ),解析,推送和继续。
答案 1 :(得分:0)
您至少有两个选项:
第一个解决方案非常严格但有一个我不喜欢的重要缺点 - 当你使用cherry-pick时 - 创建了不同哈希的新提交,所以如果你这样做并推送/合并新的crated分支与cherry-选择承诺'prod'你必须清理你的本地'dev',这是从挑选和推送的提交(通过rebase或使用新的分支和樱桃选择)。
第二种解决方案更复杂,我更喜欢并且主要用于日常工作。
想象一下,我们有2个分支和几个提交:
prod a
\
dev b---c---d---e
可能有两种情况:
这是我用于1种情况的配方:
git push origin HEAD~2:prod
表示除了最后2个之外的所有提交都将发布到prod。我正在使用HEAD从日志中找到一些先前的提交,但您也可以使用提交哈希。
2场景有点棘手,但很容易。想法是你必须重新排序你的提交才能使用第一个场景中的命令。例如,我想只推送'd'和'e'提交。
第一部分是提交重新排序:
git rebase -i HEAD~4
当打开编辑器时,我只需更改提交顺序,使其如下:
prod a
\
dev d--e--a--b
我可以简单地运行:
git push origin HEAD~2:prod
答案 2 :(得分:0)
我已经读过有关git cherry pick的文章。由于某种原因,它需要合并回dev分支。我想知道是否有更好的办法?
不再使用VSCode 1.52(2020年11月)
Git: Cherry Pick
新的
Git: Cherry Pick...
命令可让您从历史记录中挑选提交。
直接从VSCode中,从dev
中选择想要的提交,然后选择到prod
中进行选择。