git的版本回退探索
簡介
今天改完代碼匆忙提交,上線發現有問題,那怎麽辦?廢話,趕緊回滾,那怎麽回滾,開始用git reset [--soft | --mixed | --hard 命令,但這命令真的能達到我預期的效果嗎? 每個參數後面的意思又是什麽?讓人一頭霧水,然後用了 reset --hard命令,並沒有達到預期的效果。現在總結下
1、git相關術語
- HEAD
這是當前分支版本頂端的別名,也就是在當前分支你最近的一個提交
- Index
index也被稱為staging area,是指一整套即將被下一個提交的文件集合。他也是將成為HEAD的父親的那個commit
- Working Area
working Area代表你正在工作的那個文件集
1、沒有push
這種情況發生在你的本地代碼倉庫,可能你add ,commit 以後發現代碼有點問題,準備取消提交,用到下面命令
reset
git reset [--soft | --mixed | --hard
# --soft # 只還原 HEAD
# --mixed # 還原 HEAD、Index # 默認參數
# --hard # 還原 HEAD、Index、Working Directory
2、已經push
git revert HEAD #撤銷前一次 commit git revert HEAD^ #撤銷前前一次 commitgit revert commitId #(比如:fa042ce57ebbe5bb9c8db709f719cec2c58ee7ff)撤銷指定的版本,撤銷也會作為一次提交進行保存。
git revert是提交一個新的版本,將需要revert的版本的內容再反向修改回去,
版本會遞增,不影響之前提交的內容
git revert 撤銷 某次操作,此次操作之前和之後的commit和history都會保留,並且把這次撤銷
作為一次最新的提交
2.1、example
假設按時間順序依次有commit1, commit2, commit3,commit4,對應有version1, version2, version3, version4四個狀態。現在你push了version4線上有問題,想要回退到version3狀態,只需要 執行
git revert HEAD
註意:這樣線上的代碼還是不會變,但是本地的代碼狀態回到了 version3,你再commit5,push到線上,這樣線上的代碼就跟version3一樣了。
參考:http://blog.csdn.net/secretx/article/details/51461972
git的版本回退探索