2017-02-10 40 views
0

我已經經歷了一些問答了&一個Git 1.9.1:origin/master代表原始分支主機的本地副本嗎?

In Git, what is the difference between origin/master vs origin master?

Git branching: master vs. origin/master vs. remotes/origin/master

我才知道

產地/主是一個遠程分支(這是分支的本地副本 在遠程名爲「原點」上命名爲「主」)

遙控器/ origin/master是遠程名爲 原點的名爲master的分支。

現在我想知道

  • 如果origin/master是一個本地副本,那麼爲什麼git branch不會顯示這個分支。
  • 可以origin/master像 當地的任何其他普通分支一樣對待?

如果不是那麼我就有麻煩了。這是我做的:

我已經克隆了一個存儲庫。我已經添加了一個remote remote remoteA(在另一個repo中有同樣的projet),並通過remoteA將dev與master分開。我用下面命令此(當前分支是主):

git pull --rebase remoteA/dev 

然後重訂主與原籍/主

git rebase origin/master 

然後我創建了一個從主另一分支推到遠程和得到成功合併(由於受到保護,無法推送主分支)。

現在,如果我跑git status它說

你的分支和「產地/主」有分歧,(使用「混帳拉」到 合併遠程分支到你的)

時我做了git pull origin master它顯示了我在rebase期間解決的所有衝突。我不想再解決它們。我想要的只是主複製的新副本,而不需要再克隆它。在這個過程中我做錯了什麼?如何糾正它?
plz解釋。 感謝您的任何幫助。

回答

1

如果origin/master是本地副本,那麼爲什麼git分支不顯示此分支。

使用git branch顯示本地跟蹤分行,如果你喜歡這樣運行它:

git branch -a 

爲什麼普通的香草git branch沒有顯示追蹤分支在默認情況下是什麼原因,因爲通常你會不要直接操縱這些分支。這對你的第二個問題來說是一個很好的途徑。

可以將origin/master作爲任何其他普通分支在本地處理嗎?

據我所知,你可以像使用任何其他分支一樣使用這個分支。但是,這不是建議或非常典型的。本地跟蹤分支可用作遠程存儲庫中存在的真正遠程分支的本地代理(例如Bitbucket,GitHub)。我建議不要直接與跟蹤分支合作,除非有充分理由這樣做。

對於所有意圖和目的,您可以將本地跟蹤分支視爲實際的遠程分支。當然,有一點需要注意的是,跟蹤分支本身可能落後於真正在遙控器上的東西。

+0

如果我做混帳重置 - 在原產地/主人,它只會改變本地副本。對?它與原始分支沒有任何關係? – Suraj

+0

是的,該命令將重置您所在的任何分支(大概是本地'master')到稱爲'origin/master'的本地跟蹤分支。它不接觸遙控器;你需要推動才能實現這一目標。 –

+0

謝謝。你能看到我的問題,並告訴我我的錯誤是爲了重新設置我的本地分支與遠程分支。 – Suraj

0

origin/master只是標記遠程回購中主分支的位置。 git branch只顯示分支存在於本地。如果你想找到origin/master的位置,你可以使用git log --oneline --decorate --graph --all

不,它不能被視爲本地分支。即使您也可以檢查origin/master的歷史記錄(git log origin/master),或者您可以將差異與當地分支機構(git diff master origin/master)等進行比較。但它仍與本地分支有一些不同的功能。例如你可以刪除/創建本地分支,但你不能這樣做origin/master

要更正origin/master被分流的情況:

如果你不想爲當地主分支的變化,可以使用:

git checkout <another local branch> 
git branch -D master 
git checkout master 

如果希望更改本地主分支,並通過使用原點/主號碼解決衝突,您可以使用:

git checkout master 
git pull -X theirs origin master 
git push origin master 
+0

「git branch -D master」將刪除遠程主分支。不是嗎?如果它被刪除,「git checkout master」將不起作用。 – Suraj

+0

'git branch -D master'會刪除本地主分支。 'git checkout master'會創建一個新的本地分支點,與'origin/master'相同的提交。 –