區別:
reset:回退到某一個歷史版本;(回滾到某個commit)
revert:重做某一個歷史版本(回滾某個 commit)
假如有三個提交,A-->B-->C(head-->master):
1、reset B變爲:A-->B;
2、revert B變爲:A-->C。
reset命令介紹(原文)
當要回退到某一次提交的狀態時,可以使用git reset命令。
git reset [--soft | --mixed | --hard] [<commit>]
其中,<commit>是指commit的hashcode。(可以使用git log查看hashcode)
也可以使用HEAD代替<commit>,命令爲
git reset [--soft | --mixed | --hard] [HEAD]
補充:
1、上一次commit(倒數第二次):HEAD^ 或者 HEAD~1
2、上上一次commit(倒數第三次):HEAD^^ 或者 HEAD~2
3、--soft僅將head指針指向歷史版本,不會改變工作區和暫存區的內容
4、--mixed將head指針指向歷史版本,且用歷史版本的暫存區覆蓋當前暫存區(默認的選項)
5、--hard將head指針指向歷史版本,同時覆蓋工作區和暫存區的內容(比較危險慎用)
回滾具體情況的使用:(原文)
1、已修改,未git add
git checkout . (git checkout .和git add .是一對反義詞)
2、已git add,未commit(到了暫存區)
git reset 先用Head指針覆蓋當前的暫存區內容
git checkout . 再用暫存區內容覆蓋工作區內容
或者
git reset --hard 直接使用head覆蓋當前暫存區和工作區
3、已經commit,未push
git reset --mixed HEAD^ 覆蓋本地的暫存區
git checkout .
或者
git reset --hard HEAD^
(git reset --soft HEAD^ 相當於回退到倒數第二次commit,並且已git add,未commit)
4、已經push
對於已經提交到遠端的公共分支比如master上的commit只能用revert來進行回退操作
revert命令介紹
撤銷某次操作(刪除指定的commit操作的內容),此次操作之前和之後的commit和history都會保留,並且把這次撤銷作爲一次最新的提交。
撤銷最新的提交:git revert HEAD
撤銷最新的三次提交:git revert HEAD~3...HEAD
說明:
git revert X...Y:
X...Y 代表一個左開右閉區間(X,Y],不包括X,包括Y. 其中Y爲起點commit,X爲終點commit的下一個commit。