git遠程倉庫回退

(一)退回到某個commit -- reset

1. git log (找到你想要回退的版本id,將它複製下來)git

 

2. git reset --hard 版本id (本地回退到目標版本)gitlab

 

3.git push --force (推送到遠程倉庫,實現回退)fetch

 

 

 

(二)只想讓之前某個commit的代碼回退,而在它以後的代碼都不回退 -- revert

 

1. git log (找到你想要刪除的版本id,將它複製下來)3d

 

2. git revert 版本id (本地回退到目標版本)blog

 

3.git push --force (推送到遠程倉庫,實現回退)it

 

(三)推薦使用revert進行遠程倉庫回退

reset與revert最大的區別在於:revert是新提交一個commit來撤回代碼,而reset只是回到某個版本的代碼commit原理

雖然二者都能回退到你想要的代碼,可是對於遠程倉庫,當使用reset回退,其餘同事的代碼pull release拉最新代碼,拉取到的結果並不會回退你的代碼,由於pull是fetch與merge的結果,對於已有的commit進行merge是沒有效果的。request

而revert是新的commit,此時merge新的commit就能回退到你的代碼im

 

(四)進行遠程分支push --force時須要進行備份再push

git branch backupd3

 

 

 

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

場景

提測的代碼(已合入release),決定暫時不上生產,須要回退遠程倉庫的代碼

舉例以下:B與D的代碼須要回退,A爲線上版本,C爲其餘同事提交的代碼

 

 

對一個文件新增b,c,d的三個修改,分別提交

 

 

目標是回退BD剩下AC

 

 

 

回退遠程倉庫代碼的五種途徑

2.1 手工修改最新版本代碼

直接從最新的版本修改代碼,修改到咱們想要版本,而後再提交上去,也就是手工回退。在這個例子中就是直接刪除‘bd’後提交

 

 

 

手工改代碼很容易出錯

(1)     沒有回退全部須要回退的代碼

(2)     刪除了不須要回退的代碼

 

2.2 本地倉庫reset後強推到遠程倉庫,其餘同事需手動reset

存在問題:

(1)     須要回退的代碼夾雜了其餘同事的commit,直接reset會把其餘同事的代碼也刪除掉

 

 

(2) 遠程倉庫後退後,須要其餘同事未回退的同事手動reset它們的本地倉庫,不然其餘同事提交會把刪除的代碼再次提交上去

 

 

 

 

 

2.3 拷貝release,遠程倉庫刪除release分支後再覆蓋

與2.2 reset類似:

從要刪除的版本的前一個版本拉一個拷貝分支,而後在遠程倉庫刪掉release分支,再將拷貝分支推到遠程release。

存在問題:須要讓其餘同事(本地版本領先於回退後的遠程倉庫版本)重拉項目或回退

 

2.4本地倉庫revert後強推到遠程倉庫

Revert做用是消除一個commit,它的原理是新建一個commit反向修改目標commit

Revert與reset最主要的區別:revert是去除一個commit,reset是回到某個版本

 

 

 

對於此場景適用revert,咱們只要把B與D的提交revert掉,就能達到目的

 

 

Revert實現的回退,不須要其餘同事重拉項目或者手動回退項目

 

 

 

2.5 在gitlab上執行revert

須要注意的是在gitlab上revert,必須是無衝突的時候才成功,在此場景下有衝突就失敗了

 

 

總結

(1)    回到某個版本,使用reset;消除某個commit,使用revert

(2)     使用git reset實現回退到某個版本,須要讓其餘同事也回退或者重拉項目

(3)     Revert有可能要手動處理衝突,reset沒有這個問題

(4)     對release分支使用git push –force(強制推送)有風險,應該進行備份;或者對本身的分支進行revert,而後提merge request合併到release

(5)     若是沒有revert衝突,建議在gitlab上執行revert

相關文章
相關標籤/搜索