Gitマージの競合を解決する方法
ほとんどの場合、Gitはブランチ間の違いを解決し、それらをマージできます。これは、開発者が通常、さまざまな行またはファイルに変更を加えているためです。 Gitがリポジトリをマージできない場合があります。これらの状況は、マージの競合と呼ばれます。
このガイドでは、マージとは何か、マージの競合とは何か、およびgitマージの競合を解決する方法について説明します。始めましょう!
マージ競合とは何ですか?
マージの競合とは、Gitがあなたの助けなしに2つのブランチをマージできない場合です。
マージは、Gitのようなバージョン管理システムの基本的な機能です。これにより、開発者はリポジトリ内に複数の個別の開発ラインを維持できます。これは、1人の開発者が、プロジェクトのメインコピーを変更することなく、1つのブランチのバグの修正に取り組むことができることを意味します。
マージの競合は、次の2つのシナリオで発生します。
- 2つのブランチが同じコード行を変更しました。
- あるブランチが、別のブランチで変更されたファイルを削除しました。
マージの競合が発生すると、Gitにエラーが表示されます。これは、Gitがブランチを正常にマージできなかったことを示しています。
削除されたファイルの競合を解決する方法
Gitブランチは互いに独立しています。これは、開発者が一方のブランチのファイルを、その変更がもう一方のブランチに影響を与えることなく削除できることを意味します。
あるブランチのファイルに変更が加えられ、そのファイルが別のブランチで削除された場合、マージの競合が発生する可能性があります。これは、Gitがファイルを削除するか変更するかを認識していないためです。
参加者の81%は、ブートキャンプに参加した後、自分たちの技術的な仕事の見通しについてより自信を持っていると述べました。今日のブートキャンプにマッチしましょう。
平均的なブートキャンプの卒業生は、ブートキャンプの開始から最初の仕事を見つけるまで、キャリアの移行に6か月も費やしませんでした。
devとmasterの2つのブランチがあるとしましょう。 devブランチで、README.mdファイルを削除しました。マスターブランチに、新しいテキストを追加しました。
git mergeコマンドを使用して、これらのブランチをマージできます。
git merge dev
これにより、「dev」ブランチがマスターである現在のブランチにマージされます。私たちのコードはマージの競合を返しました:
Auto-merging README.md CONFLICT (content): Merge conflict in README.md Automatic merge failed; fix conflicts and then commit the result.
この競合を解決するには、ファイルを保持するか、変更するかを決定する必要があります。ファイルを保持する場合は、git addコマンドを使用して、リポジトリに追加し直します。
git add README.md
それ以外の場合は、gitrmコマンドを使用してリポジトリから削除します。
git rm README.md
rm command
ローカルリポジトリからファイルを削除します。 rmコマンドを使用する前に、ファイルを削除するかどうかを再確認してください。
競合するファイルをどう処理するかを選択したら、変更を加えてコミットを作成し、ブランチをマージできます。
git add README.md git commit -m "feat: Add README.md to repository" git merge dev
git addコマンドは、変更をステージングします。 git commitコマンドは、新しいコミットを作成します。 git mergeコマンドは、devブランチとmasterブランチをマージします。マージの競合が解決されたため、ブランチをマージできるようになりました。
ファイル変更の競合を解決する方法
開発者は、2つの異なるブランチで同じファイルに変更を加えることがあります。 Gitは、2つのブランチがマージされているときに保持する変更を区別することはできません。
この場合、マージの競合が発生します。 masterとdevの2つのブランチを持つリポジトリがあるとしましょう。両方のブランチのREADME.mdファイルに変更を加えました。これにより、マージの競合が発生しました。
Auto-merging README.md CONFLICT (content): Merge conflict in README.md Automatic merge failed; fix conflicts and then commit the result.
最初のステップは、マージの競合の根本的な原因を特定することです。これを行うには、gitstatusコマンドを使用します。
On branch master You have unmerged paths. (fix conflicts and run "git commit") (use "git merge --abort" to abort the merge) Unmerged paths: (use "git add <file>..." to mark resolution) both modified: README.md
このメッセージから、ファイルREADME.md
両方のブランチで変更されました。ここで、マージの競合を解決する必要があります。テキストエディタを使用してREADME.mdファイルを開きましょう。
This is a README.md file. This is in a repository called merge-conflicts. <<<<<<< HEAD This file is on the main branch. ======= This file is on the dev branch. >>>>>>> dev
Gitはファイルを編集して、マージの競合が存在することを通知し、競合マーカーを追加しました。 Gitは、マージの競合を表すために、より小さい、より大きい、および等号の記号文字を使用します。
より小さい記号(<)は、現在のブランチに加えられた変更を表します。大なり記号(>)は、現在のブランチにマージしようとしたブランチに加えられた変更を示します。等号(=)は違いを区切ります。
この場合:
- 「このファイルはメインブランチにあります。」マスターブランチ(またはHEAD)にあります。
- 「このファイルはdevブランチにあります。」は開発ブランチにあります。
このマージツールの競合を解決するには、不要なテキストを削除するだけです。コードに「このファイルはブランチ上にあります」と表示させたいとします。この修正は次のように行うことができます。
This is a README.md file. This is in a repository called merge-conflicts. This file is on a branch.
これらの変更を行ったら、最終的なマージを行う準備ができています。変更をステージングし、リポジトリにコミットして、dev
をマージしましょう。 およびmaster
ブランチ:
git add . git commit -m "feat: Resolve merge conflict." git merge dev
マージの競合が解決されたので、コードは正常にマージされます。
結論
マージの競合は、2つのブランチで同じテキスト行に変更を加えた場合、または1つのブランチでファイルを変更し、別のブランチでそのファイルを削除した場合に発生します。
このガイドでは、両方の場合のマージの競合を解決する方法について説明しました。これで、Gitエキスパートのようにマージの競合に取り組む準備が整いました。
-
Gitエラーを修正する方法:最初に現在のインデックスを解決する必要があります
エラー「最初に現在のインデックスを解決する必要があります 」はGitで発生し、マージの競合が発生していることを意味します。競合を解決しない限り、別のブランチにチェックアウトすることはできません。このエラーメッセージは、マージが失敗したか、ファイルとの競合があることも示しています。 これらすべてのファイル、マージ、および競合は何ですか? Gitの使用を始めたばかりの場合、これらの用語はわかりません。 Gitはバージョン管理プラットフォームであり、複数のユーザーが同時にファイルを操作し、コードのローカルコピーをクラウドに保存されているものにプッシュできるようにします。このように、ダウンロードし
-
Git マージ エラーを修正する方法
ブランチの概念は、Git の機能に関連付けられています。 master ブランチに続いて、そこから分岐するいくつかのブランチがあります。あるブランチから別のブランチに切り替えた場合、またはブランチ ファイルに関連する競合がある場合、Git エラー:まず現在のインデックスを解決する必要がありますというエラー メッセージが表示されます。 .エラーが解決しない限り、Git 内でブランチを切り替えることはできません。今日は Git マージ エラーを修正する予定なので、慌てる必要はありません。 Git とその機能 Git は、任意のファイル グループの変更を監視できるコードまたはソフトウェアで