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

时间:2008-10-01 16:31:23

标签: svn git git-svn

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

3 个答案:

答案 0 :(得分:34)

如果您在git中使用某个分支,则可以在{git}中执行git-merge --squash。然后你可以将那个被压扁的提交推送到SVN。

当然,很多小提交都很好,所以你为什么要挤压它们呢?

答案 1 :(得分:27)

命令git rebase -i可以执行此操作,等等。这个命令非常强大,所以与它交朋友真好。

语法为:git rebase -i <commit ID>。这将打开文本编辑器,其中包含用于修改所有提交(不包括)给定ID的选项(和说明)。

例如,要修改之前的5次提交,您可以执行以下操作:

git rebase -i HEAD~5

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

git rebase -i svn/trunk

然后会弹出一个文本编辑器窗口。要压扁所有东西,将第一个单词后面的第一个单词从“pick”更改为“squash”(如果这看起来很混乱 - 当你看到它时会更有意义)。然后保存并关闭编辑器。然后,您将有机会编辑压缩提交的提交消息。

您可以使用git rebase -i执行的其他操作包括重新排序提交,以不同方式压缩提交以及删除提交。

我经常使用这个命令;这是Git的一个杀手锏。

答案 2 :(得分:7)

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

  

... [它]有点像git commit --amend跳上酸和拿着电锯 - 完全疯了,非常危险,但能够暴露出全新的心态。在这里,您可以以比它应该更容易和更直观的方式编辑,压缩,重新排序,分离和注释现有提交。

我倾向于经常在git中提交,但不一定要将每个提交给svn,并且压缩我的所有工作都没有意义。我现在正在尝试重新排序并将几个压缩成更多逻辑提交单元。