我已執行git commit
後跟git push
。我該如何在本地和遠程存儲庫上恢復該更改?如何在`git push`後在本地和遠程撤銷`git commit`
$ git log
commit 364705c23011b0fc6a7ca2d80c86cef4a7c4db7ac8
Author: Michael Silver <Michael [email protected]>
Date: Tue Jun 11 12:24:23 2011 -0700
我已執行git commit
後跟git push
。我該如何在本地和遠程存儲庫上恢復該更改?如何在`git push`後在本地和遠程撤銷`git commit`
$ git log
commit 364705c23011b0fc6a7ca2d80c86cef4a7c4db7ac8
Author: Michael Silver <Michael [email protected]>
Date: Tue Jun 11 12:24:23 2011 -0700
你可以做一個互動變基:
git rebase -i <commit>
這將彈出默認編輯器。只需刪除包含要刪除的提交的行即可刪除該提交。
當然,您將需要訪問遠程存儲庫以在其中應用此更改。
一般來說,做一個 「反」 承諾,使用:
git revert 364705c
然後將其發送到遠程如常:
git push
此次榮獲」 t刪除提交:它會做出額外的提交,撤銷第一次提交所做的任何操作。其他任何東西都不是很安全,特別是當這些變化已經傳播出去的時候。
這比AlexanderGroß's(選擇的答案)更安全(因此可能更好)。 – Graeck
@Graeck每個解決方案都有其含義和優點。 –
這應該是公認的答案,最好不要覆蓋歷史,如果與團隊合作更好。只有在您還沒有將更改推送到服務器時纔會接受'git reset'。 –
git reset HEAD~1
如果您不想讓您的更改消失(未更改的更改)。更改,提交併推送再次git push -f [origin] [branch]
這對我有效。 +1 – CodeChops
或者:
git push origin +364705c23011b0fc6a7ca2d80c86cef4a7c4db7ac8^:master
強制原點遠程倉庫到最後父的主分支提交所有的
首先,放鬆。
「沒有什麼是我們的控制之下。我們的控制是純粹的幻想。」 「是人都會犯錯」
我得到你無意中推你的代碼remote-master
。這將是沒問題的。
1.首先,獲取您嘗試返回的提交的SHA-1
值,例如,致力於掌握分支。像每個提交的一起串
git log
你會看到一羣「f650a9e398ad9ca606b25513bd4af9fe ...」:運行此。從您提交的想要返回複製該號碼。
2.現在,下面的命令輸入:
git reset --hard your_that_copied_string_but_without_quote_mark
你應該看到的消息,如 「現在HEAD是」。你清楚了。它剛纔所做的就是在本地反映這種變化。
現在,下面的命令輸入:
git push -f
你應該可以看到
「警告:push.default沒有設置,其隱含的價值已經改變 .. ......共0(delta 0),重用0(delta 0)... ... your_branch_name - > master(強制更新)。「
現在,你們都清楚了。再次使用「git log」檢查master,您的fixed_destination_commit應該位於列表的頂部。
歡迎您(提前))
UPDATE:
現在,你之前的所有這些所取得的變化開始的,現在都沒有了。 如果你想再次把這些難題帶回來,這是可能的。感謝git reflog和git cherry-pick命令。
嘗試使用
git reset --hard <commit id>
請注意:這裏提交的ID將您想去的提交ID,但不是你想重新設置該ID。這是我唯一被困住的地方。
然後按
git push -f <remote> <branch>
謝謝,它拯救了我的一天。 –
最好的答案,有時候這就是你不得不做的一旦git被不懂的人搞砸了 –
感謝您的讚賞。在我的情況下,我的團隊搞砸了這些東西,然後我不得不找到解決辦法。 –
offtopic,但你必須在你的e-mail地址對應的空間? – Boy