2015-11-20 123 views
0

正如我們所知,git pull = git fetch + git merge。但我對git merge的理解是,它隻影響你合併到的分支,而不是你正在合併的分支。git pull會影響遠程追蹤分支嗎?

所以在混帳拉的情況下,我想它看起來像這樣:

git fetch origin 
git merge origin/master 

如果是這樣的情況下,從產地新的變化將在主重播,但產地/主不會有變化致力於當地的主分支。 git pull是否確保遠程跟蹤分支(origin/master)包含git合併後在master中進行的所有新更改,或者是在執行git push時完成的更改?

+0

如果您將分支B合併到分支A中,則需要將更改推送到分支A的遠程分支,以使更改顯示在那裏。 –

+0

對不起,我不是這個意思。我想知道你什麼時候在做git fetch + git merge,遠程跟蹤分支是否使用本地更新進行更新。 – Boon

+0

如果您有本地更改,您可以執行'git stash'來存儲您的更改,然後'git pull'從遠程分支獲取更改,然後'git stash pop'重新應用您的更改。做'git pull'不會自動將本地更改應用到遠程分支。你必須自己推動它們。 –

回答

2

簡短的回答很簡單:不,遠程跟蹤分支不受影響。

想想像origin/master這樣的遠程跟蹤分支的一個好方法是,幾乎所有的時間你的git都獨立於它們的(origin)git,除非你告訴你的git調用它們的git和座標。這樣做的命令 - 通過互聯網電話呼叫遠程 - 是git fetchgit push(當然還有最初的git clone)。因此,origin/master始終是「您的git與之同步的最後一次」master在原始位置「。

當你獲取或推,然後混帳得到的什麼都及其分支機構是他們的git的想法,並更新你的遠程跟蹤分支。它將它們設置爲當時的任何遙控器,只要您也有這些SHA-1 ID。 您可以限制您的git更新哪些分支,但直接git fetch的默認值是獲取所有遠程的當前信息。

還有一個命令是手機了遙控器,但不更新您的git的遠程跟蹤分支:git ls-remote確實的第一步獲取或推,然後簡單地顯示所有從該得到的參考名稱遠程。嘗試一下,它是純粹的信息,但會讓你看到這是如何工作的。


使用Git不能指向自己的遠程跟蹤分支到你沒有SHA-1。由於git fetch通常帶來的一切,這是主要更新的一個。用git push你問遠程更改其SHA-1 ID到你的git發送的東西,所以如果它說「是」,那麼根據定義你也有這些對象 - 但這只是保證你的分支和/或標籤發送過來,而不是其他分支。

其實有幾個,但只是一個很好的嘗試插圖。爲了完整起見,我會提及git remote show有時也會打開遙控器。

+0

因此,我認爲在git push之後,如果再次執行git獲取,遠程跟蹤分支現在將包含本地新的更改? – Boon

+0

如果您的'git push'成功,您的遠程追蹤分支*已經*匹配您推送的任何內容(因爲遠程同意將他的分支設置爲您推送的標識)。例如,如果你說'git push origin 1234567:master',並且你有一個提交的ID是'1234567','push'成功,你的'origin/master'現在將包含'1234567'。如果你想確定,你可以'再次git fetch origin'來仔細檢查,或者使用'git ls-remote origin'來查看它。 – torek

+0

只是爲了確保 - 所以你的答案是,如果我在本地分支和服務器有新的變化,在git fetch和git merge合併後,我的本地分支將不會和我的追蹤分支(origin /大師),對吧? – Boon