【问题标题】:GIT cherry pick all my commits that exists in one branch to another branchGIT 樱桃挑选我在一个分支中存在的所有提交到另一个分支
【发布时间】:2018-12-28 11:29:15
【问题描述】:

我有 2 个分支 A 和 B。分支 B 有时从分支 A 分支,并且多个用户同时提交到这两个分支。我想从分支 B 到分支 A 中挑选所有提交(分支 A 中尚不存在),而无需手动搜索每个提交。 有没有可能?

谢谢

【问题讨论】:

  • 这听起来像是可以通过交互式变基来完成的事情?
  • 如果你想要所有的提交,你最好将 B 合并到 A 中。或者我错过了什么?
  • 我只想要我提交的提交,而不是其他用户。因为我不是它们的所有者,所以我不能合并或重新设置这些分支。
  • 好的,然后按照 Oliver 的建议进行交互式 rebase 可能会完成这项工作。首先,没有分支的“所有者”,其次,只要您不将本地分支推送到远程仓库,它就不会影响其他任何人。只需执行 git rebase -i A 并保留您的提交(删除或评论其他行)。然后您可以将 B 合并到 A 中。无需推动 B

标签: git cherry-pick git-cherry-pick


【解决方案1】:

想出来并制作了这个 PowerShell 脚本:

$Source = Read-Host -Prompt 'Enter Source branch: '
$Target = Read-Host -Prompt 'Enter Target branch: '
cd C:\project
git log $Source --not $Target --cherry --author=my@ema.il --author-date-order --reverse | 
Select-String -Pattern "commit" |
ForEach-Object { git cherry-pick -x $_.ToString().split("+")[-1].Trim(' ') }

【讨论】:

    【解决方案2】:

    更直接的方法是使用 rebase --onto

    git rebase --onto target-branch [LAST_COMMON_COMMIT_BEFORE_BRANCH] branch-to-move
    

    如果你的仓库看起来像这样:

    a - B - c - d - e -> master
          \      \
           \      f - g -> some-feature
            \
             h - i - j -> branch-to-move
    

    命令

    git rebase --onto some-feature B branch-to-move
    

    会导致

    a - B - c - d - e -> master
                 \
                  f - g -> some-feature
                       \
                        h' - i' - j' -> branch-to-move
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-05
      • 2018-07-23
      • 1970-01-01
      • 1970-01-01
      • 2016-05-30
      • 2014-11-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多