2017-07-19 105 views
0

假設我正在給LLVM添加一個新目標,並且我希望在GitHub上保留所做的更改,直到準備好將它們提交給上游爲止。 LLVM維護其SVN存儲庫的Git鏡像,並在與upstream/master同步時建議使用git pull --rebase。到目前爲止,該計劃是我的存儲庫的master分支將跟蹤upstream/master,然後mytarget分支會進行我的更改。然而如何管理git-svn存儲庫的分支?

Git Book說這,:

存在你的資料庫之外

永遠不要衍合的提交。

所以,如果我想從git pullupstream/mastermastergit pushorigin,我不應該使用--rebase,然後呢?或者我應該使用git pull --rebase同步upstream/master,然後從master合併爲mytarget

在這種情況下,我的整體工作流程應該如何?

+0

一種更好的方式把它是:「不要變基承諾,其他人可能已經根據他們的工作。」 – 1615903

回答

0

git pull --rebase將那些尚未推送的提交重定義爲應該是安全的。讓我們看看...

A B c D 
*--*--*--* <master 
     | 
    origin/master 

您有一個未推送的提交D。如果有在遠程主兩個新的提交和運行git pull --rebase origin/master混帳拉兩個提交和底墊在它們上面犯D

A B c X Y D` 
*--*--*--*--*--* <master 
      | 
     origin/master 

新的承諾是D'(提交從未真正編輯或移動 - 蹦創建新的提交,並移動分支指針)。現在你做git push origin master推新的提交和whar我們看到:

A B c X Y D` 
*--*--*--*--*--* <master 
       | 
     origin/master 
+0

從'master'到'mytarget'的同步怎麼辦?這需要合併,對吧?否則,我需要強制推送,因爲'git rebase'重寫了歷史記錄? –

+0

如果'mytarget'也在SVN中 - 是的,你不能重新綁定你已經推送的東西,所以合併。但是如果'mytarget'不在SVN中 - 您可以自由地執行任何分支策略允許的操作;您可以重新綁定並強制推送它,例如 – phd