2013-05-11 326 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