2012-06-14 20 views
1

我試圖向主人重新綁定後,我在分支上搞得一團糟。回滾推貼rebase

在我的提交歷史中,我進行了很多重構(重命名和移動),同時刪除了類。而且我不應該推送到遠程存儲庫。 (我知道,自從我踢了自己以來)。

但是,完成了什麼。現在,由於rebase重寫歷史並提交(?)(通過在rebase期間解決衝突),我不能重置爲更早的提交HEAD〜2重新開始,所有提交都被重寫並且提交了錯誤。

我可以從git獲得HEAD〜2的快照,有沒有辦法將快照合併(重新綁定)回我的分支,回滾更改並重新開始?

在此先感謝

大衛

更新,從我們的內部git的網頁,我可以看到以前的承諾:

commit 6f577850231fed07eebdacd3bc5862f84356d803 
tree 8be1d60056697bc1b8d7284c4e85a6d1738ac3e2 tree | snapshot 
parent 1ca61d4dd69b7be649906834d44bb7fec390153d commit | diff 

而且我能夠下載快照gz通過點擊「快照」鏈接。 然而,當我嘗試做:

git checkout -b newBranch 6f577850231fed07eebdacd3bc5862f84356d803 

我:

fatal: reference is not a tree: 6f577850231fed07eebdacd3bc5862f84356d803 

如果我運行:

git checkout -b --force newBranch 6f577850231fed07eebdacd3bc5862f84356d803 

我:

fatal: git checkout: updating paths is incompatible with switching branches. 

我想這隻提交駐留在遠程存儲區RY?那麼我怎樣才能在git中檢出它?

解決方案: 這SO答案是解決我的問題:Undoing a git rebase

+0

'我在我的分支上弄得一團糟...'和你的SO問題......真的嗎?只有一行文字?我絕對不會閱讀,你真的需要學習如何組織。 – KurzedMetal

+1

這是更好嗎?謝謝 –

回答

2
fatal: reference is not a tree: 6f577850231fed07eebdacd3bc5862f84356d803 

OP David Zhao發現一個不完整的重訂或invalide HEAD參考也可以觸發消息:
Undoing a git rebase

即,git reset --hard [email protected]{x},'x'是在git reflog中找到的HEAD參考。


初步的答案:它也恰好爲子模塊(這是不是這裏的情況)

請參閱「Git submodule head 'reference is not a tree' error」:

有人做了一個超級項目承諾是指未發佈的子模塊子提交。

所以,如果你有子模塊,你需要確保母公司回購和子模塊是同步的,並獲取母公司回購(更新爲顯示在您的GitWeb頁面他們的歷史)到您的當地回購,然後才能開始簽出任何提交。
如果該提交來自子模塊,請在執行該簽出之前首先轉到該子模塊目錄。

從那裏,你可以分支合併到你推一個(讓說,例如,「master」),開創了提交(因此沒有歷史重寫),採摘所描述的方法之一在「git command for making one branch like another」中。

+0

我們沒有子模塊。我認爲提交是從分支中分離出來的,所以它不屬於父類。儘管我仍然可以通過tarball下載整個源代碼樹。可以這樣嗎?有沒有辦法讓我重新附上它?謝謝! –

+0

@DavidZhao你看到(在取回之後)在你的reflog中提交了嗎? ('git reflog')http://blog.pioneeringsoftware.co.uk/2012/01/13/reference-is-not-a-tree是關於重新附加一個分支......但又是在一個子模塊中。那麼你是否確定*沒有子模塊參與? – VonC

+0

我確定我們沒有子模塊。其實,我被指出這個問題:http://stackoverflow.com/questions/134882/undoing-a-git-rebase git reflog和git reset --hard HEAD @ {5}像一個魅力工作 –