日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

git 回滚 add 操作_炫技!git 优雅回滚一次错误的合并操作!

發布時間:2023/12/10 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 git 回滚 add 操作_炫技!git 优雅回滚一次错误的合并操作! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
點擊藍色小字關注!?關注一下你就不會有bug!合并操作

相對于常規的 commit,當使用 git merge 合并兩個分支的時候,你會得到一個新的 merge commit。

當我們 git show 的時候會出現類似信息:

1commit?6dd0e2b9398ca8cd12bfd1faa1531d86dc41021a
2Merge:?d24d3b4?11a7112
3Author:?test?
4...............

Merge: d24d3b4 11a7112 這行表明了兩個分支在合并時,所處的 parent 的版本線索。

比如在上述項目中我們開出了一個 dev 分支并做了一些操作,現在分支的樣子變成了這樣:

1init?->?v1?->?v2?->?v3??(master)
2???????????\??????
3????????????d1?->?d2??(dev)

當我們在 dev 開發的差不多了:

1#git:(dev)
2git?checkout?master?
3#git:(master)
4git?merge?dev

這個時候形成了一個 Merge Commit faulty merge:

1init?->?v1?->?v2?->?v3?--?faulty?merge??(master)
2???????????\????????????/
3????????????d1??-->??d2??(dev)

此時 faulty merge 有兩個 parent 分別是 v3 和 d2。

回滾錯誤的合并

這個 merge 之后還繼續在 dev 開發,另一波人也在從別的分支往 master 合并代碼。變成這樣:

1init?->?v1?->?v2?->?v3?--?faulty?merge?->?v4?->?vc3?(master)
2????????\??\????????????/?????????????????????/
3?????????\??d1??-->??d2??-->?d3?-->?d4??(dev)/
4??????????\?????????????????????????????????/?
5???????????c1??-->??c2?-------------------c3?(other)

這個時候你發現, 妹的,上次那個 merge 好像給共享分支 master 引入了一個 bug。這個 bug 導致團隊其他同學跑不通測試,或者這是一個線上的 bug,如果不及時修復老板要罵街了。

這個時候第一想到的肯定是回滾代碼,但怎么回滾呢。用 reset?不現實,因為太流氓不說,還會把別人的代碼也干掉,所以只能用 revert。而 revert 它最初被設計出來就是干這個活的。

怎么操作呢?首先想到的是上面所說的 git revert ,但是貌似不太行。

1git?revert?faulty?merge
2error:?Commit?faulty?merge?is?a?merge?but?no?-m?option?was?given.
3fatal:?revert?failed

這是因為試圖撤銷兩個分支的合并的時候 Git 不知道要保留哪一個分支上的修改。所以我們需要告訴 git 我們保留那個分支 m 或者 mainline。

1git?revert?-m?1?faulty?merge

-m 后面帶的參數值可以是 1 或者 2,對應著 parent 的順序。

上面列子:1 代表 v3,2 代表 d2。

所以該操作會保留 master 分支的修改,而撤銷 dev 分支合并過來的修改。提交歷史變為:

1init?->?v1?->?v2?->?v3?--?faulty?merge?->?v4?->?vc3?->?rev3?(master)
2??????????\????????????/?????????????????????
3???????????d1??-->??d2??-->?d3?-->?d4??(dev)

此處 rev3 是一個常規 commit,其內容包含了之前在 faulty merge 撤銷掉的 dev 合并過來的 commit 的(反操作)的合集。

到這個時候還沒完,我們要記住,因為我們拋棄過之前 dev 合并過來的 commit,下次 dev 再往 master 合并,之前拋棄過的其實是不包含在里面的。那怎么辦呢?

恢復之前的回滾

很簡單,我們把之前 master 那個帶有反操作的 commit 給撤銷掉不就好了?

1git?checkout?master
2git?revert?rev3
3git?merge?dev

此時提交歷史變成了:

1init?->?v1?->?v2?->?v3?--?faulty?merge?->?v4?->?vc3?->?rev3?->?rev3`?->?final?merge?(master)
2??????????\????????????/???????????????????????????????????????????????/
3???????????d1??-->??d2??-->?d3?-->?d4??--------------------------------(dev)
你學會這個騷操作了嗎?評論區見!▼往期精彩回顧▼臥槽!Java 長整數的這個坑你踩過嗎?唉,因為 Java 的裝逼簡化炫技寫法背鍋了!

點擊左下角閱讀原文查看歷史經典技術問題匯總,看完順手走一波PYQ呀~

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的git 回滚 add 操作_炫技!git 优雅回滚一次错误的合并操作!的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。