是否可以轻松地将所有提交从一个分支移动到另一个分支作为一个提交? [复制]

Posted

技术标签:

【中文标题】是否可以轻松地将所有提交从一个分支移动到另一个分支作为一个提交? [复制]【英文标题】: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? 如果你有一个带有行号的文本编辑器,那么识别需要更改的行然后进行批量替换应该不难。 【参考方案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 这句话可以改写为“这在将多个提交的更改合并到索引中时很有用”。

以上是关于是否可以轻松地将所有提交从一个分支移动到另一个分支作为一个提交? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

将特定文件从一个分支提交到另一个分支

git使用:怎样merge一个分支的某个时间段内的所有提交到另一个分支

在 Git 中将选定提交从一个分支合并到另一个分支的更好方法

如何使用 Git / IntelliJ 将整个文件从一个分支移动/复制到另一个分支? [复制]

如何将一个git的master分支提交添加到另一个git中?

合并(用压扁)另一个分支的所有变化,作为一个单一的提交。