2012-01-31 27 views
1

[/編輯:添加命令輸出請求,並重新組織明確] 我有兩個特定回購克隆簽出。git錯誤地表明我在1/1提交

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) 
+0

你的意見不是很清楚。從git中得到的一些實際響應會比你給它的命令更有幫助......'git diff HEAD origin/master'給出了什麼? – Arelius 2012-01-31 22:11:55

+0

是的,'git diff HEAD origin/master'顯示一大組差異,這很有意義,因爲HEAD指向前一個散列,而不是最新的 – Magnus 2012-01-31 22:17:57

+0

你有什麼頭部設置?當你做'git分支'什麼顯示爲當前分支? – Arelius 2012-01-31 22:27:54

回答

0

考慮到你的意見,在我看來,你實際上是在'獨立頭部'模式下工作。

問題是,您的初始文章意味着某個分支指向您不想要的特定位置(如果您實際上發佈了任何git命令的輸出結果,這將更加清晰已經運行)在這種情況下,git reset --hard是你期望解決這個問題。

但事實上,HEAD似乎只是指向某處,你希望它不是,git checkout是你用來修復HEAD指向的命令。我假設可能會阻止結帳工作,這就是爲什麼我加入了--force。

警告:使用git checkout和--force參數可能會導致您有任何未提交的更改或類似的事情。

git checkout --force master 

假設你有一個主分支,它是你希望簽出一個,而且它實際上是在實際跟蹤起源/主,這應該讓你出去,你已經找到自己的鹹菜。

0

看到的

git log origin/master HEAD master --graph --decorate --oneline 

輸出它會以圖形方式顯示你每個參考是指向。你也可以用調查

gitk master origin/master HEAD 
+0

我已經知道HEAD指向錯誤的地方,我不能讓git糾正它... reset - 硬似乎沒有任何效果 – Magnus 2012-01-31 23:07:03

+0

你使用checkout來移動HEAD,git reset改變當前分支。 'git checkout master'將頭部移動到主分支,或'git checkout origin/master'從原始遠程移動到主分支。你也可以做一個'git checkout Arelius 2012-01-31 23:30:06

+0

如果你有'git status',它應該顯示你「#不在任何分支上」。這意味着你是無頭的 - 不在任何分支上。但是如果它說你在某事之前,這意味着你在一個分支上。 – 2012-01-31 23:46:45

2

你可能已經從回購的一個推(在一個沒有消息的提前)。僅僅因爲你從一個回購倉庫中推出,並不意味着其他回購商品會看到同樣的事情。您必須執行git fetch origin,以便更新跟蹤分支。