Gitのリベース、マージ、スタッシュの違い

隠し場所

これは、変更したファイルをローカルエリアに一時的に保存し、ブランチを変更されていない状態に復元することを意味します。無限に保存できます。保存の順序が逆になり、最後の送信が一番上に並べ替えられます。リストを使用して、保存されたリストを表示します。

関連するコマンドを隠します

現在の変更を保存します。

git stash save "message" 

または

git stash "message"

ストレージリストの表示:

git stash list

保存された変更を復元します。

git stash apply

指定されたストレージ変更を復元します。

git stash apply stash@{
    
    l}   #l 是指当前存储列表中的顺序 0,1,2,3...

ストレージリストをクリアします。

git stash clear

指定されたストレージ変更を削除します。

git stash drop stash@{
    
    l}  #  l 是指当前存储列表中的顺序 0,1,2,3...

リベースの基本操作

開発タスクは2つの異なるブランチに分かれ、それぞれが更新を送信しました。
ここに画像の説明を挿入ブランチを統合する最も簡単な方法は、mergeコマンドです。2つのブランチ(C3とC4)の最新のスナップショットと、2つのブランチの最も近い共通の祖先(C2)を3方向マージでマージします。マージの結果、新しいスナップショットが生成(および送信)されます。
ここに画像の説明を挿入実際、別の方法があります。C4で導入されたパッチと変更を抽出し、C3に基づいてそれらを1回適用することができます。Gitでは、この操作はリベースと呼ばれます。「リプレイ」と同じように、rebaseコマンドを使用して、あるブランチに送信されたすべての変更を別のブランチに移動できます。

ここに画像の説明を挿入その原則は、最初にこれら2つのブランチの最も近い共通の祖先C2(つまり、現在のブランチ実験、リベース操作のターゲットベースブランチマスター)を見つけ、次に現在のブランチの以前のコミットを祖先に関して比較することです。 、対応する変更を抽出して一時ファイルとして保存し、現在のブランチをターゲットベースC3にポイントし、最後に一時ファイルとして以前に保存した変更を順番に適用します。(注釈:コミットIDは、理解しやすいように記載されています。以下と同じです)

このとき、C4 'が指すスナップショットは、上記のマージコマンドを使用した例のC5が指すスナップショットとまったく同じです。これら2つの統合方法の最終結果に違いはありませんが、リベースにより送信履歴がよりクリーンになります。リベースされたブランチの履歴を見ると、実際の開発作業は並行しているものの、シリアルのように見え、コミット履歴は分岐のない直線であることがわかります。

リベースとマージ

リベースでもマージでも、統合の最終結果は常に同じスナップショットを指しますが、コミット履歴は異なります。

rebase是将一系列提交按照原有次序依次应用到另一分支上
merge是把最终结果合在一起。

関連するコマンドをリベースする

マージされたブランチコンテンツ:

git rebase [branch]

競合を解決した後、マージを続行します。

リベースプロセス中に競合が発生する可能性があります。この場合、Gitはリベースを停止し、競合を解決できるようにします。競合が解決されたら、「git-add」コマンドを使用してこれらのコンテンツのインデックスを更新します(インデックス) 、その後、git-commitを実行する必要はなく、次のコマンドを実行するだけです。

git rebase --continue

マージを終了します(元の状態に復元します):いつでも-abortパラメーターを使用してリベース操作を終了できます

git rebase --abort

スタッシュとリベースの違い

まず、原理が異なります

stash操作は変更されたコンテンツのみを保存し、マージ操作を実行してマスターの最新のコミットをブランチブランチにマージし、stash applyを実行して一時的に保存された変更されたコンテンツを復元し、commit4が最新のものを指すようにする必要があります。内容を修正しました。
リベース操作とは、変更されたコンテンツがブランチブランチのローカルブランチに送信されたことを意味します。このとき、リベース操作では、最初に変更されたコンテンツがパッチに挿入され、次に変更されていない状態に復元されてから、最新のコンテンツがマージされます。マスターをブランチ内に変更してから、パッチ内のコンテンツを復元し、commit4で最新のコンテンツ変更を指定します。

第二に、タイミングが異なります

スタッシュ操作、変更されたコンテンツ、ローカルブランチに送信されていない、またはリモートブランチの
リベース操作、変更されたコンテンツに送信されていない、ローカルブランチに送信されている、リモートブランチに送信されていない

第三に、手順が異なります

スタッシュ操作、スタッシュ+マージ+
リベース操作の適用、コミット+リベースの実行が必要

参照:https://www.jianshu.com/p/3dc4677a3b08

おすすめ

転載: blog.csdn.net/p715306030/article/details/113407259