从Dev到Prod分支推送选择性提交

时间:2017-12-13 07:38:47

标签: git visual-studio-code

问题:
我有一个dev分支。它包括错误修复,新功能,不发布功能 我有一个prod分支。它包含已发布的功能,错误修复。

要求:我想将选择性提交从dev推送到prod分支。

怎么做?

额外信息: 我读过关于git cherry pick的内容。由于某种原因,它需要合并回dev分支。我想知道是否有更好的做法? 我正在使用VSCode编辑器。(如果这个编辑器有一些集成,那就太棒了)

3 个答案:

答案 0 :(得分:0)

采摘樱桃是你的朋友。

执行以下操作:

  1. git fetch - 获取最新的分支
  2. git log origin/dev --pretty=format:"%H,%ad,%s,,,%an%n" | tail -20000000r - 这将打印dev分支的提交列表(您可以根据需要更改格式),选择要合并的提交
  3. git checkout prod - 前往您的产品分支
  4. git cherry-pick [hash-of-desired-commit] - 这会将提交合并到分支
  5. git push origin prod - 将更改推送到prod branch
  6. 我强烈建议你做樱桃挑选 - >推动每一次提交。

    另外 - 如果你的挑选有一些冲突 - 停止,并运行git reset --hard,然后使用一些程序来解决冲突(我使用IntelliJ),解析,推送和继续。

答案 1 :(得分:0)

您至少有两个选项:

  1. 创建新分支,然后挑选所需的提交。
  2. 使用rebase重新排序提交(如果需要),然后只需推送所需的数量。
  3. 第一个解决方案非常严格但有一个我不喜欢的重要缺点 - 当你使用cherry-pick时 - 创建了不同哈希的新提交,所以如果你这样做并推送/合并新的crated分支与cherry-选择承诺'prod'你必须清理你的本地'dev',这是从挑选和推送的提交(通过rebase或使用新的分支和樱桃选择)。

    第二种解决方案更复杂,我更喜欢并且主要用于日常工作。

    想象一下,我们有2个分支和几个提交:

    prod   a
            \
    dev      b---c---d---e
    

    可能有两种情况:

    1. 我想推送直接基于'prod'的提交(例如'b'和'c')
    2. 我想从中间或结尾推送提交,同时保持第一次提交未发布。
    3. 这是我用于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中进行选择。