git reset 命令詳解 git revert命令詳解。

https://blog.csdn.net/wangdawei_/article/details/124543824

git reset 命令詳解
reset命令
介紹
參數
使用
commit還沒有push
commit 已經push
補救
git revert命令
revert說明
舉例
命令


reset命令
介紹
git reset 命令格式爲:
git reset [ --soft | --mixed | --hard ] [< commitid >]
在git的這些命令中git reset是最長常用的,也是最危險的最容易被誤用的。它的主要參數是:soft,mixed,hard它們告訴git,當執行reset是,要對index和working copy做什麼。

參數
soft:
–soft參數只將其它的commit重置到你選定的HEAD,index和working copy中的數據不變。
mixed:
–mixed參數是將HEAD和index重置到你選定的HEAD,而working copy不變。
hard:
–hard是將HEAD,index,working copy同時改變到你規定的commit上。
注意:commitid是每次你要回退到的那個commit的id,它可以通過git log獲取。

使用
commit還沒有push


可以看到我新進行了一次提交,但是還沒有push。此時我發現,我提交錯了,要撤回這次提交。
執行:

git log
1

要退回到錯誤提交的上一次提交。

# 什麼都不寫 默認 --mixed
git reset 0997fab2fa0bfa468cc5c55e56d7df0491869c3a
1
2

可以看到,執行了命令之後版本退回去了,但是修改的內容還在。
如果不想要修改的內容了

# --hard 丟棄修改的內容
git reset --hard 0997fab2fa0bfa468cc5c55e56d7df0491869c3a
1
2

退回到了指定版本,修改的內容也沒了。

commit 已經push
回退的方式同上,執行完上面指定命令後 可以看到,線上代碼還在錯誤提交那裏,本地代碼再18:28提交的那一次那裏。右下方出現小藍點,說明線上代碼比本地代碼更新。


此時如果你push,會提示:

點擊merge就又回去了,完全沒退回去。
此時應該執行:

# 有可能會讓你輸入用戶名、密碼。
git push --force
1
2

 

這樣遠程代碼也就被回退了。

補救
如果我們通過git reset --hard將版本回退到之前的版本了,那我們還是可以補救的,先通過git reflog命令,找到要回退的commitId,然後通過命令:git reset --hard commitId來恢復。

git revert命令
revert說明
  由於某些文章說的說法可能不是很明確,所以導致一部分小袁同志們對revert有一定的誤解,一開始我也很難理解revert到底是幹什麼的。畢竟用於版本回退的都已經有git reset了,爲什麼還要再出一個git revert?
  其實呢,revert它不會想reset一樣”帶你回到“那個你指定的提交,並假裝那個提交之後的後續提交都沒有發生。它是用於單個提交的邏輯否定 -並且單獨提交- 保留後續提交。

舉例
比如:
我們有一個文件裏面寫了:

提交A
提交B
提交C
提交D
1
2
3
4
第一次我們把它改成:

提交A
2提交
提交C
提交D
1
2
3
4
並提交 假設commitId是tijiao1

第二次我們把它改成:

提交A
2提交
提交C
4提交
1
2
3
4
並提交 假設commitId是tijiao2

之後我們進行revert:
git revert tijiao1
此時結果會變成:

提交A
提交B
提交C
4提交
1
2
3
4
所以我們要知道revert是隻撤回指定的提交,並保留後續的提交。
如果你想讓版本直接回退到tijiao1並且取消後續所有提交那你應該使用reset。

命令
revert分兩種,因爲commit分兩種。
一種是常規的 commit,也就是使用 git commit 提交的 commit;
另一種是 merge commit,在使用 git merge 合併兩個分支之後,你將會得到一個新的 merge commit,merge commit 和普通 commit 的不同之處在於 merge commit 包含兩個 parent commit,代表該 merge commit 是從哪兩個 commit 合併過來的。
常規的revert:

//撤回指定的任意提交
git revert commitId
//撤回最後一次提交
git revert HEAD
//撤回倒數第二次提交
git revert HEAD^
1
2
3
4
5
6
merge commit 的revert:加上-m表示撤回哪一個分支的。它的數據是1或2.


//保留第一個分支爲主線
git revert -m 1 commitId
1
2
文章
————————————————

版權聲明:本文爲博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。

原文鏈接:https://blog.csdn.net/wangdawei_/article/details/124543824

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章