2016-04-21 109 views
1

步驟1:我已經創建了一個本地Git倉庫無法當前分支復位到先前的後推提交

步驟2:然後我做一個拉(當前分支是主)

步驟3:在此之後我通過在本地副本上使用重置來恢復合併,如下所示。

enter image description here

第4步:在此之後它正確地顯示,如下所示。

enter image description here

問:我試圖推更改遠程主。它給出了以下錯誤。你能告訴我爲什麼嗎?我正在使用TortoiseGit。謝謝。

enter image description here

+0

[可能重複(HTTP://計算器。com/questions/1338728/delete-commit-from-a-branch-in-git#1338744)'git push origin HEAD --force' –

+0

您試圖推送前嘗試拉? – ItayB

+1

@ItayB我已經找到了解決辦法,我會稍後再說。歡迎:) – Sampath

回答

2

我已經找到了solution.Here步驟如下。

步驟1:克隆遠程倉庫

git clone https://github.com/myrepo/myrepo.git 

步驟2(將在默認分支主 自動檢出):重置本地主 - 它會改變主點到具有特定SHA的不同提交。

git reset --hard 2f89f2971c3cr45fe187241b8cb89a8ef8234ea3 

步驟3:推回至遠程存儲庫。

git push https://github.com/myrepo/myrepo.git --force 

這篇文章對我幫助很大:Undoing Merges

這是it.All是done.Cheers :)

+1

只是術語說明:你不是克隆分支 - 你是clonning repository(myrepo) - 它的默認分支是master,所以它可能會混淆一點。然後,你已經改變了主指針差異提交(通過提供其SHA)。最後一件事是推動你的本地回購大師到你的遠程回購。 – ItayB

+1

@ItayB感謝您的信息。請修改上述帖子。然後我們可以獲得更多有關'Git Terminology'的知識。提前感謝。 – Sampath

+0

我在WebStorm上遇到了非常類似的問題。 **步驟2 **和** 3 **做了訣竅(不需要步驟1) – Ricardo

0

這是一個棘手的問題。您不能以這種方式恢復遠程存儲庫,因爲遠程服務器識別到您的存儲庫的狀態處於隱藏狀態。無疑有更好的解決方案,但您可以刪除遠程存儲庫,使用相同的名稱創建新的遠程存儲庫,然後將本地存儲庫推送給它。

+0

然後你能告訴我如何恢復合併的更改而不刪除遠程主?謝謝。 – Sampath

+0

它不允許我刪除主人,因此我不是創建它的人。那麼該怎麼辦?謝謝。 – Sampath

+0

我發佈了一個新的答案,考慮到你不能刪除主回購 –

0

您可以檢出從之前的提交更改爲您想要恢復的每個文件,然後進行新的提交。

我不熟悉toroisegit,但我相信它有一個命令行輸入某個地方,這樣的步驟是這樣的:

比方說,承諾要恢復到的哈希29edf27 你改變,你要恢復兩個文件,說file1.phpfile2.txt

git checkout 29edf27 -- file1.php 
git checkout 29edf27 -- file2.txt 
git commit -m "reverted commit to 29edf27" 
git push origin master 
+0

這並不明確me.I本地沒有正確地恢復了更改?那麼爲什麼我需要再次這樣做呢?謝謝。 – Sampath

+0

通過在本地還原您的更改,您只需簽出以前的提交。所以從遙遠的角度來看,你是一個過時的客戶端,因爲你的分支的尖端比它的尖端更老。上述過程將創建一個新的提交,其中包括在遠程的HEAD提交作爲以前的提交,因此遠程將識別您的本地回購具有它所做的一切以及新的提交。 –

+0

澄清,我認爲在這種情況下,術語「回覆」可能是非直觀的。你並沒有真正恢復任何東西,就像在概念上放棄更改一樣,但實際上你只是檢出版本庫的舊版本。你可以通過檢查最新的提交散列,通過這個過程「取消還原」 –