2017-04-17 72 views
1

我正在與我的合作伙伴一起開發應用程序,我們正在使用github來同步我們的項目,但我們之前都沒有使用過github,並且出現了一個問題。我和我的合作伙伴是從最後一次推送中同步的,但是我們分別處理了不同的事情,現在我們需要弄清楚如何合併我們的兩個版本。因此,它看起來有點像這樣:從GitHub中拉取而不覆蓋某些文件

---- B ----| 
A --|   |--- D 
    ---- C ----| 

A國是,當GitHub的倉庫有這樣的我們有一個共同的代碼。

然後,我們倆拉到並在代碼的不同部分的工作,創建了兩個截然不同的狀態B和C.現在

,我們需要把我們兩個國家合併爲d,其中有我們有兩個部分從事。
狀態B被推送,這不是我所擁有的,但我在B推送之前知道了B所需的所有內容。

任何幫助表示讚賞。

+0

雖然還有與解決這個特定問題有關的另一個答案,我也想說,如果你正在分別處理不同的事情,你可能想看看使用分支。可以使用分支針對同一個父級開發單獨的更改集(比如對一個特徵進行多次提交),然後稍後將其合併。 –

+0

非常感謝@GarethPulham。我會研究這一點,並與我的合作伙伴交談。 – acn3

回答

0

你們其中一個人將能夠推動沒有任何問題。

另一個將有一個錯誤消息邀請他/她先拉。

hint: Updates were rejected because the remote contains work that you do 
hint: not have locally. This is usually caused by another repository pushing 
hint: to the same ref. You may want to first integrate the remote changes 
hint: (e.g., 'git pull ...') before pushing again. 

我會建議:

git pull --rebase 
git push 

這將重播上的更新上游主分支的頂部您的本地提交。

實際上,因爲git 2.9 or more,你可以設置(一次):

git config --global pull.rebase true 
git config --global rebase.autoStash true 

然後你可以通過一個簡單的經典git pull更換git up

當您同時開展相同的開發工作(如此相同的分支)並需要保持最新的常用工作時,此工作流程非常有用。

+0

這最終覆蓋了狀態B,它已經被推動,沒有先從B獲得任何東西。 – acn3

+0

@ acn3奇怪,考慮拉取先取:B是原點/ commonBranch。然後你在原始/共同分支之上重放你的提交。假設你有一個共同的分支,你要推。 – VonC

+0

我們有一個共同的分支。在做了git pull --rebase之前,我做了git add [files]和git commit。我不應該這樣做嗎? – acn3

相關問題