reset命令有3種方式:
- git reset –mixed:此為默認(rèn)方式,不帶任何參數(shù)的git reset,即時(shí)這種方式,它回退到某個(gè)版本,只保留源碼,回退commit和index信息
- git reset –soft:回退到某個(gè)版本,只回退了commit的信息,不會(huì)恢復(fù)到index file一級(jí)。如果還要提交,直接commit即可
- git reset –hard:徹底回退到某個(gè)版本,本地的源碼也會(huì)變?yōu)樯弦粋€(gè)版本的內(nèi)容
以下是一些reset的示例:
折疊展開復(fù)制代碼
- #回退所有內(nèi)容到上一個(gè)版本
- git reset HEAD^
- #回退a.py這個(gè)文件的版本到上一個(gè)版本
- git reset HEAD^ a.py
- #向前回退到第3個(gè)版本
- git reset –soft HEAD~3
- #將本地的狀態(tài)回退到和遠(yuǎn)程的一樣
- git reset –hard origin/master
- #回退到某個(gè)版本
- git reset 057d
- #回退到上一次提交的狀態(tài),按照某一次的commit完全反向的進(jìn)行一次commit
- git revert HEAD
如果我們某次修改了某些內(nèi)容,并且已經(jīng)commit到本地倉庫,而且已經(jīng)push到遠(yuǎn)程倉庫了
這種情況下,我們想把本地和遠(yuǎn)程倉庫都回退到某個(gè)版本,該怎么做呢?
前面講到的git reset只是在本地倉庫中回退版本,而遠(yuǎn)程倉庫的版本不會(huì)變化
這樣,即時(shí)本地reset了,但如果再git pull,那么,遠(yuǎn)程倉庫的內(nèi)容又會(huì)和本地之前版本的內(nèi)容進(jìn)行merge
這并不是我們想要的東西,這時(shí)可以有2種辦法來解決這個(gè)問題:
- 直接在遠(yuǎn)程server的倉庫目錄下,執(zhí)行g(shù)it reset –soft 10efa來回退。注意:在遠(yuǎn)程不能使用mixed或hard參數(shù)
- 在本地直接把遠(yuǎn)程的master分支給刪除,然后再把reset后的分支內(nèi)容給push上去,如下:
折疊展開復(fù)制代碼
- #新建old_master分支做備份
- git branch old_master
- #push到遠(yuǎn)程
- git push origin old_master:old_master
- #本地倉庫回退到某個(gè)版本
- git reset –hard bae168
- #刪除遠(yuǎn)程的master分支
- git push origin :master
- #重新創(chuàng)建master分支
- git push origin master
在刪除遠(yuǎn)程master分支時(shí),可能會(huì)有問題,見下:
折疊展開復(fù)制代碼
- $ git push origin :master
- error: By default, deleting the current branch is denied, because the next
- error: 'git clone' won't result in any file checked out, causing confusion.
- error:
- error: You can set 'receive.denyDeleteCurrent' configuration variable to
- error: 'warn' or 'ignore' in the remote repository to allow deleting the
- error: current branch, with or without a warning message.
- error:
- error: To squelch this message, you can set it to 'refuse'.
- error: refusing to delete the current branch: refs/heads/master
- To git@xx.sohu.com:gitosis_test
- ! [remote rejected] master (deletion of the current branch prohibited)
- error: failed to push some refs to 'git@xx.sohu.com:gitosis_test'
這時(shí)需要在遠(yuǎn)程倉庫目錄下,設(shè)置git的receive.denyDeleteCurrent參數(shù)
折疊展開復(fù)制代碼
- git receive.denyDeleteCurrent warn
然后,就可以刪除遠(yuǎn)程的master分支了
雖然說有以上2種方法可以回退遠(yuǎn)程分支的版本,但這2種方式,都挺危險(xiǎn)的,需要謹(jǐn)慎操作……
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點(diǎn)擊舉報(bào)。