2016-07-23 91 views
1

我知道,我可以做一个互动的重新组合,重新提交第一个提交并修复所有其他。但是如果一个分支包含数百个提交,它变得非常乏味。是否可以轻松地将所有提交从一个分支移动到另一个提交?

有没有更简单的方法?

+1

'git checkout -b && git reset --soft && git commit'? – raina77ow

+0

如果你有一个带有行号的文本编辑器,那么它不应该很难识别需要改变的行,然后进行批量替换。 –

回答

4

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

切换到目标分支

$ git checkout target-branch 

然后使用

$ git merge --squash original-branch 

所有提交在original-branch将被合并成一个单一的一个,并且施加到target-branch

4

你可以用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提交相匹配。樱桃选择是根据索引的起始状态 完成的。

当选择多个提交''连续索引时,这非常有用。

+0

感谢这个有用的选项!这真的很有趣。但是我无法理解最后一句的最后一部分:'对连续的索引产生影响'。这是什么意思? –

+0

@VictorDombrovsky该句子可以改写为“将多个提交中的更改合并到索引时很有用”。 – Leon

相关问题