【问题标题】:git doesn't seem to pull all updates - HEAD and origin/HEAD in different positionsgit 似乎并没有提取所有更新 - HEAD 和 origin/HEAD 在不同的位置
【发布时间】:2013-05-05 18:36:28
【问题描述】:

我的 git 存储库处于我不知道如何处理的状态,我需要一些帮助来理解 a) 发生了什么,存储库如何以及为什么处于这种状态,以及 b) 如何我应该对此作出反应。基本上,当从遥控器拉出时,我最终会领先于遥控器,即使我重置所有更改并重试。

这就是我所做的:

我已经分叉了一个 git 存储库,克隆了上游版本(我没有写入权限),然后将我自己的 fork 添加到远程列表中,以便git remote -v 显示以下内容:

$ git remote -v
mine    git@github.com:tlycken/julia.git (fetch)
mine    git@github.com: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

这让我很困惑。为什么我的分支在 origin master 之前?我没有改变任何东西。

为了看看我能不能做点什么,我运行了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

我又回到了起点。

这里发生了什么?我应该怎么做才能让我的本地 master 拥有来自上游的最新更新?

【问题讨论】:

    标签: git github git-pull


    【解决方案1】:

    git pull 不会更新您的跟踪参考 (origin/...) 来跟踪各种遥控器的 HEADs 的位置。

    运行git fetch origin,它会更新所有origin/...跟踪参考,git status 将不再认为你领先。


    git pull &lt;remote&gt; &lt;branch&gt; 相当于:

    1. git fetch &lt;remote&gt; &lt;branch&gt;:FETCH_HEAD
    2. git merge FETCH_HEAD

    因为它只明确指定要获取的一个分支,并将其获取到特殊的本地引用 FETCH_HEAD,所以它不会在本地更新任何其他内容 - 只有 FETCH_HEAD 和您要拉入的分支。

    运行git fetch &lt;remote&gt; 将更新与该远程存储库关联的所有引用。

    【讨论】:

    • 非常感谢!我知道我可能缺少一些简单的东西 =)
    猜你喜欢
    • 2012-09-14
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 2021-07-04
    • 1970-01-01
    • 2011-01-14
    • 2013-09-25
    • 2011-05-20
    相关资源
    最近更新 更多