2009-11-08 57 views
2

我有一個「基本點」,我克隆,使我的客戶的網站基礎信息庫,所以我的工作,使提交,推到客戶端叉,然後我意識到,在我提交的中間有一個或一個以上必須合併到基礎存儲庫。這就是我所做的:GIT:如何避免重複的提交,同時保持大量的叉子?

git的格式補丁-1 SHA

然後我去了 「基址」 庫並做:

混帳上午-3 patch_file

這沒關係。問題是,當我想將更改從「基本站點」提交到客戶端repo時,提交被重複。

有沒有辦法避免?也許有不同的工作流程

編輯:

事實上我仍然有問題,我的解釋是說不清楚的。讓我再試一次:

我有一個包含'docs','layout','pub'和'sql'文件夾的基礎存儲庫,'docs'中只有一個空白'index.html', '佈局'文件夾。在'pub'文件夾中,我安裝了Joomla。

當我有一個新的客戶端,我做他的目錄並初始化一個存儲庫,然後我添加一個指向基本裸倉庫的遠程「基礎」,獲取它,結帳基本/主,然後做'簽出-b主'從基地主分支創建主分支。然後,我在本地服務器上創建一個「clone --bare」,並在本地工作站中克隆它。我們在需要時保存文檔,設計師進行佈局,然後將所有內容都提交併推送到客戶的裸回購。在推送之前,我們總是做一個'重新起源/主',以確保本地回購是最新的。

因此,當佈局完成後,推,我拉它,並開始使Joomla模板。所以我做了很多提交,然後我意識到我必須對Joomla組件進行更改以使其能夠正常工作。好吧,我更改組件,提交併繼續製作模板,提交,...

現在我想將所有組件的提交提交到「基本回購」,因爲我希望所有客戶端都具有相同的更改。當我嘗試@jleedev解決方案時,我所有的客戶端提交到頂端,重寫它已經在客戶端裸回購的SHA。

任何想法?

謝謝!

+1

我沒有完全明白你想要做什麼,但是不應該使用合併,櫻桃挑選或重新裝飾而不是修補程序? – falstro 2009-11-08 21:40:35

+0

櫻桃採摘仍然使用補丁 - 你最終得到兩個具有相同差異的提交。 – 2009-11-08 21:58:34

+0

也許是子模塊? – 2009-11-09 17:22:52

回答

3

是的! git-pull命令執行提取,然後進行合併。合併對你大叫,因爲你有相同的補丁表達爲兩個不同名稱的提交。

如果你這樣做git-pull --rebase,或兩步等效的git fetch; git rebase origin/master,那麼它將rebase你的本地變化到上游。

比方說,你的回購看起來像這樣; master包含您在客戶端完成的工作,origin/master代表您已應用電子郵件補丁的上游基礎。提取後,您會看到兩個不同的分支,但您已導出的提交在兩行中。

~/client-site$ git fetch origin master 

它看起來像這樣在GitX

After the fetch http://grab.by/m1T

當你rebase,它需要你對client所有提交不在base,轉換他們承諾的補丁,並應用他們一個接一個地落在上游頭上。當它注意到兩個提交表達相同的補丁時,它們會變成一個(上游提交生命和本地死亡)。

~/client-site$ git rebase origin/master 

After the rebase http://grab.by/m1X

由於@roe提到,有可能是更好的方法,讓您的存儲庫同步,如櫻桃採摘提交你需要,然後推動它。當您重新綁定時很有可能遇到問題,但您使用format-patch描述導出修補程序的工作流的方式似乎很安全。

+0

謝謝! 所以我需要這樣做之前,我推動我的本地「客戶」回購到它的在線回購,因爲SHA將改變後的權利? 再次感謝! – Fredi 2009-11-08 22:36:20

+0

這個想法是重寫客戶端的提交以匹配在線的,所以是的。 – 2009-11-08 22:40:52

+0

另外,還有一個問題:你使用什麼界面查看提交? (你截圖的那個)謝謝! – Fredi 2009-11-08 22:40:57