gitの競合解決-中止、続行、git rebaseのスキップ

https://blog.csdn.net/qq_37708668/article/details/88813266

 

gitの競合解決-中止、続行、git rebaseのスキップ

元のテキストはhttp://www.cnblogs.com/chenjunjie12321/p/6876220.htmlから転送されます

(1)応用例解説

プロジェクトがgithubまたはgitoschinaで確立され、デフォルトのブランチがマスターブランチであり、リモートマスターブランチのc.shファイルのコンテンツであるとします。
ここに画像の説明を挿入
開発者AおよびBは、それぞれプロジェクトをローカル開発にコピーします。

ある日、開発者Bがc.shを送信し送信は成功しました。
ここに画像の説明を挿入
その後、開発者Aは、ローカルコードがリモートマスターブランチのコードと同期されていない状況でローカルc.shを変更し、変更されたc.shを変更しました。 shの内容は次のとおりです。
ここに画像の説明を挿入
変更後、開発者Aはリモートマスターブランチにコードを送信する準備が整います。

(2)問題を紹介する

開発者Aの送信プロセスが次のとおりであるとします。

$ git add  c.sh

$ git commit -m“ XXXX”

$ git pushを直接使用すると、エラーが発生します。

エラー:一部の参照を '[email protected]:XXXX / gitlearning.git'にプッシュできませんでした

ヒント:ローカルにはない作業がリモートに含まれているため、更新は拒否されました。これは通常、同じ参照にプッシュする別のリポジトリが原因です。もう一度プッシュする前に、まずリモートの変更( 'git pull…'など)を統合することができます。詳細については、「git push --help」の「早送りに関する注意」を参照してください。

上記のプロセスのノードトレンドを次の図に示します。
ここに画像の説明を挿入
実際の開発プロセスでは、他の開発者がc.shを変更する可能性があることを考慮して、開発プロセスで使用することをお勧めします

$ git pull --rebase

リモートコードと同期すると、同期プロセスで競合がチェックされます。
ここに画像の説明を挿入
このとき、開発者は<<<<<<<< HEAD、=======、>>>>>>>に従って競合の場所を知ることができます。

注:git pull --rebaseは競合には使用されません。これは競合解決の手段であり、mergeメソッドもあります。

(3)知識ポイントの紹介

$ git pull --rebase

git pullのデフォルトの動作はgit fetch + git mergeです

git pull --rebaseはgit fetch + git rebaseです。

$ git fetch

リモートからローカルに最新バージョンを取得し、ブランチを自動的にマージしません

$ git rebase

git rebaseは、その名前が示すように、開始点(ベース)を再定義(再)すること、つまりブランチのリポジトリの状態を再定義することです。ブランチノードをローカルで更新するプロセスを次の図に示します。(リベースノードのナレッジポイントについては、http:
ここに画像の説明を挿入
//blog.csdn.net/hudashi/article/details/7664631/ を参照してください)$ git pull --rebase

git pull --rebaseの実行中に、ローカルの現在のブランチの各コミットがキャンセルされ、ローカルの現在のブランチが最新の「元の」ブランチに更新されます。ローカルのブランチノードを更新するプロセスは次のとおりです。
ここに画像の説明を挿入
(4)トピックに
戻り、git pull --rebaseの実行後にマージの競合がある場合は、次の3つの方法を使用してこれらの競合に対処します。

git rebase --abortはマージを中止し、リベース操作前の状態に戻ります。前のコミットは破棄されません。

git rebase --skipは競合するコミットを破棄します(注意して使用してください)。

git rebase --continue merge conflicts、「git add file」コマンドと組み合わせて使用​​して競合を修復し、競合を解決するために段階的に開発者に促します。(競合を修正してから「git rebase --continue」を実行してください)

上記の対立に対処する

1. $ git rebase --abortを使用します

実行後、ローカルコンテンツは送信の間の状態、つまり以前の送信の状態に戻りますが、リベースを取り消すだけのプルはありません。

2. $ git rebase --skipを使用します

git rebase --skip競合の原因となったコミットは破棄されます。この記事のアプリケーション例では、開発者Aはc.shファイルのコミットに影響せず、開発者A自身が変更したすべての部分は無効であるため、スキップを使用するときは注意してください。

実行:$ vim  c.sh

次の図に示すように、ローカルc.shファイル送信の内容を表示します。ステートメントの実行後、開発者Aの変更は無効です。
ここに画像の説明を挿入
3. $ git rebase --continueを使用します

$ git pull --rebaseを実行した後、ローカルで競合がある場合は、競合を手動で解決した後、「git add」コマンドを使用してこれらのコンテンツのインデックスを更新し、次のように実行します。

$ git rebase --continueはローカルブランチとリモートブランチを直線的に接続し、エラーなしで終了してメインブランチに戻ることができます。
注:通常の状況では、変更が問題ないことを確認してから、rebaseを使用して競合をマージしてください。

おすすめ

転載: www.cnblogs.com/itlover2013/p/12672519.html