2015-04-29 144 views
0

說我創建一個回購,它有一個分支稱爲主。如果其他人購買回購協議並推入新的分支機構B,那麼在本地拉入B而不覆蓋本地主分支機構的最佳方式是什麼?我是否在本地切換到分支B,然後引入更改?我的猜測是,如果我不明確地在本地切換分支,那麼如果我從遠程分支B引入更改,那麼我將用B覆蓋本地主分支。這裏最好的選擇是什麼?拉不同的Git分支

+0

在您獲得本地存儲庫中的更改後,您想要執行什麼操作? – siegi

+0

您不會*覆蓋* master,您將在主分支中創建新的合併提交(如果合併不是快進)。 – Gauthier

回答

1

您可以使用git fetch origin branchBbranchB獲取所有提交信息,而無需修改master或工作目錄。

如果要將更改應用於master,則可以在master分支上使用git merge FETCH_HEAD合併它們。這將創建一個新的提交,其中包含masterbranchB的所有更改。 FETCH_HEAD是最後一次提交的提交。

2
git fetch origin 
git checkout --track origin/<remote_branch_name> 
3

你可以做一個git fetch origin branchname。 通過執行git pull origin branchname 您可以合併兩個分支的更改。安裝一個像kdiff3一樣的合併工具。 可以整合這兩個,按照這個link

0

我想,當你寫「[人]推到一個新的分支B」,你的意思是他們推到自己的叉式回購,而不是原來的回購origin

不是從原點獲取B相反,你需要從他們的叉獲取:

git fetch <url/to/their/fork/repo> B 

您將得到提交一份在其分支機構B,你可以看到遠程分支git branch -a。你可以用checkout這個遠程分支讓你的工作文件反映分支B

如果你願意,你可以在你提取的同時創建一個本地分支。創建的本地分支的名字來源於一個:後:

git fetch <url/to/their/fork/repo> B:B 

現在,而不是在一個相當長的分支名稱運行git checkout,你可以git checkout B

請記住,pull只是fetch + merge,而merge發生在當前檢出的分支上。你的猜測是正確的,如果你運行git pullmaster被檢出,你將合併被拉的分支的內容到master。儘管這不是真正的覆蓋,而是增加了對master的提交。


如果你要使用他們的叉回購更多的時間,你可以將其添加爲遠程:

git remote add their_fork <url/to/their/fork/repo> 

這個你不需要寫他們的整個URL後,您可以使用遠程名稱改爲:

git fetch their_fork B:B