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

什么是 Git 遴選(cherry-pick)?

開發 后端
當你和一群程序員一起工作時,無論項目大小,處理多個 Git 分支之間的變更都會變得很困難。有時,你不想將整個 Git 分支合并到另一個分支,而是想選擇并移動幾個特定的提交。這個過程被稱為 “遴選cherry-pick”。本文將介紹“遴選”是什么、為何使用以及如何使用。

[[393148]]

了解 git cherry-pick 命令是什么,為什么用以及如何使用。

當你和一群程序員一起工作時,無論項目大小,處理多個 Git 分支之間的變更都會變得很困難。有時,你不想將整個 Git 分支合并到另一個分支,而是想選擇并移動幾個特定的提交。這個過程被稱為 “遴選cherry-pick”。4

本文將介紹“遴選”是什么、為何使用以及如何使用。

那么讓我們開始吧。

什么是遴選?

使用遴選(cherry-pick)命令,Git 可以讓你將任何分支中的個別提交合并到你當前的 Git HEAD 分支中。

當執行 git merge 或者 git rebase 時,一個分支的所有提交都會被合并。cherry-pick 命令允許你選擇單個提交進行整合。

遴選的好處

下面的情況可能會讓你更容易理解遴選功能。

想象一下,你正在為即將到來的每周沖刺實現新功能。當你的代碼準備好了,你會把它推送到遠程分支,準備進行測試。

然而,客戶并不是對所有修改都滿意,要求你只呈現某些修改。因為客戶還沒有批準下次發布的所有修改,所以 git rebase 不會有預期的結果。為什么會這樣?因為 git rebase 或者 git merge 會把上一個沖刺的每一個調整都納入其中。

遴選就是答案!因為它只關注在提交中添加的變更,所以遴選只會帶入批準的變更,而不添加其他的提交。

還有其他幾個原因可以使用遴選:

  • 這對于 bug 修復是必不可少的,因為 bug 是出現在開發分支中對應的提交的。
  • 你可以通過使用 git cherry-pick 來避免不必要的工作,而不用使用其他選項例如 git diff 來應用特定變更。
  • 如果因為不同 Git 分支的版本不兼容而無法將整個分支聯合起來,那么它是一個很有用的工具。

使用 cherry-pick 命令

在 cherry-pick 命令的最簡單形式中,你只需使用 SHA 標識符來表示你想整合到當前 HEAD 分支的提交。

要獲得提交的哈希值,可以使用 git log 命令:

  1. $ git log --oneline

當你知道了提交的哈希值后,你就可以使用 cherry-pick 命令。

語法是:

  1. $ git cherry-pick <commit sha>

例如:

  1. $ git cherry-pick 65be1e5

這將會把指定的修改合并到當前已簽出的分支上。

如果你想做進一步的修改,也可以讓 Git 將提交的變更內容添加到你的工作副本中。

語法是:

  1. $ git cherry-pick <commit sha> --no-commit

例如:

  1. $ git cherry-pick 65be1e5 --no-commit

如果你想同時選擇多個提交,請將它們的提交哈希值用空格隔開:

  1. $ git cherry-pick hash1 hash3

當遴選提交時,你不能使用 git pull 命令,因為它能獲取一個倉庫的提交自動合并到另一個倉庫。cherry-pick 是一個專門不這么做的工具;另一方面,你可以使用 git fetch,它可以獲取提交,但不應用它們。毫無疑問,git pull 很方便,但它不精確。

自己嘗試

要嘗試這個過程,啟動終端并生成一個示例項目:

  1. $ mkdir fruit.git
  2. $ cd fruit.git
  3. $ git init .

創建一些數據并提交:

  1. $ echo "Kiwifruit" > fruit.txt
  2. $ git add fruit.txt
  3. $ git commit -m 'First commit'

現在,通過創建一個項目的復刻來代表一個遠程開發者:

  1. $ mkdir ~/fruit.fork
  2. $ cd !$
  3. $ echo "Strawberry" >> fruit.txt
  4. $ git add fruit.txt
  5. $ git commit -m 'Added a fruit"

這是一個有效的提交。現在,創建一個不好的提交,代表你不想合并到你的項目中的東西:

  1. $ echo "Rhubarb" >> fruit.txt
  2. $ git add fruit.txt
  3. $ git commit -m 'Added a vegetable that tastes like a fruit"

返回你的倉庫,從你的假想的開發者那里獲取提交的內容:

  1. $ cd ~/fruit.git
  2. $ git remote add dev ~/fruit.fork
  3. $ git fetch dev
  4. remote: Counting objects: 6, done.
  5. remote: Compressing objects: 100% (2/2), done.
  6. remote: Total 6 (delta 0), reused 0 (delta 0)
  7. Unpacking objects: 100% (6/6), done...
  1. $ git log oneline dev/master
  2. e858ab2 Added a vegetable that tastes like a fruit
  3. 0664292 Added a fruit
  4. b56e0f8 First commit

你已經從你想象中的開發者那里獲取了提交的內容,但你還沒有將它們合并到你的版本庫中。你想接受第二個提交,但不想接受第三個提交,所以使用 cherry-pick

  1. $ git cherry-pick 0664292

第二次提交現在在你的倉庫里了:

  1. $ cat fruit.txt
  2. Kiwifruit
  3. Strawberry

將你的更改推送到遠程服務器上,這就完成了!

避免使用遴選的原因

在開發者社區中,通常不鼓勵所以遴選。主要原因是它會造成重復提交,而你也失去了跟蹤你的提交歷史的能力。

如果你不按順序地遴選了大量的提交,這些提交會被記錄在你的分支中,這可能會在 Git 分支中導致不理想的結果。

遴選是一個強大的命令,如果沒有正確理解可能發生的情況,它可能會導致問題。不過,當你搞砸了,提交到錯誤的分支時,它可能會救你一命(至少是你當天的工作)。 

 

責任編輯:龐桂玉 來源: Linux中國
相關推薦

2021-04-17 17:59:21

Git命令開源

2020-10-05 21:21:35

命令開發cherry-pick

2021-04-18 18:03:06

工作樹遠程版本

2023-11-14 14:21:43

Git三路合并

2016-08-02 11:06:34

開源Linux版本控制

2022-01-19 21:54:50

CSS遮罩效果Gif 圖

2019-04-26 14:46:18

GitGitHub局域網

2021-03-20 22:46:22

IaaSSaaSPaaS

2022-05-04 09:02:41

TypeScript類型工具

2023-09-01 13:49:00

內存進程線程

2020-07-14 14:59:00

控制反轉依賴注入容器

2018-06-05 15:22:26

程序員系統登錄

2017-12-19 21:29:58

物聯網區塊鏈大數據

2020-11-20 10:51:03

云計算

2018-01-30 11:17:56

集群分布式SOA?

2010-08-26 09:27:53

DHCP服務器

2016-05-09 10:31:29

DockerLinux

2021-07-28 09:48:54

XML標記語言

2011-08-16 18:39:05

Ubuntu
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品久久久久久久久久 | 国产精品精品视频 | 国产乱人伦精品一区二区 | 久久精品国产清自在天天线 | 精品91久久| 在线观看视频91 | 婷婷色婷婷| 日韩精品一区二区三区免费视频 | 免费一级片 | 国产高潮好爽受不了了夜夜做 | 在线观看中文字幕 | 中文字幕亚洲视频 | 国产99久久久国产精品 | 免费在线观看一区二区三区 | 久久综合一区 | 国产91精品久久久久久久网曝门 | 国产成人精品一区二区三区视频 | 日韩av在线不卡 | 欧美激情在线播放 | 久久夜夜| 黄色片在线免费看 | 99精品免费久久久久久久久日本 | 国产精品久久久久久久久久久久冷 | 中文字幕中文字幕 | 亚洲精品小视频在线观看 | 久久极品 | 日韩成人av在线播放 | 狠狠干狠狠操 | 亚洲入口 | 日本高清不卡视频 | 亚洲精品视频免费观看 | 一级做a爰片性色毛片视频停止 | 久久综合久久自在自线精品自 | 欧美高清一区 | 黄色免费三级 | 黄色在线免费观看 | 久艹网站 | 久久精彩| 一区二区三区小视频 | 人人玩人人干 | 人人爽日日躁夜夜躁尤物 |