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

我使用 Git cherry-pick 命令的 3 個(gè)理由

開源
“遴選”可以解決 Git 倉庫中的很多問題。以下是用 git cherry-pick 修復(fù)錯(cuò)誤的三種方法。

在版本控制系統(tǒng)中摸索前進(jìn)是一件很棘手的事情。對于一個(gè)新手來說,這可能是非常難以應(yīng)付的,但熟悉版本控制系統(tǒng)(如 Git)的術(shù)語和基礎(chǔ)知識(shí)是開始為開源貢獻(xiàn)的第一步。

熟悉 Git 也能幫助你在開源之路上走出困境。Git 功能強(qiáng)大,讓你感覺自己在掌控之中 —— 沒有哪一種方法會(huì)讓你無法恢復(fù)到工作版本。

[[393739]]

這里有一個(gè)例子可以幫助你理解“遴選cherry-pick”的重要性。假設(shè)你已經(jīng)在一個(gè)分支上做了好幾個(gè)提交,但你意識(shí)到這是個(gè)錯(cuò)誤的分支!你現(xiàn)在該怎么辦?你現(xiàn)在要做什么?要么在正確的分支上重復(fù)所有的變更,然后重新提交,要么把這個(gè)分支合并到正確的分支上。等一下,前者太過繁瑣,而你可能不想做后者。那么,還有沒有辦法呢?有的,Git 已經(jīng)為你準(zhǔn)備好了。這就是“遴選”的作用。顧名思義,你可以用它從一個(gè)分支中手工遴選一個(gè)提交,然后轉(zhuǎn)移到另一個(gè)分支。

使用遴選的原因有很多。以下是其中的三個(gè)原因。

避免重復(fù)性工作

如果你可以直接將相同的提交復(fù)制到另一個(gè)分支,就沒有必要在不同的分支中重做相同的變更。請注意,遴選出來的提交會(huì)在另一個(gè)分支中創(chuàng)建帶有新哈希的新提交,所以如果你看到不同的提交哈希,請不要感到困惑。

如果您想知道什么是提交的哈希,以及它是如何生成的,這里有一個(gè)說明可以幫助你。提交哈希是用 SHA-1 算法生成的字符串。SHA-1 算法接收一個(gè)輸入,然后輸出一個(gè)唯一的 40 個(gè)字符的哈希值。如果你使用的是 POSIX 系統(tǒng),請嘗試在您的終端上運(yùn)行這個(gè)命令:

  1. $ echo -n "commit" | openssl sha1 

這將輸出一個(gè)唯一的 40 個(gè)字符的哈希值 4015b57a143aec5156fd1444a017a32137a3fd0f。這個(gè)哈希代表了字符串 commit。

Git 在提交時(shí)生成的 SHA-1 哈希值不僅僅代表一個(gè)字符串。它代表的是:

  1. sha1( 
  2.     meta data 
  3.         commit message 
  4.         committer 
  5.         commit date 
  6.         author 
  7.         authoring date 
  8.     Hash of the entire tree object 

這就解釋了為什么你對代碼所做的任何細(xì)微改動(dòng)都會(huì)得到一個(gè)獨(dú)特的提交哈希值。哪怕是一個(gè)微小的改動(dòng)都會(huì)被發(fā)現(xiàn)。這是因?yàn)?Git 具有完整性。

撤銷/恢復(fù)丟失的更改

當(dāng)你想恢復(fù)到工作版本時(shí),遴選就很方便。當(dāng)多個(gè)開發(fā)人員在同一個(gè)代碼庫上工作時(shí),很可能會(huì)丟失更改,最新的版本會(huì)被轉(zhuǎn)移到一個(gè)陳舊的或非工作版本上。這時(shí),遴選提交到工作版本就可以成為救星。

它是如何工作的?

假設(shè)有兩個(gè)分支:feature1 和 feature2,你想把 feature1 中的提交應(yīng)用到 feature2。

在 feature1 分支上,運(yùn)行 git log 命令,復(fù)制你想遴選的提交哈希值。你可以看到一系列類似于下面代碼示例的提交。commit 后面的字母數(shù)字代碼就是你需要復(fù)制的提交哈希。為了方便起見,您可以選擇復(fù)制前六個(gè)字符(本例中為 966cf3)。

  1. commit 966cf3d08b09a2da3f2f58c0818baa37184c9778 (HEAD -> master) 
  2. Author: manaswinidas <me@example.com> 
  3. Date:   Mon Mar 8 09:20:21 2021 +1300 
  4.    add instructions 

然后切換到 feature2 分支,在剛剛從日志中得到的哈希值上運(yùn)行 git cherry-pick:

  1. $ git checkout feature2 
  2. $ git cherry-pick 966cf3. 

如果該分支不存在,使用 git checkout -b feature2 來創(chuàng)建它。

這里有一個(gè)問題。你可能會(huì)遇到下面這種情況:

  1. $ git cherry-pick 966cf3 
  2. On branch feature2 
  3. You are currently cherry-picking commit 966cf3d. 
  4. nothing to commit, working tree clean 
  5. The previous cherry-pick is now empty, possibly due to conflict resolution. 
  6. If you wish to commit it anyway, use: 
  7.    git commit --allow-empty 
  8. Otherwise, please use 'git reset' 

不要驚慌。只要按照建議運(yùn)行 git commit --allow-empty:

  1. $ git commit --allow-empty 
  2. [feature2 afb6fcb] add instructions 
  3. Date: Mon Mar 8 09:20:21 2021 +1300 

這將打開你的默認(rèn)編輯器,允許你編輯提交信息。如果你沒有什么要補(bǔ)充的,可以保存現(xiàn)有的信息。

就這樣,你完成了你的第一次遴選。如上所述,如果你在分支 feature2 上運(yùn)行 git log,你會(huì)看到一個(gè)不同的提交哈希。下面是一個(gè)例子:

  1. commit afb6fcb87083c8f41089cad58deb97a5380cb2c2 (HEAD -&gt; feature2) 
  2. Author: manaswinidas &lt;[me@example.com][4]&gt; 
  3. Date:   Mon Mar 8 09:20:21 2021 +1300 
  4.    add instructions 

不要對不同的提交哈希感到困惑。這只是區(qū)分 feature1 和 feature2 的提交。

遴選多個(gè)提交

但如果你想遴選多個(gè)提交的內(nèi)容呢?你可以使用:

  1. git cherry-pick <commit-hash1> <commit-hash2>... <commit-hashn> 

請注意,你不必使用整個(gè)提交的哈希值,你可以使用前五到六個(gè)字符。

同樣,這也是很繁瑣的。如果你想遴選的提交是一系列的連續(xù)提交呢?這種方法太費(fèi)勁了。別擔(dān)心,有一個(gè)更簡單的方法。

假設(shè)你有兩個(gè)分支:

  • feature1 包括你想復(fù)制的提交(從更早的 commitA 到 commitB)。
  • feature2 是你想把提交從 feature1 轉(zhuǎn)移到的分支。

然后:

  • 輸入 git checkout
  • 獲取 commitA 和 commitB 的哈希值。
  • 輸入 git checkout
  • 輸入 git cherry-pick ^.. (請注意,這包括 commitA 和 commitB)。
  • 如果遇到合并沖突,像往常一樣解決,然后輸入 git cherry-pick --continue 恢復(fù)遴選過程。

重要的遴選選項(xiàng)

以下是 Git 文檔 中的一些有用的選項(xiàng),你可以在 cherry-pick 命令中使用。

  • -e、--edit:用這個(gè)選項(xiàng),git cherry-pick 可以讓你在提交前編輯提交信息。
  • -s、--signoff:在提交信息的結(jié)尾添加 Signed-off by 行。更多信息請參見 git-commit(1) 中的 signoff 選項(xiàng)。
  • -S[]、--pgg-sign[=]:這些是 GPG 簽名的提交。keyid 參數(shù)是可選的,默認(rèn)為提交者身份;如果指定了,則必須嵌在選項(xiàng)中,不加空格。
  • --ff:如果當(dāng)前 HEAD 與遴選的提交的父級(jí)提交相同,則會(huì)對該提交進(jìn)行快進(jìn)操作。

下面是除了 --continue 外的一些其他的后繼操作子命令:

  • --quit:你可以忘記當(dāng)前正在進(jìn)行的操作。這可以用來清除遴選或撤銷失敗后的后繼操作狀態(tài)。
  • --abort:取消操作并返回到操作序列前狀態(tài)。

下面是一些關(guān)于遴選的例子:

  • git cherry-pick master:應(yīng)用 master 分支頂端的提交所引入的變更,并創(chuàng)建一個(gè)包含該變更的新提交。
  • git cherry-pick master~4 master~2':應(yīng)用master` 指向的第五個(gè)和第三個(gè)最新提交所帶來的變化,并根據(jù)這些變化創(chuàng)建兩個(gè)新的提交。

感到不知所措?你不需要記住所有的命令。你可以隨時(shí)在你的終端輸入 git cherry-pick --help 查看更多選項(xiàng)或幫助。

 

責(zé)任編輯:趙寧寧 來源: Linux中國
相關(guān)推薦

2021-04-14 14:58:35

Git遴選軟件開發(fā)

2020-10-05 21:21:35

命令開發(fā)cherry-pick

2021-04-18 18:03:06

工作樹遠(yuǎn)程版本

2013-06-18 09:53:50

Git開源

2022-05-25 16:38:42

sudoLinuxroot 賬戶

2020-06-04 08:15:53

Kubernetes容器PaaS

2011-03-02 09:34:58

AppFuse

2024-06-24 08:00:00

網(wǎng)絡(luò)安全WAFWeb應(yīng)用程序防火墻

2022-10-11 16:53:22

GitLinux

2020-10-24 08:00:56

前端開發(fā)Web

2015-10-26 13:16:11

FreeMarkerJSP

2015-10-28 10:04:29

FreeMarkerJSP

2016-11-09 15:11:17

安全云存儲(chǔ)云服務(wù)

2012-11-21 10:01:35

RubyWeb

2021-02-05 17:47:53

GraphQLAPI開發(fā)

2020-12-07 09:56:34

GitLinux版本控制系統(tǒng)

2024-07-26 08:59:33

2017-05-23 15:00:06

PythonDjangoadmin

2020-10-27 07:31:35

GitGit RevertGit Reset

2015-12-11 15:39:54

華為
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 亚洲成人一区二区 | 黄色片免费看 | 亚洲一区视频在线 | 麻豆一区一区三区四区 | 求毛片| 亚洲一区综合 | 天堂素人约啪 | 欧美黑人国产人伦爽爽爽 | 日韩欧美一区二区三区四区 | 天天干天天操天天爽 | 羞羞网站在线观看 | 欧美一级黄色片 | 999久久久久久久久 国产欧美在线观看 | 亚洲综合国产 | 免费特级黄毛片 | 欧美三级在线 | 欧美黑人体内she精在线观看 | 日韩一区在线播放 | 精品国产一区二区三区性色av | 国产精品爱久久久久久久 | 五月天婷婷综合 | 国产精品综合视频 | 人人种亚洲 | www.99re | 国产一区二区精品在线观看 | 欧美精品福利视频 | 不卡一二三区 | 国产我和子的乱视频网站 | 欧美5区| 国产一区二区在线看 | 免费一区二区三区在线视频 | 国产精品区一区二区三区 | 国产区第一页 | 亚洲区一区二区 | 91精品国产高清一区二区三区 | 69精品久久久久久 | julia中文字幕久久一区二区 | 久久精品二区亚洲w码 | 亚洲精品一区中文字幕乱码 | 国产h视频 | 午夜视频在线视频 |