git错误地指出我通过1次提交领先于origin / master

时间:2012-01-31 22:05:35

标签: git

[编辑:根据要求添加了命令输出,并为了清晰起见重新组织] 我有两个克隆的特定回购签出。

git log
commit e06424b5...
...
commit 557a0eb8...

在两者中显示相同的内容,顶部使用相同的哈希值。

git remote show origin

同样

git branch
* master

两者中仍然相同

现在有些不同。

来自'好'克隆:

git log origin/master..
commit e06424b5...

git show-ref HEAD
e06424b5... refs/remotes/origin/HEAD

# On branch master
nothing to commit (working directory clean)

来自'坏'克隆:

git log origin/master..
commit 557a0eb8...

git show-ref HEAD
557a0eb8... refs/remotes/origin/HEAD

git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.

这是不同的[更正:早先我报告此输出是相同的]。 show-ref似乎表明这个结账是一个提交落后于,而状态表明它已经领先。但git reset --hard e06424b5没有任何改变。

当我问“坏”克隆时,它认为需要推送它:

git diff --stat origin/master

它显示了属于e06424b5提交的文件,但实际上这个结帐甚至包含这些文件的唯一原因是因为我拉了它们。

任何人都知道如何让收银台意识到没有什么东西可以推动?

[编辑:这里有一些额外的命令及其来自'坏'克隆的输出......]

git log --graph --decorate --oneline    
* e06424b (HEAD, master)
* 557a0eb (origin/master, origin/HEAD) 

git rev-parse origin/master
557a0eb

git rev-parse HEAD
557a0eb (the previous hash)
e06424b (the correct, most recent hash)

3 个答案:

答案 0 :(得分:2)

你可能已从其中一个回购(没有提前消息的那个)推出。仅仅因为你从一个回购推出,并不意味着其他回购会看到同样的事情。您必须执行git fetch origin,以便更新跟踪分支。

答案 1 :(得分:0)

查看

的输出
git log origin/master HEAD master --graph --decorate --oneline

它将以图形方式显示每个引用指向的位置。您也可以使用

进行调查
gitk master origin/master HEAD

答案 2 :(得分:0)

考虑到您的评论,在我看来,您实际上是在“超级头”模式下工作。

问题是,你的初始帖子暗示一个分支指向你不想要它的特定地方(如果你真的发布了你拥有的git命令的任何输出,那就更清楚了运行)在这种情况下git reset --hard是您希望解决此问题的方法。

但实际上似乎HEAD只是指向你希望它不在的某个地方,git checkout是你用来修复HEAD指向的地方的命令。我假设有可能阻止结账工作,这就是为什么我添加了--force。

警告:将git checkout与--force参数一起使用可能会导致您拥有的任何未提交的更改或其他类似的更改。

git checkout --force master

假设你有一个主分支,那就是你想要结账的那个分支,并且它实际上实际上是跟踪起源/主人,这应该让你脱离你自己发现的那个。