2017-04-25 162 views
1

我有一個使用git init和一些提交創建的倉庫。git push會發生什麼-u my_url master

已經忘記了第一次的做git remote add origin my_git_url正確的順序,我只是做了git push -u my_git_url master

推是成功的,它顯示Branch master set up to track remote branch master from my_git_url.

那麼,什麼是我的當前回購的狀態?我知道origin未被設置,它是否跟蹤一個匿名遠程,沒有名字,只是網址?

+0

你或許可以看看'.git/config'知道發生了什麼 –

回答

2

由於Piotr Skotnicki said in a comment,你可以觀察一下你.git/config文件中看到。然而,在Git的說:

Branch master set up to track remote branch master from <url> 

你將看到的是:

[branch "master"] 
     remote = <url> 
     merge = refs/heads/master 

換句話說,而不是通過一個名爲記住其他Git的分支遠程(它可以讓你遠程追蹤分支等所有其他好處,而不必輸入長URL),你的Git現在記得你pstream由匿名遠程。無論是git fetch還是git pull(它總是運行git fetch)都會聯繫任何Git在URL上的回答,就像他們會使用命名的遠程服務器一樣,並使它們跟隨遠程的URL設置。 git pull運行的第二個命令將使用FETCH_HEAD中留下的跡線(實際上,無論您是否切換到使用命名的遠程,此功能都會強制執行此操作)。

剛剛成立了一個遠程命名,運行git fetch來填充遠程跟蹤分支,然後要麼git push -u一次,或使用git branch --set-upstream-to(如Jai Kumar Rajput's answer),以固定branch.master.remote設置,以獲得遠程跟蹤分支效益背。

+0

因此,使用匿名遠程,我無法獲得遠程跟蹤分支?在我看來,唯一的區別是,不是我的'master'跟蹤'origin/master',而是跟蹤'my_git_url/master',這看起來是一樣的嗎? (gitk確實無法顯示被跟蹤的遠程分支,這似乎暗示了其他情況......) – Woofas

+1

@Woofas:您將「跟蹤分支」的想法與「遠程跟蹤分支」的想法混爲一談。Git讓一個分支跟蹤另一個分支,但是有一個完全獨立的東西叫做遠程跟蹤分支。爲了讓它更加混亂,「遠程追蹤分支」是本地的,而不是遙遠的;根本不跟蹤另一個分支;甚至不是分支! :-)但是,這就是Git給它的名字。無論如何,像'origin/master'這樣的遠程跟蹤分支只能在使用像「origin」這樣的命名遠程時創建,而不能在使用URL時創建。根據[遠程]的內容,運行'git fetch'根據[續] – torek

+1

...創建並更新它們。在你的'.git/config'中使用 .fetch'。爲此,遙控器必須有一個'[remote']'部分,並帶有一個'fetch'行(一個或多個,真的)。如果你看一個典型的'.git/config',你會看到'[remote'origin']'有'url = ...',然後'fetch = + refs/heads/*:refs/remotes/origin/* '。這就是'git fetch'創建和更新'origin/master'等的最後一行。 – torek

0

這裏與-u選項推喜歡提

git push -u origin master 

等效的長選項的副作用是--set-upstream

git branch --set-upstream已被棄用,並且可以在相對遙遠的將來被移除。

git branch [-u|--set-upstream-to]已經引入了一系列參數。

如果你想使現有的分支追蹤遠程分支,

git branch -u upstream/foo 
相關問題