版本回退問題,不同場景下,解決方案是不一樣的。總的來說,涉及兩個git命令,即git revert
和git reset
,所以要想掌握版本回退,必須理解這兩個命令到底做了什麼。
理解這兩個命令的區別,參看git revert
與git reset
的比較:
開頭提到版本回退要考慮不同場景,這些場景主要因素有:
場景很多,但解決方案基本有兩種方式:
2.1 git revert方式
//撤消某乙個提交如c1(可以跟多個提交)
$ git revert c1
//然後再執行 `git push` 同步到遠端倉庫,達到回退的效果。
$ git push
這種方式需要注意乙個問題,如果要回退到的提交與當前提交之間存在合併提交;
如c1
是乙個合併提交。因為合併提交有兩個父提交,所以執行git revert
的時候必須指定回退到哪個版本上。
如當前分支是dev1
,c1
是將dev2
合併到dev1
,即命令git merge dev2
產生的合併提交。
則執行git revert c1
時,必須給定-m
選項,選項後面可以是1
或2
,這裡1
指的是dev1
,2
指的是dev2
。
$ git revert c1 -m 1
注意:
2.2 git reset方式
這種方式要考慮本地提交是否已經推送到遠端倉庫。
這種場景很簡單,因為所有操作只影響你自己本地的倉庫,不需要考慮對團隊成員的影響。
所以直接重置到你想要的提交如c1
就可以了,只需要考慮不同選項--soft
,--mixed
和--hard
的影響。
$
gitreset--
hard
c1
所以,這種場景下,只能將本地倉庫回退到想要的版本後,再按本地版本新建乙個遠端分支,這個遠端分支的版本與本地倉庫回退後的版本一致,然後團隊成員在拉取這個新的遠端分支,以達到遠端倉庫版本回退的效果。
如果要想使新的遠端倉庫版本分支名與原來一樣,則只能刪除遠端分支,再新建乙個同名分支後,並要求團隊成員刪除本地倉庫分支,重新抓取!
設要回退遠端倉庫master
分支的版本,當前在master
分支下,這種解決方案的乙個操作步驟如下:
// 本地新建old_master分支做備份
$ git branch old_master
// 將備份分支push到遠端倉庫
$ git push origin old_master:old_master
// 本地倉庫回退到某個版本如 bae168
$ git reset –-hard bae168
// 刪除遠端倉庫的master分支
$ git push origin :master
// 重新建立遠端倉庫master分支
git push origin master
最後,要求所有成員刪除本地倉庫master
分支,重新抓取避免執行git push
後,又將遠端版本更新。
首先應當盡量避免出現需要回退**版本的情況,如果不得不回退版本,則建議使用第二種,即2.2 git reset方案,這種方案,乾脆,利落,明確地知道自己在做什麼,且需要鮮明地周知團隊我們需要回退版本!當然,如果只是在本地倉庫(未同步到遠端倉庫)反悔,那就是本地倉庫自己的事情了。
Git版本回退
1 檢視檔案修改歷史 git log 返回的是commit後的操作記錄 git log pretty oneline 也可以使用這個命令格式化日誌輸出 2 版本回退 git reset hard head 回退到上乙個版本 git reset hard head 100 會退到第100個版本,例如現...
git版本回退
先說今天遇到的問題,看到乙個config.php的配置檔案一直在修改的狀態下,但是和遠端的config.php是不一致的,我不需要提交它,但是看它在 modified的狀態下,很不爽,想刪除它,git rm config.php,然後git push了下,結果不僅把本地的config.php乾掉了,...
git版本回退
把修改後的版本通過命令提交到版本庫 第一步 git add 檔名 字尾 第二步 git commit m commit id 但是有時候想回去怎麼辦呢?當然萬能的git給我們提供了方法的。我們先檢視一下最近到最遠的提交紀錄操作如下 在命令航輸入 git log 會顯示提交日誌,但是嫌輸出過多怎麼辦,...