是否有可能使git svn dcommit结果在一个单一的SVN提交?

根据手册 , git dcommit “将在git中为每个提交创build一个SVN版本。”但是有没有办法避免多个Subversion版本? 也就是说,要让git在执行svn commit之前合并所有更改?

如果你在git的分支上工作,你可以在git中做git-merge --squash 。 然后你可以把这个压扁的提交到SVN。

当然,很多小的提交都是好的,那么为什么要压扁呢?

命令git rebase -i可以做到这一点,等等。 这个命令是非常强大的,所以和它交朋友是很好的。

语法是: git rebase -i <commit ID> 。 这将带来你的文本编辑器,用选项(和指令)修改所有提交到(不包括)给定的ID。

例如,要修改以前的5个提交,可以这样做:

git rebase -i HEAD~5

或者如果你的SVN分支被称为“svn / trunk”,那么这个语法也是很好的:

git rebase -i svn/trunk

然后会popup一个文本编辑器窗口。 要压扁一切,把每一行的第一个单词从“pick”改为“squash”(如果这听起来令人困惑 – 当你看到它时会更有意义)。 然后保存并closures编辑器。 然后,您将有机会编辑提交消息以提供压扁的提交。

你可以用git rebase -i做其他事情,重新sorting提交,以不同的方式压缩提交,并删除提交。

我不断地使用这个命令; 这是Git的杀手锏。

Ryan Tomayko写了一些关于git rebase -i ,他说:

…这有点像git commit – 在酸和电锯上跳来跳去 – 完全疯狂,相当危险,但能够展现全新的思维状态。 在这里,您可以编辑,压缩,重新sorting,挑逗和注释现有的提交方式,这种方式比应该更容易,更直观。

我有一个倾向,经常在git中,但不一定要承诺每一个 svn的承诺,挤压我所有的工作一样没有意义。 我现在正在尝试重新sorting,并将其中一些压缩成更多逻辑提交单元。