根据the manual,git dcommit
“将在git中为每个提交在SVN中创建一个修订。”但有没有办法避免多个Subversion修订?也就是说,让git在执行svn commit
之前合并所有更改?
答案 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,并且压缩我的所有工作都没有意义。我现在正在尝试重新排序并将几个压缩成更多逻辑提交单元。