Git:只合并一个提交

通常,我在Git中使用分支,但是我不喜欢在工作树(Git历史)中看到数百个分支。 我想知道在Git中是否有一个方法只在一个提交中“join”一个分支中的所有提交(理想情况下用一个明确的提交消息)。

像这样的东西:

git checkout -b branch <some work> git commit -a -m "commit 1" <some work> git commit -a -m "commit 2" <some work> git commit -a -m "commit 3" git checkout master git SUPER-JOIN branch -m "super commit" 

在这之后,只有“超级提交”将存在于git日志中。

这可以使用git rebase和squash来完成,或者使用git merge --squash来完成

Git合并扁平化

git:压扁/修复先前的提交

这听起来像你正在寻找git-merge--squash选项:

 git checkout master git merge --squash branch -m "super commit" 

如果你是积极的,你只需要一个提交,并且没有被标记为“合并”的分支就可以了(也许是因为你要用git branch -D my-squash-merged-branch删除它git branch -D my-squash-merged-branch并且从来不想看到它再次),使用这个:

 git checkout master git merge --squash branch-to-merge git commit -m "message for commit" 

但经过多次testing,我相信合并大部分分支的最好方法是:

 git checkout master git merge --no-ff branch-to-merge -m "message for commit" 

这样可以避免“快进”合并,该合并不允许为许多合并指定-m "message"选项。 它实际上并没有像原来要求的那样提供一个单独的提交,但是至less可以很容易地看到分支的开始/结束,因此容易恢复等等。 一个git log将显示所有合并的单独提交…

 commit a6672a4c3d90c35d5f39c45f307ef6b385660196 Merge: 015f8d6 f84e029 Author: Brian White <bcwhite@example.com> Date: Wed Jan 15 20:47:35 2014 -0500 merged something trivial commit f84e02915faa02afc9a31b8c93a6e7712420687d Author: Brian White <bcwhite@example.com> Date: Wed Jan 15 20:47:12 2014 -0500 added something also trivial commit 904d5b5ff00d691d63104a77d2e2ca484732a5fb Author: Brian White <bcwhite@example.com> Date: Wed Jan 15 20:46:26 2014 -0500 added something trivial commit 015f8d681bdaf65725067ee8058215cedb529dd6 Author: Brian White <bcwhite@example.com> Date: Wed Jan 15 20:23:31 2014 -0500 optimizations to MyThing ... 

…但是,如果你看一下日志git log --graph ),你可以看到git确实认为它是一个单一的合并。

 * commit a6672a4c3d90c35d5f39c45f307ef6b385660196 |\ Merge: 015f8d6 f84e029 | | Author: Brian White <bcwhite@example.com> | | Date: Wed Jan 15 20:47:35 2014 -0500 | | | | merged something trivial | | | * commit f84e02915faa02afc9a31b8c93a6e7712420687d | | Author: Brian White <bcwhite@example.com> | | Date: Wed Jan 15 20:47:12 2014 -0500 | | | | added something also trivial | | | * commit 904d5b5ff00d691d63104a77d2e2ca484732a5fb |/ Author: Brian White <bcwhite@example.com> | Date: Wed Jan 15 20:46:26 2014 -0500 | | added something trivial | * commit 015f8d681bdaf65725067ee8058215cedb529dd6 | Author: Brian White <bcwhite@example.com> | Date: Wed Jan 15 20:23:31 2014 -0500 | | optimizations to MyThing ... 

如果提交或其他活动发生在主分支上,graphics将显示合并的分支从正确的地方开始并join当前的头部,但当然所有的提交仍然会显示在日志中,分支的提交在最佳。