git reflog // 找到要回退的版本的commit id
git reset --hard 84686b426c3a8a3d569ae56b6788278c10b27e5b // 回退版本
首先要回退本地分支:
git reflog // 找到要回退的版本的commit id
git reset --hard 84686b426c3a8a3d569ae56b6788278c10b27e5b // 回退版本
緊接著強制推送到遠端分支:
本地分支回滾後,版本將落後遠端分支,必須使用強制推送覆蓋遠端分支,否則無法推送到遠端分支
git push -f // 將本地master push 到遠端版本庫中, -f 強制覆蓋。
git reflog // 找到要回退的版本的commit id
撤銷到某個版本之前,之前的修改退回到暫存區。soft 和 hard引數的區別就是,hard修改記錄都沒了,soft則會保留修改記錄。
git reset --hard 84686b426c3a8a3d569ae56b6788278c10b27e5b // 回退版本
也可以用
git reset –-soft 72bd6304c3c6e1cb7034114db1dd1b8376a6283a // 回退版本
git stash // 暫存為了安全起見
push到遠端的提交預設是不能修改的,但是一定要修改就要強制覆蓋
git push -f // 將本地master push 到遠端版本庫中, -f 強制覆蓋。
假如你的遠端master分支情況是這樣的:
a1–a2–b1
其中a、b分別代表兩個人,a1、a2、b1代表各自的提交。並且所有人的本地分支都已經更新到最新版本,和遠端分支一致。
$ git status
on branch master
your branch is ahead of 'origin/master' by 2 commits.
(use "git push" to publish your local commits)
nothing to commit, working directory clean
也就是說,你的隊友b的分支並沒有主動回退,而是比遠端分支超前了兩次提交,因為遠端分支回退了
如果一看到介面上顯示的是推送的提示就直接點了推送,回滾的版本就會又被還原,遠端master又變成了:a1 – a2 – b1
1.使用下面的命令來找出你回退版本後覆蓋掉的他的提交,也就是b1那次提交:
git reflog //在master分支找到b1那次提交的commit id,例如:b1
另外一種方法來回退版本
2.把自己的分支回退到那次提交,並且拉個分支:
git checkout tony_branch //先回到自己的分支tony_branch
git reflog //接著在分枝tony_branch看看當前的commit id,例如:0bbbbb
git reset --hard b1 //回到被覆蓋的那次提交b1
git checkout -b tony_backup //拉個分支,用於儲存之前因為回退版本被覆蓋掉的提交b1
git checkout tony_branch //拉完分支,迅速回到自己分支
git reset --hard 0bbbbbb //馬上回到自己分支的最前端0bbbbb head@
3.接著隊友b要把自己的本地master分支和遠端master分支保持一致:
git reset --hard origin/master
執行了上面這條命令後,隊友b的master分支才真正的回滾了,隊友b的本地maser變成了a1
4.接著隊友b要再次合併那個被丟掉的b1提交:
git checkout master //切換到master
git merge tony_backup //再合併一次帶有b1的分支到master
這個時候隊友b的master分支a1 -> b1
5.接著隊友b push一下,你pull拉取也能同步
git push // 隊友b push
git reset --hard origin/master
使用git reset回退公共遠端分支的版本後,需要其他所有人手動用遠端master分支覆蓋本地master分支,顯然,這不是優雅的回退方法
另個乙個命令來回退版本:
git revert head //撤銷最近一次提交
git revert head~1 //撤銷上上次的提交,注意:數字從0開始
git revert 0ffaacc //撤銷0ffaacc這次提交
git revert 命令意思是撤銷某次提交。它會產生乙個新的提交,雖然**回退了,但是版本依然是向前的,所以,當你用revert回退之後,所有人pull之後,他們的**也自動的回退了。
但是,要注意以下幾點:
revert 是撤銷一次提交,所以後面的commit id是你需要回滾到的版本的前一次提交
使用revert head是撤銷最近的一次提交,如果你最近一次提交是用revert命令產生的,那麼你再執行一次,就相當於撤銷了上次的撤銷操作,換句話說,你連續執行兩次revert head命令,就跟沒執行是一樣的
使用revert head~1 表示撤銷最近2次提交,這個數字是從0開始的,如果你之前撤銷過產生了commi id,那麼也會計算在內的。
如果使用 revert 撤銷的不是最近一次提交,那麼一定會有**衝突,需要你合併**,合併**只需要把當前的**全部去掉,保留之前版本的**就可以了.
git revert 命令的好處就是不會丟掉別人的提交,即使你撤銷後覆蓋了別人的提交,他更新**後,可以在本地用 reset 向前回滾,找到自己的**,然後拉一下分支,再回來合併上去就可以找回被你覆蓋的提交了。
使用revert命令,如果不是撤銷的最近一次提交,那麼一定會有衝突
把衝突的**去掉就可以了,然後再提交一次**就可以解決衝突了。
如果你們開發中,忽然發現前面很遠的地方有一次錯誤的合併**,把本來下一次才能發的功能的**合併到了這一次來了,這個時候全體成員都覺得直接回滾比較快,因為他們都有備份,覆蓋了無所謂,這個時候用reset的話對隊友的要求比較高,用revert的話呢要大面積的解決衝突,也很麻煩呀,怎麼辦呢?
這個時候,可以使用簡單粗暴的辦法:
直接從那個錯誤的提交的前一次拉取乙份**放到其他目錄
然後將master**全部刪除,把那份新**方進去
然後提交
雖然這種方法不入流,但是,實踐中發現很好使啊,所以,實踐是檢驗真理的唯一標準。遇到問題還是要靈活應對。
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 會顯示提交日誌,但是嫌輸出過多怎麼辦,...