为什么git不知道我合并了?有办法告诉它吗?

Bry*_*rns 2 git merge git-svn

我正在使用git-svn; 我通常创建一个主题分支,提交它,然后checkout master,git svn rebase,git merge --squash topic_branch,git commit -m"summary comment",然后git svn dcommit.

这工作正常,但git似乎并不知道我将分支更改合并到master.我试过这个没有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"
Run Code Online (Sandbox Code Playgroud)

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

gitk图片显示明显未分支的分支http://selfamusementpark.com/pic/hosted/gittest.png?sekrit=NADEU6

在我的主要(git-svn)项目中,我看到早期的一些变化看起来似乎已合并,但我不知道我现在做的不同,因为我当时没有做.(如果重要的话,这是关于Ubuntu Jaunty的git 1.6.0.4.)

Pet*_*per 8

我认为这是因为你使用过--squash.我不确定你为什么这样做,但你不应该这样做.从--squashgit merge 的文档:

生成工作树和索引状态,就好像发生了真正的合并,但实际上不进行提交或移动HEAD,也不记录$ GIT_DIR/MERGE_HEAD以使下一个git commit命令创建合并提交.这允许您在当前分支之上创建单个提交,其效果与合并另一个分支(或章鱼的情况下更多)相同.

基本上,您需要进行"正确"合并.压扁似乎有一个相当具体的使用情况(我从来没有过,所以我不能真正评论为什么它有用).我如果你不想让分支树看起来很混乱,如果你在一个分支中做了一些工作但是后来决定将它合并到一个不同的分支中,你正在做更多的总体工作.