根据手册,git dcommit
“将为 git 中的每个提交在 SVN 中创建一个修订版。” 但是有没有办法避免多次 Subversion 修订?也就是说,在执行svn commit
?之前让 git 合并所有更改。
3 回答
如果你在 git 中的一个分支上工作,你可以git-merge --squash
在 git 中执行此操作。然后,您可以将一个压缩的提交推送到 SVN。
当然,很多小的提交是好的,那你为什么要压缩它们呢?
该命令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 的杀手级功能。
Ryan Tomayko写了一些关于 的文章git rebase -i
,他说:
…[它]有点像 git commit --amend 跳上酸并拿着电锯——完全疯狂而且非常危险,但能够暴露出全新的心态。在这里,您可以以比应有的方式更容易和更直观的方式编辑、压缩、重新排序、梳理和注释现有提交。
我倾向于经常在 git 中提交,但不一定想将每次提交都提交到 svn,并且压缩我所有的工作也没有什么意义。我现在正在尝试将一些重新排序并压缩成更合乎逻辑的提交单元。