2011-06-29 47 views
3

我使用git rebase --onto target source foo將分支foo從分支source移動到分支target。你知道是否有可能使用散列值而不是分支名稱(如果沒有給出),像這樣:git rebase --onto ab91c f4242 foo
作爲一種解決方法,我臨時將分支名稱添加到相關的提交對象。但是如果你有很多分公司需要重新設計,那麼這可能是一個皮塔。如何使用散列來代替分支名稱來改變分隔符?

示例情況:

° bb42a 
° ab91c 
° 979c2 
      /° fb648 foo 
° f4242 -- 
° 333c9 

git rebase --onto ...

° bb42a 
      /° fb648 foo 
° ab91c -- 
° 979c2 
° f4242 
° 333c9 

背景:
的解釋問題是很常見的,如果你使用SVN服務器爲你遠程倉庫。你所有提交的對象都會被重寫,因爲每當你將git svn dcommit添加到svn-repository時,svn-id就會被添加。這從所有其他分支從他們的前大師

+1

當您嘗試使用散列值時,得到了什麼錯誤消息? git rebase手冊頁確實提到「可能是任何有效的提交,而不僅僅是現有的分支名稱。」 – VonC

+0

我只在svn場景中嘗試過。我只是用一個本地的git倉庫來試用它。有用。我會在明天與svn一起嘗試。有一個類似「索引對象未找到」的錯誤消息,但我必須重現它才能準確說明消息。 – JJD

+0

好的,我明天再回來查看;)請注意,'git svn rebase'與'git rebase'完全不同。 – VonC

回答

2

什麼是肯定的:

  • 一個git rebase(不是git-svn rebase)可以接受任何有效承諾作爲參數,因此哈希值會奏效。
  • git-svncaveat section確實警告你:

避免git倉庫和分公司之間的所有git clone/pull/merge/push操作。
在git分支和用戶之間交換代碼的推薦方法是git format-patchgit am,或者只是'dcommit'到SVN存儲庫。

因此,您需要確保不會在SVN-同步分支中引入提交,該提交併不知道該提交,並且會報告此類提交。
(您在SQ問題「git svn - <file> was not found in commit <hash>」中有相反的情況)

+0

我昨天可能做錯了什麼。具有散列值的Git rebase有效。不管怎樣,謝謝你。 – JJD

+0

@JJD:優秀。只要彈出任何錯誤消息,它就總是有用的,可以在某些臨時文件中複製命令和錯誤消息。它可以像這樣的問題派上用場;) – VonC