42

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

4

3 回答 3

34

如果你在 git 中的一个分支上工作,你可以git-merge --squash在 git 中执行此操作。然后,您可以将一个压缩的提交推送到 SVN。

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

于 2008-10-01T16:43:10.010 回答
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 的杀手级功能。

于 2008-10-02T18:01:41.983 回答
7

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

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

我倾向于经常在 git 中提交,但不一定想将每次提交都提交到 svn,并且压缩我所有的工作也没有什么意义。我现在正在尝试将一些重新排序并压缩成更合乎逻辑的提交单元。

于 2008-12-13T21:00:11.703 回答