日本語 ▾ トピック ▾ 最新バージョン ▾ git-cherry は 2.0.5 で最終更新されました

名前

git-cherry - アップストリームにまだ適用されていないコミットを検索する

SYNOPSIS

git cherry [-v] [<upstream> [<head> [<limit>]]]

説明

`<head>..<upstream>` のコミットが、`<limit>..<head>` の範囲にあるコミットと等価であるかどうかを判定します。

等価性のテストは、空白と行番号を削除した後の差分に基づいています。したがって、git-cherry は、git-cherry-pick[1]git-am[1]、または git-rebase[1] を介してコミットが「コピー」されたことを検出します。

`<limit>..<head>` 内の各コミットのSHA1を出力します。<upstream> に等価なコミットがある場合は `-` が、ない場合は `+` がそれぞれ接頭辞として付加されます。

オプション

-v

SHA1の横にコミットの件名を表示します。

<upstream>

等価なコミットを検索するアップストリームブランチ。デフォルトはHEADのアップストリームブランチです。

<head>

作業ブランチ。デフォルトはHEADです。

<limit>

limitまで(limitを含む)のコミットは報告しません。

パッチワークフロー

git-cherry は、パッチベースのワークフロー(gitworkflows[7] を参照)で、一連のパッチがアップストリームのメンテナーによって適用されたかどうかを判断するためによく使用されます。このようなワークフローでは、次のようにトピックブランチを作成して送信することがあります

$ git checkout -b topic origin/master
# work and create some commits
$ git format-patch origin/master
$ git send-email ... 00*

その後、(`topic` ブランチにいるままで)次のように入力して、変更が適用されたかどうかを確認します。

$ git fetch  # update your notion of origin/master
$ git cherry -v

具体例

トピックが3つのコミットで構成されており、メンテナーがそのうち2つを適用した場合、状況は次のようになるかもしれません。

$ git log --graph --oneline --decorate --boundary origin/master...topic
* 7654321 (origin/master) upstream tip commit
[... snip some other commits ...]
* cccc111 cherry-pick of C
* aaaa111 cherry-pick of A
[... snip a lot more that has happened ...]
| * cccc000 (topic) commit C
| * bbbb000 commit B
| * aaaa000 commit A
|/
o 1234567 branch point

このような場合、git-cherry はまだ適用されていないものについて簡潔な要約を表示します。

$ git cherry origin/master topic
- cccc000... commit C
+ bbbb000... commit B
- aaaa000... commit A

ここでは、コミットAとC(`-`でマークされている)は、`origin/master`の上にリベースする際に `topic` ブランチから削除できることがわかります。一方、コミットB(`+`でマークされている)は、`origin/master`に適用されるように送信するために、まだ保持しておく必要があることがわかります。

リミットの使用

オプションの <limit> は、あなたのトピックがアップストリームにない他の作業に基づいている場合に役立ちます。前の例を拡張すると、次のようになるかもしれません。

$ git log --graph --oneline --decorate --boundary origin/master...topic
* 7654321 (origin/master) upstream tip commit
[... snip some other commits ...]
* cccc111 cherry-pick of C
* aaaa111 cherry-pick of A
[... snip a lot more that has happened ...]
| * cccc000 (topic) commit C
| * bbbb000 commit B
| * aaaa000 commit A
| * 0000fff (base) unpublished stuff F
[... snip ...]
| * 0000aaa unpublished stuff A
|/
o 1234567 merge-base between upstream and topic

`base` をリミットとして指定することで、`base` と `topic` の間のコミットを一覧表示することを避けることができます。

$ git cherry origin/master topic base
- cccc000... commit C
+ bbbb000... commit B
- aaaa000... commit A

関連項目

Git

git[1] スイートの一部

scroll-to-top