簡體   English   中英

為什么我需要git merge origin / master中的“master”?

[英]Why do I need the “master” in git merge origin/master?

使用git並希望從服務器獲取更改時的約定是:

git fetch

git merge origin/master

我知道還有git pull ,但我的具體問題是關於語法origin/master master部分做什么? 如果我只是做git merge origin (沒有master )它似乎工作。 我知道master是一個分支,但是如果我跟蹤一個以上的遠程分支,那么正常的用例是否會合並所有這些分支?

當未指定分支時, git merge origin將合並在從origin遠程(通常為master )設置為默認的任何分支中。 在這種情況下, git merge origingit merge origin/master將做同樣的事情。 但是,如果要在origin的不同分支中合並,則必須指定分支。

merge的參數merge解析為commit-ID。 這意味着應用了gitrevisions中的規則。 通常, origin/ name解析為git fetchgit push之一的“遠程分支”在每次獲取和git push保持最新。

“遠程分支”,也稱為“遠程跟蹤分支”,只是一個類似分支的標簽,其“全名”以refs/remotes/開頭。 遠程命名origin都在refs/remotes/origin/ 在正常操作中, git fetch查詢一些遠程(如origin )git存儲庫並詢問:“嘿,你在那邊有什么分支,以及它們的SHA-1值是什么?” 當它得到答案時,它會將它們存儲在你的 git存儲庫中: refs/remotes/origin/masterrefs/remotes/origin/devel等等。 這樣可以讓你知道“那邊”是什么樣的東西,你的git最后一次有機會同步。

這些不應該與git所謂的“跟蹤分支”(或“本地跟蹤分支”)相混淆。 本地分支是“全名”以refs/heads/開頭的標簽。 如果他們有與他們相關的“上游”信息,他們被認為是“跟蹤”。 您可以在首次創建分支時輸入上游信息 - 這通常是具有與遠程分支“相同”名稱的本地分支的情況,例如master vs origin/master - 或者您可以設置(或更改)它稍后使用git branch --set-upstream-to

所有這些都與git pull語法不同: git pull origin master是相當不同的,並且更古老,完全超越了“遠程跟蹤分支”的整個想法。 1這種偶然的相似之處,我認為是很多混亂的根源(我知道多年前我發現它很混亂)。


1具體來說,您曾經(並且仍然可以)從URL而不是“遠程”名稱進行git pull 這通常會(並且仍然)轉移到另一個git存儲庫,並獲得至少一些分支的列表(有時只是感興趣的一個)。 但是,因為它們是它的分支而不是你的分支,所以它們被記錄在名為FETCH_HEAD的文件中。 所以在這一點上,它會從“那里”帶來master ,但把它放到FETCH_HEAD而不是遠程跟蹤分支 - 用原始URL,你沒有遠程名稱,所以沒有辦法命名遠程跟蹤分支:有沒有origin與構建前綴refs/remotes/origin 然后git-pullmaster參數意味着:“通過FETCH_HEAD搜索以找到它們的master分支。”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM