2013-05-11 325 views
4

我已經結束了一個git倉庫的狀態,我不知道該如何處理,我需要一些幫助來理解a)發生了什麼事情,知識庫如何以及爲什麼處於這種狀態,以及b)我應該如何對此做出反應。基本上,當從遙控器拉出時,即使我重置所有更改並再次嘗試,我也會在遙控器之前結束。git似乎並沒有全部更新 - HEAD和origin/HEAD在不同的位置

這是我做了什麼:

我已付出一個Git倉庫,克隆上游版本(我沒有寫權限),然後加入我自己的叉子遙控器的列表,使git remote -v顯示以下內容:

$ git remote -v 
mine [email protected]:tlycken/julia.git (fetch) 
mine [email protected]:tlycken/julia.git (push) 
origin git://github.com/JuliaLang/julia.git (fetch) 
origin git://github.com/JuliaLang/julia.git (push) 

我現在想確保我的本地版本是最新的,在上游回購的一切,所以我跑

$ git pull origin master 
From git://github.com/JuliaLang/julia 
* branch   master  -> FETCH_HEAD 
Already up-to-date. 
tlycken$ git status 
# On branch master 
# Your branch is ahead of 'origin/master' by 4 commits. 
# (use "git push" to publish your local commits) 
# 
nothing to commit, working directory clean 

ŧ他迷惑了我。爲什麼我的分支領先於原點大師?我沒有改變任何東西。

爲了看看我能做些什麼,我跑了git lggit log --graph的別名與一些漂亮的打印)。輸出的頂部如下所示:

* 6912a42 - (HEAD, mine/master, master) Merge pull request #3052 from daviddelaat/linalgnumber (2013-05-10 11:23:09 -0700) <Viral B. Shah> 
|\ 
| * 8116d51 - Use Number instead of Integer in some linalg operations (2013-05-10 19:12:45 +0200) <David de Laat> 
* | 6cc1532 - Update .travis.yml configuration in the manual. (2013-05-10 21:41:59 +0530) <Viral B. Shah> 
* | fa1e3fe - Update logdet. Close #3070. (2013-05-10 19:35:37 +0530) <Viral B. Shah> 
* | a182f7f - (origin/master, origin/HEAD, mine/contrib-base) Merge branch 'master' of github.com:JuliaLang/julia (2013-05-10 03:10:38 -0400) <Jeff Bezanson> 

顯然,HEAD的位置不同。爲了確保在我開始分支之前在本地存儲庫中獲得正確的代碼,我做了git reset --hard origin/HEAD以刪除我之前的任何內容,然後git pull origin master以確保我是最新的(即沒有重置太遠或某些東西):

$ git pull origin master 
From git://github.com/JuliaLang/julia 
* branch   master  -> FETCH_HEAD 
Updating a182f7f..6912a42 
Fast-forward 
base/linalg/dense.jl   | 2 +- 
base/linalg/factorization.jl | 44 ++++++++++++++++++++++---------------------- 
doc/manual/packages.rst  | 3 +-- 
3 files changed, 24 insertions(+), 25 deletions(-) 
$ git status 
# On branch master 
# Your branch is ahead of 'origin/master' by 4 commits. 
# (use "git push" to publish your local commits) 
# 
nothing to commit, working directory clean 

我回到了我開始的地方。

這是怎麼回事?我應該做些什麼來達到我的本地主人有來自上游的最新更新的狀態?

回答

9

git pull不會更新您的跟蹤參考(origin/ ...),以跟蹤各種遙控器的「HEAD」的位置。

運行git fetch origin它會更新所有的origin/跟蹤編號和git status不會再認爲你在前面。


git pull <remote> <branch>是等價的:

  1. git fetch <remote> <branch>:FETCH_HEAD
  2. git merge FETCH_HEAD

因爲它明確地只指定了一個分支去取,並取到當地的特殊裁判FETCH_HEAD ,它不會在本地更新其他任何東西 - 只有FETCH_HEAD和你的分支正在進入。

反而會運行git fetch <remote>更新與該遠程存儲庫關聯的所有ref。

+0

非常感謝!我知道有可能是我很想念的東西=) – 2013-05-11 02:13:26