【问题标题】:Is it possible to easily move all commits from one branch onto another as one commit? [duplicate]是否可以轻松地将所有提交从一个分支移动到另一个分支作为一个提交? [复制]
【发布时间】:2016-11-27 04:03:58
【问题描述】:

我知道,我可以做一个交互式 rebase,reword first commit 和 fixup all other。但是如果一个分支包含数百个提交,它就会变得非常乏味。

有没有更简单的方法?

【问题讨论】:

  • git checkout -b <another-branch> && git reset --soft <first-commit-sha> && git commit?
  • 如果你有一个带有行号的文本编辑器,那么识别需要更改的行然后进行批量替换应该不难。

标签: git rebase fixup


【解决方案1】:

您可以使用git merge --squash 将提交压缩为一个,同时合并到分支中。

切换到目标分支

$ git checkout target-branch

然后使用

$ git merge --squash original-branch

original-branch 中的所有提交将合并为一个,并应用于target-branch

【讨论】:

    【解决方案2】:

    您可以使用git cherry-pick -n 做到这一点。与git merge --squash 相比,这种方法更灵活,因为它允许您指定任意范围的提交:

    git cherry-pick -n OTHER_BRANCH~100..OTHER_BRANCH
    git commit -m "Merged 100 commits from OTHER_BRANCH"
    

    git cherry-pick

    -n|--no-commit

    通常git cherry-pick 命令会自动创建一个序列 的提交。此标志应用樱桃挑选所需的更改 每个命名的提交到你的工作树和索引,而不做 任何提交。此外,当使用此选项时,您的索引不会 必须匹配 HEAD 提交。樱桃采摘是针对 索引的开始状态。

    这在挑选多个提交的效果时很有用 您的索引连续。

    【讨论】:

    • 感谢这个有用的选项!这真的很有趣。但我看不懂最后一句话的最后一部分:'对你的索引连续影响'。这是什么意思?
    • @VictorDombrovsky 这句话可以改写为“这在将多个提交的更改合并到索引中时很有用”。
    猜你喜欢
    • 2011-05-06
    • 1970-01-01
    • 1970-01-01
    • 2018-08-12
    • 1970-01-01
    • 1970-01-01
    • 2012-09-02
    • 2018-03-12
    • 2021-04-10
    相关资源
    最近更新 更多