コミットの範囲をどのようにgitcherry-pickしますか?

アルフィーの態度

私はとの間の接続があることを見たrebasecherry-pickコミットの範囲は。

cherry-pick複数のコミットを試みたときに何が起こるかを正確に説明する記事/トーチュリアルを見つけることができませんでした

(私が考えることができる)いくつかの質問は次のとおりです。

  1. CHERRY_PICK_HEADrefはありますか?
  2. を実行することによりgit cherry-pick 2^..4、gitが実行する一連のアクションと、その間でgitの使用をコミットしますdiffか?

ここに画像の説明を入力してください

  1. を実行するとgit cherry-pick 1..8、gitは何をしますか?

ここに画像の説明を入力してください

ノエ

チェリーピッキングのnコミットは、チェリーピッキングのコミットと同じです(個別のgit呼び出しを使用)。ブランチやその他の関係はありません。現在のブランチで新しいコミットが作成されるだけです。

詳細

ヘルプページhttps://www.git-scm.com/docs/git-cherry-pick.htmlには次のように書かれています。

1つ以上の既存のコミットが与えられた場合、それぞれが導入する変更を適用し、それぞれに新しいコミットを記録します。

そのステートメントをバラバラに選んでみましょう:

変化

これは、「diff」とも呼ばれるものです。それがgit diff HEAD somecommit出力されるものです。「パッチ」と呼ばれることもあります(実際、からの同じ出力をgit diff通常のpatchユーティリティで適用できます。もちろん、git applyここでは重要ではありません)。

したがって、「変更」とは、テキストファイルのようなツール、gitまたはpatchテキストファイルを変更して、新しい変更されたテキストファイルを作成する方法を指示するものです。

2つのファイルに対して標準diffユーティリティを実行することにより、2つのファイル間の違いの同様のテキスト表現を作成できます。実際、それはgit内部的に(もちろん、独自のdiff実装を使用して)チェリーピックで行うことです。つまり、これは2方向の差分であり、git merge操作のような3方向の差分ではありません

それぞれが紹介します

この状態の場合:

...----+----+----...
   abc  def          

次に、これが「導入」されるためgit cherry-pick def変更はコミットabcdef(もちろん、ファイルごとに異なるすべてのファイルの)間の双方向の差分defです。

変更を適用する

これはHEAD、「変更」(つまり、差分、パッチなど)を取得して、新しいテキストファイルのセットを作成することを意味します。これは、patchそうでない場合、つまりdiff出力のコンテキスト情報がHEAD現在の内容と一致しない場合を除いて、原則として(ユーティリティが行うのと同じように)双方向マージとして扱うことができます。その場合、gitは、3ウェイマージを実行できる共通の祖先を見つけるためにチートします。また、gitとmeldを使用したインタラクティブなリベースのための3ウェイマージの3つのファイルは何ですか?しかし、それでも、ユーザーの観点からはgit merge、構造的には、のような2つの親のコミットではなく、単一の親のコミットになる限り、実際には比較できませんgit merge

新しいコミットを記録する

git変更をインデックスと作業ディレクトリに適用し、コミットします。2方向マージと3方向マージが競合なしで機能しなかった場合を除き、その場合は、ヘルプページから直接コメントを追加してください。

  1. 現在のブランチとHEADポインターは、正常に行われた最後のコミットに留まります。[つまり、単純な単純なHEADです。]
  2. CHERRY_PICK_HEAD refは、適用が難しい変更を導入したコミットを指すように設定されています。[それはdef上の私の写真にあります。]
  3. 変更が正常に適用されたパスは、インデックスファイルと作業ツリーの両方で更新されます。[つまり、コミットで多くのファイルが変更された場合、きれいに適用できるファイルがあります。]
  4. 競合するパスの場合、git-merge [1]の「TRUEMERGE」セクションで説明されているように、インデックスファイルには最大3つのバージョンが記録されます。作業ツリーファイルには、通常の競合マーカー<<<<<<<および>>>>>>>で囲まれた競合の説明が含まれます。[つまり、マージの競合と同じですが、いくつかの「薄い空気から想起された」共通の祖先があります。]
  5. その他の変更は行われません。

そして最後に、文の残りの部分:

1つ以上の既存のコミットが与えられた場合、適用...それぞれに新しいコミットを記録します。

明示的にgit cherry-pick sha1 sha2 sha3...または暗黙的に複数のコミットを指定するとgit cherry-pick sha1..sha2、上記は単純なループで実行され、最後のピックの後、またはマージの競合が発生したときに停止します。

あなたの質問

CHERRY_PICK_HEAD refとは何ですか?

2. The CHERRY_PICK_HEAD ref is set to point at the commit that introduced the change that is difficult to apply.

commitを選択しようとしてdef、マージの競合が発生した場合、はCHERRY_PICK_HEADを指しdefます。

git Cherry-pick 2 ^ .. 4を実行することにより、gitが実行するアクションのシーケンスはどのようになり、どのコミット間でgit use diffが実行されますか?

上記のように:

  1. コミット2が選択されます。
    • Gitは1と2の間の差分を計算します。
    • 可能であれば、その差分はHEADへの双方向マージとして適用されてコミットされます。
    • 不可能な場合、その差分はHEADへの3方向マージとして適用され、コミットされます。
    • それが不可能な場合(つまり、競合のマージ)、通常どおり手動で競合を解決する必要があり、が発行されるのを待ちますgit cherry-pick --continue
  2. コミット3が選択されます。つまり...同じです。
  3. コミット4が選択されます。つまり...同じです。

git Cherry-pick 1..8を実行すると、gitは何をしますか?

同じですが、今回はコミット2、3、4、8を選択します。

(「最初」の範囲でコミットが選ばれていないという事実は、例えば、通常の動作であるgit log 2^..4か、git log 1..8出力が同じコミットだろう- 。実際に選んだであろうと同じ。これは、桜の下で選ぶヘルプページに記載されている<commits>など、詳細については、gitがリビジョンをウォークする方法へのリンク。これはのプロパティではなく、git cherry-pickこれらの..範囲がどのように機能するかについてのプロパティです。)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ブランチ間のgitcherry-pickコミットを追跡するにはどうすればよいですか?

分類Dev

「gitcherry-pick」が失敗したかどうかをスクリプトからどのように判断できますか?

分類Dev

コミットの範囲を別のブランチで発生するように変更するにはどうすればよいですか?

分類Dev

「gitcherry-pick」は、変更を適用するファイルをどのように見つけますか?

分類Dev

git logによって報告されるコミットの範囲を制限するにはどうすればよいですか?

分類Dev

Javaソケットのポート範囲をどのように指定しますか?

分類Dev

gitでコミットの範囲を元に戻す

分類Dev

gitcherry-pickはコミットの差分を選択するだけではありません

分類Dev

作成者がコミット範囲内で変更したすべてのファイルを、Gitのファイルに最後に発生したものだけで一覧表示するにはどうすればよいですか?

分類Dev

VueJsはどのようにリミッターと範囲でページネーションを行うか?

分類Dev

PHPでIP範囲がプライベートかどうかをどのように確認しますか?

分類Dev

コミットの範囲をチェリーピックして別のブランチにマージするにはどうすればよいですか?

分類Dev

コミットの範囲をチェリーピックして別のブランチにマージするにはどうすればよいですか?

分類Dev

コミットの範囲をチェリーピックして別のブランチにマージするにはどうすればよいですか?

分類Dev

サブネット化、Ip範囲、およびsubnetMaskをどのように見つけますか?

分類Dev

IPアドレスのサブネット範囲をどのように計算できますか?

分類Dev

IPアドレスのサブネット範囲をどのように計算できますか?

分類Dev

IPアドレスのサブネット範囲をどのように計算できますか?

分類Dev

Haskellで数値のリストを範囲のリストにどのように変換しますか?

分類Dev

色の範囲を整数の範囲にマップするにはどうすればよいですか?

分類Dev

ダッシュの範囲はどのように機能しますか?

分類Dev

「私たちが追加した」gitcherry-pickの競合を解決するにはどうすればよいですか?

分類Dev

Falcorの全範囲をどのように無効にしますか?

分類Dev

Rubyを使用して範囲内の一意の単語のセットを見つけるためにREGEXをどのように使用しますか?

分類Dev

golang:範囲外のインデックスのエラーをどのように処理しますか?

分類Dev

コミットの子をどのように参照できますか?

分類Dev

動的な名前付き範囲からオフセットし、SUMPRODUCTでその範囲を使用するにはどうすればよいですか?

分類Dev

Vecで範囲をどのように使用できますか?

分類Dev

範囲の演算子間をどのように使用しますか?

Related 関連記事

  1. 1

    ブランチ間のgitcherry-pickコミットを追跡するにはどうすればよいですか?

  2. 2

    「gitcherry-pick」が失敗したかどうかをスクリプトからどのように判断できますか?

  3. 3

    コミットの範囲を別のブランチで発生するように変更するにはどうすればよいですか?

  4. 4

    「gitcherry-pick」は、変更を適用するファイルをどのように見つけますか?

  5. 5

    git logによって報告されるコミットの範囲を制限するにはどうすればよいですか?

  6. 6

    Javaソケットのポート範囲をどのように指定しますか?

  7. 7

    gitでコミットの範囲を元に戻す

  8. 8

    gitcherry-pickはコミットの差分を選択するだけではありません

  9. 9

    作成者がコミット範囲内で変更したすべてのファイルを、Gitのファイルに最後に発生したものだけで一覧表示するにはどうすればよいですか?

  10. 10

    VueJsはどのようにリミッターと範囲でページネーションを行うか?

  11. 11

    PHPでIP範囲がプライベートかどうかをどのように確認しますか?

  12. 12

    コミットの範囲をチェリーピックして別のブランチにマージするにはどうすればよいですか?

  13. 13

    コミットの範囲をチェリーピックして別のブランチにマージするにはどうすればよいですか?

  14. 14

    コミットの範囲をチェリーピックして別のブランチにマージするにはどうすればよいですか?

  15. 15

    サブネット化、Ip範囲、およびsubnetMaskをどのように見つけますか?

  16. 16

    IPアドレスのサブネット範囲をどのように計算できますか?

  17. 17

    IPアドレスのサブネット範囲をどのように計算できますか?

  18. 18

    IPアドレスのサブネット範囲をどのように計算できますか?

  19. 19

    Haskellで数値のリストを範囲のリストにどのように変換しますか?

  20. 20

    色の範囲を整数の範囲にマップするにはどうすればよいですか?

  21. 21

    ダッシュの範囲はどのように機能しますか?

  22. 22

    「私たちが追加した」gitcherry-pickの競合を解決するにはどうすればよいですか?

  23. 23

    Falcorの全範囲をどのように無効にしますか?

  24. 24

    Rubyを使用して範囲内の一意の単語のセットを見つけるためにREGEXをどのように使用しますか?

  25. 25

    golang:範囲外のインデックスのエラーをどのように処理しますか?

  26. 26

    コミットの子をどのように参照できますか?

  27. 27

    動的な名前付き範囲からオフセットし、SUMPRODUCTでその範囲を使用するにはどうすればよいですか?

  28. 28

    Vecで範囲をどのように使用できますか?

  29. 29

    範囲の演算子間をどのように使用しますか?

ホットタグ

アーカイブ