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

名前

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

概要

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

説明

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

等価性のテストは、空白と行番号を削除した後の diff に基づいています。したがって、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 (- でマークされている) は、topic ブランチを origin/master の上にリベースするときにドロップできることがわかります。一方、コミット B (+ でマークされている) は、origin/master に適用されるように送信するためにまだ保持する必要があります。

limit の使用

オプションの <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 を limit として指定することで、basetopic の間のコミットのリストを避けることができます。

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

関連項目

GIT

git[1]スイートの一部

scroll-to-top