2017-03-07 150 views
1

以前可能有人問過這個問題,但我對這個術語有點困惑,所以我不確定哪些命令是正確的,以完成我需要完成的任務。現在我有一個GitHub存儲庫,我正在與我的團隊合作。在那裏,我爲一項任務做了一個分支。我將存儲庫克隆到本地計算機,然後在本地簽出該分支。我開始進行需要繼續努力的更改......在進行這些更改時,我的團隊一直在更新他們的代碼並將更改推回GitHub上的主分支。我如何從GitHub上的主分支下拉他們的更改,以便它在本地更新我的分支,並在GitHub上更新(現在在GitHub上,它表示我提前1次提交,並且19次提交到主後面)。感謝您在這裏的建議......這將是我的東西打算經常這樣做學習正確的流程將有助我...遠程主機的Git Rebase

回答

1

你可以在這裏應用一系列的方法來實現你想要的。這可能取決於您的存儲庫策略。例如,如果您重新綁定分支,您將無法將其推回到服務器,則必須使用-f或者刪除遠程分支並推送一個新分支。有些人可能會說,一旦你已經推動你分支到服務器,rebase就不是一個好方法,如果這是你的repo的策略,那麼你必須把master合併到你的分支,然後把它推回到遠程。

讓我們對既要講方法:

再次基於:

我個人很喜歡這樣做更重訂,但只有我敢肯定,沒有其他人正在使用的我推到在樹枝上遙控器。我喜歡rebase,因爲這最終會留下更清晰的歷史記錄,因爲它會從分支中刪除我的更改,應用遠程更改,然後將更改應用到頂層,但這樣做會更改提交哈希,並且它會執行不匹配以前用於同一提交的那個,因此,您必須使用-f或者刪除遠程分支並將其重新創建。

我會做這樣的,在你的本地倉庫,我會去到主分支:

git checkout master

然後更新它與遠程變化:

git pull

它將在你的git master分支的後臺運行一個git fetch並進行合併。

然後回到你的分支:

git checkout my_branch

,然後與主底墊吧:

git rebase master

如果一切沒有發生衝突運行你是好去。

,你可以使用:

git push -f origin my_branch

(!要小心這個命令將覆蓋遠程分支,這是非常危險的,確保一切都在你的底墊細使用此命令之前)

或者你可以刪除你的遠程分支端推回正常的服務器:

git push origin my_branch

合併:

使用這種方法,你會合並最終提交您的歷史記錄和日誌可以隨着時間的推移會比較混亂,但也有一些這方面的優勢,以及,如果你有一個衝突,你只需要解決它一次,當你合併時,如果你在重新綁定時有衝突,你可能需要多次解決它,因爲它會嘗試將你的提交應用於新的遠程提交一個。

要做到這一點,你可以去到你的主分支和更新:

git checkout master

和:

git pull

會做同樣的,因爲我們前面看到的

現在回到你的分支:

git checkout my_branch

並運行:

git merge master

,如果你沒有,你是好去任何衝突,你可以把它推到服務器,如果你,你只需要解決它並且您可以將其正常推送到服務器,因爲現在您解決了新提交時的衝突,您的本地分支和遠程分支之間沒有任何分歧。

git push origin my_branch

就是這樣,我希望對您有所幫助,你也許可以做到這一點以更少的步驟,但這些都只是我喜歡做,他們可能不是短的步驟,但我覺得這種方式更安全。當然,還有很多合併和重組的選項,我會建議您仔細研究一下它們是非常有用的。

+0

這是抱怨我的pom.xml。有沒有一種簡單的方法可以在該文件的本地忽略我的更改,從rebase中取出更新後的文件,然後在該文件的本地重新進行這些更改?他們只是小小的變化,所以我覺得這會更容易。 –

+0

我能夠避免pom.xml我糾正衝突,然後做一個添加它和一個提交。但現在我的分支在本地表示「你的分支和'origin/'已經分開, 分別有22個和1個不同的提交 (使用」git pull「將遠程分支併入你的) 沒有提交,工作樹幹淨「任何想法? –

+0

不知道我是否理解,你是否承諾你的改變,然後你嘗試了rebase?在這之前你沒有任何承諾嗎?因爲正如我所說的:「......如果您重新分配分支,您將無法將其推回到服務器,則必須使用-f或使用-f或刪除遠程分支來推送新分支」 – Marcone

0

這將是幫助:

$ git config --global branch.master.rebase true 

# cat ~/.gitconfig 
[user] 
     name = xx 
     email = [email protected] 
[branch "master"] 
     rebase = true 

謝謝。

+0

一次OK我再補充一點的配置,會是什麼命令完成我所需要的?那我可以做一個git rebase嗎? –

+0

只是混帳拉。遠程提交將合併到本地。 –

+2

您必須在答案中添加更多信息。只是一系列的命令對未來的目的沒有用處。 – Smit

0

如何拉下自己的變化,從GitHub上這樣 主分支,它更新我的分支機構本地

git checkout master 
git pull 
git checkout <your-branch> 
git rebase master 

和GitHub上,以及(現在GitHub上,它說我1提交 提前和19落後主人)。

git commit -m "I do this, do that" 

上傳分行遠程

git push -u <remote-name> <your-branch-on-remote> 

合併掌握並上傳您的更新上主遠程

git checkout master 
git merge --no-ff <your branch> 
git push -u <remote-name> master