|
この記事は、WeChat公式アカウント「JS日语問」(著者:慧慧)からの転載です。転載の許可については、「JS日语問」公式アカウントまでお問い合わせください。 I. それは何ですか?一般的に、競合が発生するシナリオは次のとおりです。
具体的には、複数のブランチが同じファイルを(どこでも)変更したか、複数のブランチが同じファイルの名前を変更したことを意味します。 2 つのブランチが異なるファイルの一部を変更する場合、競合は発生しないため、単純にマージすることができます。 コマンドの使用において、push、pull、stash、rebaseなどのコマンドで競合が発生する可能性があります。基本的に、これらの競合はマージとパッチのプロセス中に発生します。 II. 分析ローカル マスター パーティションに a.txt という名前のファイルを作成し、次のように「master commit」でファイルを開始します。 次に、リポジトリに送信します。
新しいブランチ featurel1 を作成し、次のように切り替えます。
次に、a.txt ファイルの最初の行を「featurel commit」に変更し、ステージング領域に追加して、リポジトリへのコミットを開始します。
次に、`git checkout master` を使用してマスター ブランチに切り替え、`git merge` を使用してブランチをマージしたところ、競合がないことがわかりました。 この時点で、a.txt ファイルの内容は機能コミットとなり、競合は発生しません。これは、Git が内部的に高速マージを実行したためです。 現在のブランチのすべてのコミットが別のブランチにすでに存在する場合、Git は「早送り」操作を実行します。 Git は新しいコミットを作成せず、現在のブランチをマージされたブランチにポイントするだけです。 この時点で feature1 ブランチに切り替えて、ファイル コンテンツを feature2 コミットに変更し、ローカル リポジトリにコミットすると... 次にメインブランチに切り替えます。この時点でa.txtファイルを再度変更する場合は、「master second commit」に変更し、ローカルリポジトリに再度コミットします。 この時点で、master ブランチと feature1 ブランチの両方に新しいコミットがあり、次の図のようになります。 このような状況では、クイックマージは不可能です。唯一の選択肢は、個々の変更をマージすることですが、このマージによって競合が発生する可能性があります。 次に、以下に示すように、`git merge featurel` を使用してブランチをマージします。 競合情報によると、a.txt には競合があり、コミットする前に手動で競合を解決する必要があります。 `git status` コマンドは競合しているファイルについても知らせてくれます。 a.txt ファイルを開くと、次の内容が表示されます。 Git は、異なるブランチの内容をマークするために <<<<<<<、======、>>>>>>> を使用します。
次のステップは、競合しているファイルに変更を加え、`git add` コマンドを使用して各ファイルを解決済みとしてマークすることです。これらの競合していたファイルがステージングされると、Git はそれらを解決済みとしてマークし、変更をコミットします。
この時点で、master ブランチと feature1 ブランチは次の図のようになります。 マージ情報は `git log` コマンドを使用して表示できます。 III. 要約Git がブランチを自動的にマージできない場合は、まず競合を解決してからコミットしてマージする必要があります。 競合を解決するには、Git でマージに失敗したファイルを目的の内容に手動で編集し、コミットする必要があります。 参考文献
|
面接官: Git の競合が発生するシナリオを説明してください。どのように解決しますか?
関連するおすすめ記事
-
面接官: Git の競合が発生するシナリオを説明してください。どのように解決しますか?
-
CircuitPython とオープンソース ツールを使用して温室を監視するにはどうすればよいですか?
-
Red Hat JBoss Enterprise Edition と Community Edition の比較ガイド
-
Kingdee のミドルウェア開発者である Yuan Honggang 氏は、Java の将来については楽観的だが、多くのオープンソース製品の見通しについては懸念している。
-
5つの主要オープンソースライセンスの概要と違い
-
オープンソースモデルにおけるクラウドコンピューティングとビッグデータの現状