目前,当我运行git svn dcommit
git时,我在SVN中为自上次与SVN同步以来所做的每个本地提交创建了一个单独的提交。有没有办法让dcommit
将我最近的所有本地提交组合成一个SVN提交?
答案 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的所有提交,而不会丢失历史记录,以便将来使用相同的命令进行合并
〜马塞尔