是否有可能使git svn dcommit导致单个svn commit?

时间:2020-03-06 14:59:06  来源:igfitidea点击:

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

解决方案

如果我们在git中使用分支,则可以git-merge --squash,在git中完成。然后,我们可以将压缩后的提交推送到SVN。

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

命令git rebase -i可以做到这一点,甚至更多。该命令功能非常强大,因此最好与它成为朋友。

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

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

git rebase -i HEAD〜5

或者,如果SVN分支称为" svn / trunk",那么此语法也很好:

git rebase -i svn / trunk

然后将弹出一个文本编辑器窗口。要压缩所有内容,请将第一行之后的每行第一个单词从" pick"更改为" squash"(如果听起来令人困惑,则在我们看到时会更有意义)。然后保存并关闭编辑器。然后,我们将有机会编辑压缩的提交的提交消息。

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

我经常使用此命令;这是Git的杀手级功能。

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

…[it's] a bit like git commit --amend hopped up on acid and holding a chainsaw – completely insane and quite dangerous but capable of exposing entirely new states of mind. Here you can edit, squash, reorder, tease apart, and annotate existing commits in a way that’s easier and more intuitive than it ought to be.

我倾向于经常在git中提交,但不一定要对svn提交每个提交,而挤压我的所有工作意义不大。我现在正在尝试重新排序,然后将它们压缩成更多逻辑提交单元。