セットアップと設定
プロジェクトの取得と作成
基本的なスナップショット
ブランチとマージ
プロジェクトの共有と更新
検査と比較
パッチ適用
デバッグ
メール
外部システム
サーバー管理
- 2.1.4 → 2.50.1 変更なし
-
2.0.5
2014-12-17
説明
<head>..
<upstream> にあるコミットが、<limit>..
<head> の範囲にあるコミットと等価であるかどうかを判定します。
等価性のテストは、空白と行番号を削除した後の diff に基づいています。したがって、git-cherry は、git-cherry-pick[1]、git-am[1]、または git-rebase[1] によってコミットが「コピー」された場合を検出します。
<limit>..
<head> 内のすべてのコミットの SHA1 を出力します。<upstream> に等価なものがあるコミットには -
を、等価なものがないコミットには +
を先頭に付加します。
例
パッチワークフロー
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 として指定することで、base
と topic
の間のコミットのリストを避けることができます。
$ git cherry origin/master topic base - cccc000... commit C + bbbb000... commit B - aaaa000... commit A
GIT
git[1]スイートの一部