2009-05-23 36 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

相關問題