2011-07-06 69 views
4

我發現了很多q & a關於同步分叉的git存儲庫與原始遠程存儲庫,但沒有應用於我的確切問題。同步本地git分叉的回購分支與來自遠程原始的更改

假設我分叉了一個項目的上游遠程名字,我的叉子的名字是起源。我有一個開發分支機構本地該軌道開發起源

只要我並沒有改變我的分叉回購我知道我可以在起源上游/大師通過

git checkout master 
git pull upstream master 
git push origin master 

同步我的分叉回購到目前爲止,一切都很好。但現在我工作在我的本地dev分支,一旦我完成了,我想合併到我的本地主。但首先我會帶我的本地主最新與變化上游通過

git checkout master 
git pull upstream master 
git push origin master 

首先問題(S): 這是正確的嗎?但接下來我會如何處理當地的dev分支?在將它合併到我的本地主文件之前,將它重新與我更新的主文件重新合併或嘗試合併而不重新綁定?或者我應該不時嘗試保持我的本地dev上游/主同步,通過拉動上游/主不時?

這一步完成後我會

git push origin master 

和刪除我開發分支,本地和起源。但現在我的(本地和起源)從上游/大師由我的本地開發所做的更改偏離。

第二個問題: 什麼是現在去保持同步與上游/大師的正確方法?我仍然只是做

git checkout master 
git pull upstream master 
git push origin master 

或者是其他什麼東西在這裏推薦(例如某種形式的rebasing)?如果我再次創建了一個分支dev,我是否會應用再次應用於第一個問題的相同策略,還是會應用其他方法?

感謝您的幫助!

回答

5

問題1:

我想說無論哪種方式是好的。根據我的經驗,這樣的工作通常工作得很好:

  • 從上游/主機合併到本地/主機時,將本地/ dev重新綁定是有意義的。
  • 通過在獲得對主設備的更改時重新綁定dev,可以減少合併/重新綁定的大小,當您想要將設備合併到主設備時。
  • 這個工作,只要你永遠變基從主服務器更改到dev

一旦與開發完成後,你可以變基一次,然後在主合併,或者乾脆直接合並的主人。您可能想要更改合併提交中的消息以指示合併中的內容。

問題2:

當從上游合併,只要你沒有在本地或原產地的任何不同的變化,合併將是快進。這基本上意味着git只是將來自上游的提交堆疊在任何你已有的東西之上,並且不會有衝突或任何東西的合併。

因此,您不需要重新綁定或任何東西。如上所述,如果您在dev上進行了一些工作,在這一點上重新設置dev可能是一個好主意,因此您可以更新它。

在你有不同於上游的變化的地方,你將會有一個實際的合併,並且如果你願意的話,你可以做一個rebase。

Rebase or merge?

這主要取決於您和您喜歡如何工作,但如果您考慮重新裝訂,請記住它會更改歷史記錄。

如果其他人正在使用origin/master或origin/dev,並重新綁定它,可能會在嘗試合併工作時遇到一些問題。所以一般來說,如果一個分支不止一個人使用,你應該使用合併。如果不止一個人使用分支,請不要使用rebase(或其他改變歷史記錄的內容)。

+0

感謝您的回答! – emboss

相關問題