git撤銷各種狀態下的操作

2021-09-22 17:13:28 字數 1980 閱讀 1894

使用git時會出現各種各樣的問題,下面是幾種情況下怎麼反悔的操作

git checkout -- file

git reset head file

或git rm --cached file

git reset --hard commit_id/head^n

1,git revert的方式

1)git revert commit_id   //將要撤銷的提交revert為一次新的提交,這樣不僅提交被撤銷了,而且本地分支也比遠端分支多一次提交

2)git push origin master //推送到遠端

這種方式是最方便的,但缺點是多了2次無用的commit,使整個分支的commit不再整潔。

2,如果遠端倉庫不是使用git init --bare建立的裸倉庫(裸倉庫無法回滾提交),而是乙個普通倉庫(通過git init建立),那麼你可以登入到遠端伺服器,然後回滾遠端分支,然後再把本地分支回滾。

3,可刪除遠端分支,然後回滾本地分支,然後將本地分支push到origin

1)git branch ***_backup                                //建立備份分支

2)git push origin ***_backup:***_backup  //將備份分支推送到origin

3)git checkout  ***                                           //切回要撤銷修改的分支

4)git reset --hard commit_id                          //撤銷本地commit

5)git push origin :***                                      //刪除遠端***分支

6)git push origin ***:***                                //將本地撤銷修改後的***分支推送到origin

7)git branch -d ***_backup                          //刪除本地備份分支

git push origin :***_backup                      //刪除遠端備份分支

上述步驟5執行時可能會出現錯誤,如下:

尤其是遠端倉庫是在github或oschina上時,因為這些**中將某分支設定成了當前分支,而刪除當前分支是不允許的,所以要在這些**的設定中切換當前分支為其它分支,然後再此執行步驟5.

4,方法3中,如果是自己建立的倉庫,預設分支是master,我沒找到修改預設分支的辦法,master分支也就無法刪除,方法4也就沒用了。但有另一種方法可以解決問題

1)登入伺服器,備份**倉庫

mv demo.git demo_backup.git

2)新建乙個空的demo.git       

git init --bare demo.git

3)通過回滾,修復本地提交到正常狀態

git reset --hard 提交id

4)推送本地的master分支到伺服器的demo.git

git push remote master:master

這樣的做法,可以儲存之前的提交記錄,是比較好的修復方式;這種方法比較適合修復出現**覆蓋的情況

如果中間出現問題,請通過demo_backup.git找回**倉庫

錯誤的做法

1,直接reset本地提交,然後push到origin

這種做法是錯誤的,git會報錯,原因是遠端倉庫中該分支比本地分支多n次commit,只能先pull,再push。而如果先pull的話,那本地又變成和遠端一樣了,是解決不了問題的。

如何高效撤銷Git管理的檔案在各種狀態下的更改

企業中我們一般採用分布式版本管理工具git來進行版本管理,在團隊協作的過程中,我們難免會遇到誤操作,需要撤銷更改的情況,那麼我們怎麼高效的進行撤銷修改呢?對於還未提交到暫存區的 怎麼高效撤銷更改呢?對於已經提交到暫存區的 怎麼取消add操作?對於已經提交到本地倉庫,還沒有提交到遠端倉庫的 怎麼進行高...

如何高效撤銷Git管理的檔案在各種狀態下的更改

企業中我們一般採用分布式版本管理工具git來進行版本管理,在團隊協作的過程中,我們難免會遇到誤操作,需要撤銷更改的情況,那麼我們怎麼高效的進行撤銷修改呢?對於還未提交到暫存區的 怎麼高效撤銷更改呢?對於已經提交到暫存區和本地倉庫,還沒有提及到遠端倉庫的 怎麼進行高效撤銷更改呢?還有對於已經提交到遠端...

Git各種撤銷操作

git reset head 取消add操作並保留修改 git checkout 若繼續該命令,則會刪除掉剛剛的修改內容git reset soft 可以回退到某個commit並儲存之前的修改 從git log中取,取前7位即可 git reset hard 回退到某個commit不保留之前的修改p...