git push後恢復到遠端某個版本

2021-08-22 00:19:48 字數 2186 閱讀 3499

有時後我們push某個功能後的所有push都是不被接受的 如為了測試git鉤子而做的提交 或者push的提交有問題需要恢復以後重新提交

如以下把提交到了develop的內容提交到了release_1.2分支 而且只需一次的提交提交了三次 而且不要把develop合併到release1.2上 可以通過u以下方法來解決

1.回滾到5b769d68的版本上 乾掉elasticsearch設定和merge develop to release_1.2的版本

reset --hard 5b769d68 

如果想要儲存5b769d68到最新版本的**把hard改為soft 並且提交

2.使用本地**覆蓋掉遠端**

git push -f origin release_1.2

當執行以上**後git提交記錄變成下面的狀態

通過上圖可以看到develop合併到release_1.2和elasticsearch伺服器位址修改的commit都被乾掉了

注意當回滾到某個版本時在那個版本之後的所以提交都會被乾掉 所以在多人使用乙個倉庫時該方式能不用就不用  一定要用是需要跟使用這倉庫的其他人確認是否可以通過以上方式回滾到某個版本 只有經過他們的一致同意後才能回滾

否則會造成不必要的損失 如別人提交的**丟失 後果嗎嘿嘿你自己想

假如真的出現以上i情況 在某些情況下還是有辦法的(雖然有辦法但是我們還是得做到不要出現以上情況)

通過以上方法雖然遠端分支上的**被覆蓋了 但是本地還是可以通過reset恢復到用reflog檢視到的任意分支上的

如果要恢復的版本可以通過reflog檢視到

以上是通過git reflog查詢到的結果

根據以上結果可以通過reset恢復到任意版本解決該問題

如果reflog上沒有要恢復的分支 只有找到丟失**的人看他或她的本地倉庫上是否可以得到要恢復的**和版本如果有則還能恢復

可以有些補救方法,首先要找到那個有原來upstream上最新提交的人,讓他執行下面這組命令: 

方法1: 

如果只有兩個人(包括你自己): 

git fetch origin develop 

git checkout develop 

git rebase --onto origin/develop sha1_culprit develop 

git push origin develop 

方法2: 

如果多於兩個人(包括你自己): 

git fetch origin develop 

git checkout develop 

git cherry-pick sha1_culprit^..origin/develop 

(這時候如果有衝突則解決衝突後執行git add .; git cherry-pick --continue) 

git push -f origin master 

對於方法2,確保在執行git push -f的時候其他人沒有在做push。 

注:sha1_culprit就是上次你跟upstream同步之後提交的第乙個commit的sha1 hash。 

如果沒有嘿嘿只求多副吧~! 但還的試試

如果遠端倉庫沒被gc

$ git clone *** 

$ cd *** 

$ git fsck --lost-found 

dangling commit 4d4888a3273a5b56d69df69cbf9698fed7c19a36 

$ git show 4d4888a3273a5b56d69df69cbf9698fed7c19a36 

commit 4d4888a3273a5b56d69df69cbf9698fed7c19a36 

author: clowwindy ; 

date:   mon jun 9 12:48:28 2014 +0800 

update readme.md 

... 

確認是你要找的 commit 之後 checkout 這個 commit。然後 

$ git branch -d develop 

$ git branch -b develop 

$ git push -f origin develop

最後乙個提醒,99%的場景下,你不需要push --force(push -f)。如果你沒有100%確認自己在做什麼,沒有100%把握知道怎麼解決問題,最好別嘗試force push。

Git push 到遠端倉庫

首先git繫結username password email git config user.name git config user.password git config user.email git config global user.name username git config glo...

git push到遠端怎麼撤銷?

revert再revert 接下來是其他的一些思考 今天遇到乙個非常智障的問題 因為有許可權 git 不孰,我本意是git push 到遠端乙個新分支然後pr,一時抽了寫成push到fuel了,因為pull rebase了 直接合併 自閉自閉自閉!我最怕git出錯了 下面說下解決方法 git pus...

SVN恢復到某個版本

在 的編寫過程中,難免有些錯誤需要修改,或者想從以前的檔案進行 修改,這樣就涉及到版本的追蹤,如果你以前提交時日誌寫的非常清楚,那版本追蹤回滾起來就事半功倍 得心應手。下面介紹幾種版本回滾的辦法 1.推薦的一種方法是,直接export乙個你需要的版本,然後用你export的版本覆蓋你的最新的版本,這...