セットアップと設定
プロジェクトの取得と作成
基本的なスナップショット作成
ブランチとマージ
プロジェクトの共有と更新
検査と比較
パッチ適用
デバッグ
メール
外部システム
サーバー管理
ガイド
- gitattributes
- コマンドラインインターフェースの慣例
- 日々のGit
- よくある質問 (FAQ)
- 用語集
- Hooks
- gitignore
- gitmodules
- リビジョン
- サブモジュール
- チュートリアル
- ワークフロー
- すべてのガイド...
管理
低レベルコマンド (Plumbing Commands)
- 2.1.4 → 2.49.0 変更なし
-
2.0.5
2014-12-17
説明
`<head>..<upstream>` のコミットが、`<limit>..<head>` の範囲にあるコミットと等価であるかどうかを判定します。
等価性のテストは、空白と行番号を削除した後の差分に基づいています。したがって、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(`-`でマークされている)は、`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] スイートの一部