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

时间:2010-03-12 12:15:54

标签: git git-commit

这是如何实现的?

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

  1. 更改档案
  2. 提交
  3. 重复1-2直到满意
  4. 推送到掌握
  5. 然后,当我执行git status时,它告诉我我的分支是提前X提交(可能与我提交的提交数量相同)。是因为当您推送代码时它实际上并不更新本地缓存的文件(在.git文件夹中)? git pull似乎“修复”了这条奇怪的信息,但我仍然很好奇它为什么会发生,也许我使用的是git错误?


      

    包括在消息中打印的分支

    我的本​​地分支领先于主人

      

    你在哪里推/拉当前分支

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

      

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

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

      

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

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

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

20 个答案:

答案 0 :(得分:470)

答案 1 :(得分:108)

使用

git pull --rebase

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

答案 2 :(得分:51)

使用这3个简单命令

第1步git checkout <branch_name>

第2步git pull -s recursive -X theirs

第3步git reset --hard origin/<branch_name>

更多详情:https://stackoverflow.com/a/39698570/2439715

享受。

答案 3 :(得分:49)

我认为你误读了这条消息 - 你的分支不在master之前,而 master。它位于origin/master之前,这是一个远程跟踪分支,用于记录上一个pushpull或{{1}的远程存储库的状态}。它告诉你你到底做了什么;你领先于遥控器,它提醒你推动。

答案 4 :(得分:26)

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

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

如果你从项目的.git / config文件中删除了获取行,那么你将通过N提交停止“你的分支在'origin / master'之前。”发生的烦恼。

或者我希望如此。 :)

答案 5 :(得分:8)

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

git reset --hard origin/master

现在我又来了:

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

答案 6 :(得分:8)

我在这个页面上完成了每个解决方案,幸运的是@ 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

祝你好运

答案 7 :(得分:8)

在我的情况下,这是因为我使用

切换到主人
 git checkout -B master

只需拉出新版本而不是

 git checkout master

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

我用过

git reset --hard origin/master

修复

答案 8 :(得分:4)

我在Windows机器上遇到同样的问题。当我运行git pull origin master命令时,我会通过X提交获得“在'origin / master'之前”的警告。我发现如果我改为运行git pull origin并且没有指定分支,那么我将不再收到警告。

答案 9 :(得分:2)

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

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

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

上面的结果是你的推送同步你的本地/分支与你的远程/分支,然而,你的本地仓库中的缓存仍然显示先前的提交(本地/分支...只提供单个提交被推送)作为HEAD。 / p>

要确认以上克隆不同位置的仓库并尝试比较本地/分支HEAD和远程/分支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 ###请注意,您的命令不再有origin了!

立即执行git pull  git pull github master

git status收到

# On branch master

nothing to commit (working directory clean)

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

另请参阅gitref了解详情

答案 10 :(得分:2)

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

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

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

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

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

答案 11 :(得分:2)

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

答案 12 :(得分:2)

  

然后,当我执行git status时,它告诉我我的分支在X提交之前(可能与我进行的 commits数量相同)

我的经验是在具有许多分支机构的团队环境中。我们在自己的功能分支中工作(在本地克隆中),这是git status表明我提前11次提交的其中之一。像问题的作者一样,我的工作假设是+11来自我自己的提交

事实证明,我已经在多个星期前将更改从通用develop分支引入到功能分支中-但是忘了!今天,当我重新访问本地功能分支并执行git pull origin develop时,该数字跃升至+41。 develop已经完成了许多工作,因此我的本地功能分支比origin存储库中的功能分支还要先进。

因此,如果您收到此消息,请回想一下您可能从其他分支机构(自己的或其他分支机构)进行的任何拉/合并。该消息仅表明您需要git pushpull所做的更改从本地存储回传到origin存储(“跟踪分支”)以使事情同步。

答案 13 :(得分:1)

建议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不会改变。

答案 14 :(得分:1)

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

Tr.apply[Int].process(...)

后面应该跟git pull origin develop

这将删除最近一次拉动后$ git pull --rebase上的评论。

答案 15 :(得分:1)

git fetch将为您解决这个问题

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

答案 16 :(得分:0)

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

答案 17 :(得分:0)

这对我有用

git reset --hard origin/master

输出必须看起来像

On branch dev HEAD is now at ae1xc41z Last commit message

答案 18 :(得分:0)

只是分享发生在我身上的事情。

我提交了一堆文件并意识到有些文件我不想提交,所以我使用 VS 代码 undo last commit,删除文件并添加到 gitignore,然后再次强制推送我的提交。

这显然导致 git 认为我的提交仍然需要远程进行,因为文件是在本地以某种方式提交的。

已由 undo last commit 解决并取消暂存 gitignore 中的文件

答案 19 :(得分:0)

我得到以下与实际问题 Your branch is ahead of 'origin/testing/KB-200' by 17 commits

相关的信息

原因:上周我创建了 PR 以供审核,然后我关闭了该项目。然后今天,我打开了该项目,在同一个分支 (testing/KB-200) 中进行了轻微的更改,然后我先运行了 git pull。这个 pull 包含 18 个由其他开发人员在该项目上工作的新提交,这使得我的本地分支在这些提交之前领先于我的远程分支,因此我收到了该消息。所以我只需要运行以下命令:

git push origin testing/KB-200

然后一切都是同步的并且是最新的。 [On branch testing/KB-200 Your branch is up to date with 'origin/testing/KB-200']