首页 文章

git:你的分支由X提交领先

提问于
浏览
319

这实际上是怎么产生的?

我现在正在自己的一个回购工作,所以这是我的工作流程:

  • 更改文件

  • 承诺

  • 重复1-2直到满意为止

  • 推送掌握

然后,当我做一个 git status 时,它告诉我我的分支是由X提交提前(可能是我提交的提交数量相同) . 是因为当您推送代码时它实际上并不更新本地缓存的文件(在.git文件夹中)? git pull 似乎'fix'这个奇怪的消息,但我仍然好奇它为什么会发生,也许我使用git错了?


包括在消息中打印的分支

我当地的分公司领先于大师

你在哪里推/拉当前分支

我正在推送GitHub并拉到我当时正在处理的任何一台计算机上,我的本地副本总是完全是最新的,因为我是唯一一个正在处理它的人 .

它实际上没有检查远程仓库

这就是我的想法,我想我会确保我对它的理解是正确的 .

你传递一些额外的论据吗?

不是我能看到的,也许我的结尾有一些有趣的配置?

$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
nothing to commit (working directory clean)

16 回答

  • 7

    我在Windows机器上遇到同样的问题 . 当我运行 git pull origin master 命令时,我会收到"ahead of 'origin/master' by X commits"警告 . 我发现如果我改为运行 git pull origin 并且没有指定分支,那么我将不再收到警告 .

  • 453

    它只是提醒您当前分支与执行当前轨道的分支之间的差异 . 请提供更多信息,包括消息中打印的分支以及您在何处推/拉当前分支 .

  • 1

    在我的情况下,这是因为我切换到掌握使用

    git checkout -B master
    

    只是拉它的新版本而不是

    git checkout master
    

    第一个命令resets the head of master到我最近的提交

    我用了

    git reset --hard origin/master
    

    解决这个问题

  • 2

    我在这个页面上完成了每个解决方案,幸运的是@ anatolii-pazhyn评论说,因为他的解决方案是有效的 . 不幸的是,我没有足够的声誉来支持他,但我建议先尝试他的解决方案:

    git reset --hard origin/master
    

    哪个给了我:

    HEAD is now at 900000b Comment from my last git commit here
    

    我还建议:

    git rev-list origin..HEAD
    # to see if the local repository is ahead, push needed
    
    git rev-list HEAD..origin
    # to see if the local repository is behind, pull needed
    

    您还可以使用:

    git rev-list --count --left-right origin/master...HEAD
    # if you have numbers for both, then the two repositories have diverged
    

    祝你好运

  • 43

    如果您在执行 git pull remote branch 后收到此消息,请尝试使用 git fetch 进行跟踪 . (可选,运行 git fetch -p 以从repo中删除已删除的分支)

    Fetch似乎更新了远程分支的本地表示,这在执行 git pull remote branch 时不一定会发生 .

  • 26

    使用

    git pull --rebase
    

    --rebase选项意味着git会将您的本地提交移到一边,与远程同步,然后尝试从新状态应用您的提交 .

  • 49

    我认为你误读了这条消息 - 你的分支没有超前 master ,它是 master . 它位于 origin/master 之前,它是一个 remote tracking branch ,用于记录上一个 pushpullfetch 的远程存储库的状态 . 它告诉你你到底做了什么;你领先遥控器,它提醒你推动 .

  • 96

    使用这3个简单命令

    Step 1git checkout <branch_name>

    Step 2git pull -s recursive -X theirs

    Step 3git reset --hard origin/<branch_name>

    更多细节:https://stackoverflow.com/a/39698570/2439715

    请享用 .

  • 0

    有人说你可能误读了你的信息,你不是 . 此问题实际上与您的 <project>/.git/config 文件有关 . 在它中将是类似于这样的部分:

    [remote "origin"]
        url = <url>
        fetch = +refs/heads/*:refs/remotes/origin/*
    

    如果从项目中删除了获取行's .git/config file you' ll,请停止“你的分支在'origin/master'之前提交 N 提交 . ”发生的烦恼 .

    或者我希望如此 . :)

  • 4

    我在我的舞台服务器上遇到过这个问题 . 硬复位帮我清理HEAD和遥控器一样 .

    git reset --hard origin/master
    

    所以现在我又来了:

    On branch master
    Your branch is up-to-date with 'origin/master'.
    
  • 2

    虽然这个问题有点陈旧......我处于类似情况,我的回答帮助我解决了类似的问题

    首先尝试使用 push -f 或强制选项

    如果这不起作用,则可能(在我的情况下)远程存储库(或者更确切地说,对 git remote -v 上显示的远程存储库的引用)可能没有得到更新 .

    以上结果是您的推送与您的远程/分支同步您的本地/分支,但是,本地仓库中的缓存仍然显示先前提交(本地/分支...仅提供单个提交)作为HEAD .

    要确认以上克隆在不同位置的回购并尝试比较local / branch HEAD和remote / branch HEAD . 如果它们都相同,那么你可能面临我所做的问题 .

    解:

    $ git remote -v
    github  git@github.com:schacon/hw.git (fetch)
    github  git@github.com:schacon/hw.git (push)
    $ git remote add origin git://github.com/pjhyett/hw.git
    $ git remote -v
    github  git@github.com:schacon/hw.git (fetch)
    github  git@github.com:schacon/hw.git (push)
    origin  git://github.com/pjhyett/hw.git (fetch)
    origin  git://github.com/pjhyett/hw.git (push)
    $ git remote rm origin
    $ git remote -v
    github  git@github.com:schacon/hw.git (fetch)
    github  git@github.com:schacon/hw.git (push)
    

    现在按如下方式执行 push -f

    git push -f github master ### Note your command does not have origin anymore!

    git pull 现在 git pull github master

    git status 收到

    # On branch master

    nothing to commit (working directory clean)

    我希望这对某些人有用,因为视图的数量太高,以至于搜索此错误几乎总是将此线程列在顶部

    有关详细信息,请参阅gitref

  • 1

    当我使用TortiseGIT进行切换/结账时,我确实发生了这种情况 .

    我的问题是我根据另一个本地分支创建了分支 . 它在 /.git/config 中创建了一个"merge"条目,看起来像这样:

    [branch "web"]
        merge = refs/heads/develop
        remote = gitserver
    

    每当我切换到“web”分支时,就会告诉我在开发之前我有100个提交 . 好吧,我不再承诺发展,所以这是真的 . 我能够简单地删除此条目,它似乎正在按预期运行 . 它正在跟踪远程参考,而不是抱怨在开发分支后面 .

    正如Vikram所说,这个Stack Overflow线程是Google搜索此问题时的最佳结果,所以我想我会分享我的情况和解决方案 .

  • 2

    建议 git pullgit fetch 的答案是正确的 .
    git status 看到 .git/FETCH_HEAD.git/refs/remotes/<repository>/<branch> 之间的差异(例如 .git/refs/remotes/origin/master )时会生成该消息 .

    后一个文件记录上次提取的HEAD(对于存储库/分支) . 执行 git fetch 将两个文件更新到分支的当前HEAD .
    当然如果没有东西可以获取(因为本地存储库已经是最新的),那么 .git/FETCH_HEAD 不会改变 .

  • 0

    我想重申@Marian Zburlia上面提到的相同内容 . 它对我有用,并会向其他人提出同样的建议 .

    git pull origin develop

    应该跟着 $ git pull --rebase .

    这将删除最新拉动后 $ git status 上的评论 .

  • 7

    如果在执行提交后收到此消息以便取消分支中的文件,请尝试在任何文件中进行一些更改并执行提交 . 显然你不能进行单一提交,其中只包括未跟踪先前跟踪的文件 . 最后这篇文章帮我解决了整个问题https://help.github.com/articles/removing-files-from-a-repository-s-history/ . 我只需要从存储库历史记录中删除文件 .

  • 5

    git fetch 将为您解决此问题

    如果我的理解是正确的,那么您的本地(缓存) origin/master 已过期 . 此命令将从服务器更新存储库状态 .

相关问题