2009-05-23 42 views
2

我正在使用git-svn;我通常创建一个主题分支,对其进行提交,然后签出master,git svn rebase,git merge --squash topic_branch,git commit -m“summary comment”,然后git svn dcommit。为什么不知道我合并?有没有办法告诉它?

工作正常,但git似乎并不知道我将分支更改合并到主。我想这一点没有参与的svn:

# Make a repository, add a couple files 
$ mkdir gittest 
$ cd gittest 
$ git init 
$ touch foo bar 
$ git add . 
$ git commit -m "initial version" 

# Make a branch, change a file, commit. 
$ git checkout -b a_branch 
$ vi foo # make a change 
$ git commit -am "a change" 

# Merge changes into master 
$ git checkout master 
$ git merge --squash a_branch 
$ git commit -m "merged a_branch" 

和gitk --all显示这一点,这将表明这不是一个git-svn的问题:

gitk picture showing apparently unmerged branch http://selfamusementpark.com/pic/hosted/gittest.png?sekrit=NADEU6

在我的主要(GIT-SVN )项目,我看到一些变化似乎早已被合并,但我不知道我现在做什么不同,现在我不这样做。 (这是Ubuntu Jaunty上的git 1.6.0.4,如果有问题的话)。

回答

8

我认为这是因为你使用了--squash。我不知道你为什么这样做,但你不需要。从--squash文档git的合并:

生产工作树和索引 状态,就像一个真正的合并发生,但 实际上并没有作出承诺或移动 的头,也没有记录 $ GIT_DIR/MERGE_HEAD导致下一个 git commit命令创建一个合并 提交。这允许您在当前的 分支之上创建一个 单个提交,其效果与合并另一分支(或更多 八爪鱼的情况下的 )相同。

基本上,你需要做一个“适当的”合并。挤压似乎有一个相当具体的使用情况(我从来没有过,因此我不能评论为什么它是有用的)。我猜的,如果你不希望分支树,如果你没有在一个分支一些工作,但后来决定只是将其合并到不同的分支,你在做更多的工作,总体看凌乱。

+0

谢谢...我使用的是--squash,因为我知道“git svn dcommit”为主分支上的每个提交创建了一个SVN修订版,而我只需要一个。 你提到过(在你的git merge doc quote中)--squash不会“记录$ GIT_DIR/MERGE_HEAD来导致下一个git提交来创建一个合并提交”..我将更多地关注*做什么*记录MERGE_HEAD - 听起来好像在那里,正确的事情可能会发生。 – 2009-05-23 18:59:02

+0

啊,我忘了你提到git-svn。不幸的是,我将SVN的冷火鸡换成了Git,所以我不能添加任何有用的东西,但是祝你好运! – 2009-05-23 20:39:03

3

只要不使用git merge --squash :)

1

要添加到彼得库珀的答案(评论是不够长):

git rebase --interactive(而电锯危险:看http://tomayko.com/writings/the-thing-about-git更多的信息和一些背景,为什么你会曾经想要使用它)会让你在提交svn之前压缩并重新排序单个提交。我使用它很多来帮助将10-12个中间提交合并到3-4个补丁集中,然后再提交回购。

尝试以交互方式重新绑定当前分支上的最后10个提交。一旦你了解它,它就相当不错了,我每天都在我的git svn repo上使用它。

1

当你做了你的壁球合并之后,你需要手动告诉你的合并git,因为你dmitmit git忘记。手动告诉git关于你的合并的方法是使用git移植。 link text

相关问题