RSS ジュリア・エヴァンス

git cherry-pick と revert が 3-way merge を使用する方法

Follow
著者は、git cherry-pickが単にパッチを適用するものと誤解し、実際の作業原理を探り始め、より微妙なプロセスである「3-way merge」が明らかになった。この誤解は、パッチメソッドでマージコンフリクトを解決しようとしたが、失敗し、git cherry-pickの予想される動作とは異なったため生じた。更なる調査でgitのソースコードを調べた結果、cherry-pickが3-way mergeを使用していることがわかり、当時著者が知らなかった概念であった。この発見が3-way mergeの探検を促し、3-way mergeは、元のバージョン(ベース)と比較することで2つのファイルをマージするプロセスであると捉えることができる。この概念は、gitでのパッチの適用にも拡張され、コミット前のファイルバージョン、コミット後のファイルバージョン、現在のファイルの3つのバージョンがマージに使用される。cherry-pick、rebase、revertはすべてこの3-way merge戦略を使用し、主にベースバージョンとターゲットバージョンの順序と解釈で異なる。 著者は、この技術を「3-way patch」と呼び、従来のパッチと比較してマージの文脈を提供する利点を強調する。git applyは従来のパッチを処理するが、--3wayフラグも提供し、3-way mergeを実行する。gitのパッチ適用メカニズムの探検は、様々な操作に対する統一的なアプローチを提供し、従来の「パッチを適用する」概念に慣れたユーザーにとって透明なままである。著者は、gitのマージの複雑さを認め、recursive mergesや複数のマージアルゴリズムのような概念を示し、更なる探検のために「Building Git」書籍を推奨する。 最後に、著者は、gitのパッチメカニズムのエレガントなデザインを賞賛し、その直観性と効果を称賛する。
favicon
jvns.ca
How git cherry-pick and revert use 3-way merge
Create attached notes ...