2014-02-26 40 views
1

第一次提交我們跟蹤的git倉庫,我們已經建立了一個軟件產品的供應商的上游版本發行。我們在克隆的git存儲庫中對此產品進行更改。當新版本發佈時,我們將git merge更改到我們的自定義存儲庫中,並修復其更改與我們更改之間的任何合併衝突。設置家長對Git倉庫中

供應商提供在我們當地的語言和語言全球發行。我們只追蹤當地語言,但現在在10次合併版本後,我們意識到我們需要跟蹤全球語言,以便我們能夠引入其他供應商與此軟件集成的變化。

的提交歷史看起來是這樣的。每個\是兩個存儲庫之間的合併。

local A - B - C - D 
     \  \ 
    custom E - F - G 

我們需要它看起來像

global X - Y - Z 
     \ 
local A - B - C - D 
      \  \ 
custom  E - F - G 

git reparent回答這個或其他什麼東西?我看過how to re-parent in GitSetting git parent pointer to a different parent,但我仍然不清楚這是否是正確的做法。

+0

我不明白你的歷史實例。 「\ \」部分是什麼意思? 「本地」,「全球」和「風俗」是分支機構?如何連接? (看起來他們會完全分開。)請修正您的問題,使實際情況更加明顯。 – michas

回答

1

你不能真正做到這一點。更改提交的父項將導致一個全新的提交對象,它具有自己的唯一散列(標識符)。這意味着間接將此作爲父項的所有提交也需要更改。並且這個提交將是整個存儲庫中的第一次提交,您最終將在您的存儲庫中重新創建所有提交

這是一個簡單的方法來打破人人蔘與的工作,一般不提倡,以同樣的方式爲基礎重建公佈的提交是。

如果您想整合原始歷史記錄,可以在單獨的獨立分支上導入提交X-Z,然後在D將它們合併到本地分支後提交。這樣的話,你可能會導致這樣的事情:

global X - Y - Z ------- 
         \ 
local A - B - C - D - H 
      \  \  \ 
custom  E - F - G ----- I 

現在當然這不會解決以前提交,但它也不會使它們無效。而且,您仍然會將原始歷史記錄爲X-Z,以及與您在H之後的新代碼的關係。

+0

另一種選擇是從本地融入全球嗎?這將使本地成爲主分支。這不會在語義上很好,但它似乎仍然會很好。 –

+0

當然,你可以這樣做,但你應該知道分支名稱沒有任何意義。它們只是在圖中被命名爲提交的指針。如果名字困擾你,你可以使用'git branch -m'輕鬆地重命名分支;如果你喜歡,你可以在沒有主分支的情況下完成工作。 – poke

+0

對不起,這並不明確,我的意思是它會使本地的根分支(包含所有未來更改的父提交)。 –