将本地Git提交合并为git-svn的一个提交

时间:2009-09-11 00:07:25

标签: git-svn commit dcommit

目前,当我运行git svn dcommit git时,我在SVN中为自上次与SVN同步以来所做的每个本地提交创建了一个单独的提交。有没有办法让dcommit将我最近的所有本地提交组合成一个SVN提交?

6 个答案:

答案 0 :(得分:18)

git rebase remotes/trunk --interactive 

应该带您进入菜单,您可以在其中选择提交或将它们全部压缩为1次提交,以避免污染您的svn存储库。使用git-svn时,This是一个非常好(但很短)的资源。

答案 1 :(得分:17)

不,但你可以很容易地将所有提交压缩在一起。对于以下示例,我将假设您位于与远程master分支对应的trunk分支上,并且您希望将所有本地提交压缩在一起:

git tag local # create a temporary tag
git reset --hard trunk
git merge --squash local
git commit # write your single commit message here
git svn dcommit
git tag -d local # delete the temporary tag named local

除了使用临时标记,您还可以使用reflog(即使用master@{1}代替local

答案 2 :(得分:3)

当我使用git-svn并希望将一系列git提交显示为单个提交时,我会在主题分支上工作,然后在{{{{}}之前执行非快进merge 1}} - ING

首先,针对svn重新分支您的分支,并确保本地主服务器是最新的:

dcommit

然后切换到master,merge并dcommit:

git svn rebase && git push . remotes/trunk:master

这将在Subversion中显示为单个提交,但您仍然可以使用本地历史记录来帮助您进行提交。

git checkout master
git merge <branch> --no-ff -m "Message you want in svn"
git svn dcommit

答案 3 :(得分:3)

一种更简单的方法(如果您在本地系统上堆积了多个提交):

git reset <hash tag of commit till which u need to combine>
git commit -am "your message"  // This will create one clubbed commit of all the commit till the hash tag used.

答案 4 :(得分:2)

这对我有用 - 将几个提交压缩成一个提交然后再提交给svn:

http://www.gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html

答案 5 :(得分:0)

这不适合我。我使用merge --no-ff --no-commit但是在提交之后,我得到了:

svntrunk                        54f35e4 [trunk: ahead 336] release 1

dcommitting to trunkwill将提交所有336次提交。

如答案#2中所述的重置,标记和压缩:Combine local Git commits into one commit for git-svn将起作用,但在下一次“合并”时,您将遇到一些麻烦,让所有提交再次合并!

唯一能为我工作的人:

git checkout -tb svntrunk remotes/trunk
git merge --no-commit --squash master

获取从master到svn的所有提交,而不会丢失历史记录,以便将来使用相同的命令进行合并

〜马塞尔