成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何優(yōu)雅的進行版本回退

運維 系統(tǒng)運維
在版本迭代開發(fā)過程中,相信很多人都會有過錯誤提交的時候。這種情況下,菜鳥程序員可能就會虎驅一震,緊張得不知所措。而資深程序員就會微微一笑,摸一摸锃亮的腦門,然后默默的進行版本回退。

在版本迭代開發(fā)過程中,相信很多人都會有過錯誤提交的時候(至少良許有過幾次這樣的體驗)。這種情況下,菜鳥程序員可能就會虎驅一震,緊張得不知所措。而資深程序員就會微微一笑,摸一摸锃亮的腦門,然后默默的進行版本回退。

[[339837]]

對于版本的回退,我們經(jīng)常會用到兩個命令:

  • git reset
  • git revert

那這兩個命令有何區(qū)別呢?先不急,我們后文詳細介紹。

git reset

假如我們的系統(tǒng)現(xiàn)在有如下幾個提交:

其中:A 和 B 是正常提交,而 C 和 D 是錯誤提交。現(xiàn)在,我們想把 C 和 D 回退掉。而此時,HEAD 指針指向 D 提交(5lk4er)。我們只需將 HEAD 指針移動到 B 提交(a0fvf8),就可以達到目的。

只要有 git 基礎的朋友,一定會想到 git reset 命令。完整命令如下:

  1. git reset --hard a0fvf8 

命令運行之后,HEAD 指針就會移動到 B 提交下,如下圖示:

而這個時候,遠程倉庫的 HEAD 指針依然不變,仍在 D 提交上。所以,如果直接使用 git push 命令的話,將無法將更改推到遠程倉庫。此時,只能使用 -f 選項將提交強制推到遠程倉庫:

  1. git push -f 

采用這種方式回退代碼的弊端顯而易見,那就是會使 HEAD 指針往回移動,從而會失去之后的提交信息。將來如果突然發(fā)現(xiàn),C 和 D 是多么絕妙的想法,可它們已經(jīng)早就消失在歷史的長河里了。

而且,有些公司(比如良許的公司)明令禁止使用 git reset 命令去回退代碼,原因與上述一樣。所以,我們需要找到一個命令,既可以回退代碼,又可以保存錯誤的提交。這時,git revert 命令就派上用場了。

git revert

git revert的作用通過反做創(chuàng)建一個新的版本,這個版本的內容與我們要回退到的目標版本一樣,但是HEAD指針是指向這個新生成的版本,而不是目標版本。

使用 git revert 命令來實現(xiàn)上述例子的話,我們可以這樣做:先 revert D,再 revert C (有多個提交需要回退的話需要由新到舊進行 revert):

  1. git revert 5lk4er 
  2. git revert 76sdeb 

這里會生成兩個新有提交:D' 和 C',如下圖示:

這里只有兩個提交需要 revert,我們可以一個個回退。但如果有幾十個呢?一個個回退肯定效率太低而且容易出錯。我們可以使用以下方法進行批量回退:

  1. git revert OLDER_COMMIT^..NEWER_COMMIT 

這時,錯誤的提交 C 和 D 依然保留,將來進行甩鍋的時候也有依可循。而且,這樣操作的話 HEAD 指針是往后移動的,可以直接使用 git push 命令推送到遠程倉庫里。而這種做法,正是企業(yè)所鼓勵的。

我們再舉個更難一點的例子。

假如現(xiàn)在有三個提交,但很不巧的是,那個錯誤的提交剛好位于中間。如下圖示:

這時,直接使用 git reset 命令將 HEAD 指針重置到 A 提交顯然是不行的,因為 C 提交是正確的,需要保留的。先把 C 提交 及 B 批次全部回退,再使用 cherry-pick 命令將 C 提交重新再生成一個新的提交 C'',這樣就實現(xiàn)了將 B提交回退的需求。完整的過程如下:

本文授權轉載自公眾號「良許Linux」。良許,世界500強外企Linux開發(fā)工程師,公眾號里分享大量Linux干貨,歡迎關注!

 

責任編輯:趙寧寧 來源: 今日頭條
相關推薦

2019-01-21 09:28:32

版本命令程序員

2016-08-22 11:46:53

GitLinux開源

2022-09-15 07:31:49

Spring攔截器注解

2024-12-06 09:27:28

2021-07-07 07:47:10

瀏覽器CSS兼容

2022-09-07 09:19:49

Docker健康檢查

2022-05-10 10:09:12

KubernetesPod網(wǎng)絡抓包

2022-09-15 15:31:50

AndroidHTTPS抓包

2021-06-10 09:05:43

Linux命令大文件切割

2023-03-28 08:07:12

2022-08-03 07:07:10

Spring數(shù)據(jù)封裝框架

2010-06-02 14:16:18

SVN版本控制

2015-11-26 10:53:45

LinuxWindowsMac OS

2021-01-19 10:35:49

JVM場景函數(shù)

2017-07-26 11:32:50

NETRabbitMQ系統(tǒng)集成

2019-11-04 14:20:47

APP版本移動端命名

2021-11-10 10:03:18

SpringBootJava代碼

2023-06-13 07:50:49

Gopher格式化時間

2022-10-11 10:47:04

UserTaskSQL查詢

2020-10-16 11:48:06

服務器系統(tǒng)運維
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 五月婷婷婷 | 欧美成人h版在线观看 | 亚洲一区二区三区四区五区午夜 | 久久久www成人免费精品张筱雨 | 亚洲色图第一页 | 91久久精品日日躁夜夜躁国产 | 欧美日韩免费 | av资源中文在线天堂 | 天堂网中文字幕在线观看 | 一级毛片色一级 | 日本在线一二 | 国产免费一级一级 | 国产一区二区三区四区在线观看 | 久操伊人 | 一级欧美黄色片 | av在线一区二区三区 | 激情五月婷婷综合 | 久久久久久国产精品 | 日本一二区视频 | 国产九一精品 | 中文字幕 亚洲一区 | 亚洲午夜精品一区二区三区他趣 | 96av麻豆蜜桃一区二区 | 三级黄色片在线观看 | 日韩不卡在线 | 麻豆久久久9性大片 | 四虎影视一区二区 | 久久成人国产精品 | 国产一卡二卡三卡 | 综合国产 | 久久精品视频12 | 天天操夜夜爽 | 日韩欧美中文字幕在线观看 | 亚洲成人一区 | h视频网站在线观看 | 涩涩操 | 欧美一级在线免费 | 一区二区三区网站 | 国产一区精品在线 | 亚洲国产精品久久 | 精品国产一区二区三区四区在线 |