這就是我在我所謂的穩定分支上所作的事情...... git
% git rebase master First, rewinding head to replay your work on top of it... Fast-forwarded alpha-0.3.0 to master. % git status # On branch alpha-0.3.0 # Your branch is ahead of 'origin/alpha-0.3.0' by 53 commits. # nothing to commit (working directory clean) % git push Fetching remote heads... refs/ refs/heads/ refs/tags/ refs/remotes/ 'refs/heads/master': up-to-date updating 'refs/heads/alpha-0.3.0' from cc4b63bebb6e6dd04407f8788938244b78c50285 to 83c9191dea88d146400853af5eb7555f252001b0 done 'refs/heads/unstable': up-to-date Updating remote server info
這是我後來意識到的一個錯誤。 我想撤消整個過程,並將alpha-0.3.0分支恢復到原來的狀態。 bash
我該怎麼辦? ide
git revert
比這裏提出的一些方法危險性小: spa
prompt> git revert 35f6af6f77f116ef922e3d75bc80a4a466f92650 [master 71738a9] Revert "Issue #482 - Fixed bug." 4 files changed, 30 insertions(+), 42 deletions(-) prompt> git status # On branch master # Your branch is ahead of 'origin/master' by 1 commit. # nothing to commit (working directory clean) prompt>
用您本身的提交替換35f6af6f77f116ef922e3d75bc80a4a466f92650。 3d
您須要確保此存儲庫的其餘用戶沒有獲取不正確的更改,或者嘗試在要刪除的提交之上構建,由於您要回滾歷史記錄。 code
而後你須要'強制'推送舊的參考。 server
git push -f origin last_known_good_commit:branch_name
或者在你的狀況下 rem
git push -f origin cc4b63bebb6:alpha-0.3.0
您可能在遠程存儲庫上設置了receive.denyNonFastForwards
。 若是是這種狀況,那麼您將收到包含短語[remote rejected]
的錯誤。 it
在這種狀況下,您將不得不刪除並從新建立分支。 io
git push origin :alpha-0.3.0 git push origin cc4b63bebb6:refs/heads/alpha-0.3.0
若是這不起做用 - 也許是由於你設置了receive.denyDeletes
,那麼你必須直接訪問存儲庫。 在遠程存儲庫中,您必須執行相似如下管道命令的操做。
git update-ref refs/heads/alpha-0.3.0 cc4b63bebb6 83c9191dea8
我相信你也能夠這樣作:
git checkout alpha-0.3.0 git reset --hard cc4b63bebb6 git push origin +alpha-0.3.0
這與上一個方法很是類似,只是你沒必要在遠程倉庫中搗亂。
git push origin +7f6d03:master
這會將您的回購還原爲提到的提交號
撤消屢次提交git reset --hard 0ad5a7a6(只提供提交SHA1哈希)
撤消上次提交
git reset --hard HEAD~1(對最後一次提交的更改將被刪除)git reset --soft HEAD~1(對最後一次提交的更改將做爲未提交的本地修改提供)