Git Stash を使用したマージコンフリクトの解決
「Your local changes would be overwritten by merge(ローカルの変更がマージによって上書きされます)」エラーを解決する最も一般的で便利な方法の 1 つは、git stash を使用することです。git stash コマンドは、コミットされていない変更を一時的に保存し、後で適用できるようにします。
Git Stash とは
git stash は、コミットされていない変更(ステージング済みと未ステージングの両方)を取得し、後で使用するために保存し、ワーキングコピーの変更を元に戻す Git コマンドです。
Git Stash を使用してエラーを解決する
git stash を使用して、コミットされていない変更を保存しましょう。
git stash
次のような出力が表示されるはずです。
Saved working directory and index state WIP on main: xxxxxxx Initial commit
このメッセージは、変更が保存されたことを確認します。ワーキングディレクトリがクリーンになったことを確認しましょう。
git status
次のように表示されるはずです。
On branch main
nothing to commit, working tree clean
次に、script.js の内容を確認しましょう。
cat script.js
元の内容が表示されるはずです。
console.log('Hello, Git!');
development ブランチをマージする
ワーキングディレクトリがクリーンになったので、development ブランチを安全にマージできます。
git merge development
次のように表示されるはずです。
Updating xxxxxxx..xxxxxxx
Fast-forward
script.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
もう一度 script.js の内容を確認しましょう。
cat script.js
これで、次のように表示されるはずです。
console.log('Hello from development branch!');
Stashed された変更を取得する
development ブランチを正常にマージしたので、stashed された変更を取得しましょう。
git stash list
次のように表示されるはずです。
stash@{0}: WIP on main: xxxxxxx Initial commit
これは、1 つの stash が保存されていることを示しています。適用しましょう。
git stash apply
コンフリクトメッセージが表示される場合があります。
Auto-merging script.js
CONFLICT (content): Merge conflict in script.js
これは正常です。Git がマージされたファイルの上に stashed された変更を適用しようとしているためです。script.js の内容を確認しましょう。
cat script.js
次のようなものが表示されるはずです。
<<<<<<< Updated upstream
console.log('Hello from development branch!');
=======
console.log('Hello from main branch!');
>>>>>>> Stashed changes
これは、手動で解決する必要があるマージコンフリクトです。nano を使用してファイルを開きます。
nano script.js
両方の変更を保持するか、1 つを選択するようにファイルを編集します。
// Keep both changes
console.log("Hello from development branch!");
console.log("Hello from main branch!");
Ctrl+O、Enter の順に押してファイルを保存し、Ctrl+X を押して nano を終了します。
次に、解決されたコンフリクトをステージングしてコミットしましょう。
git add script.js
git commit -m "Merge development branch and resolve conflict"
おめでとうございます!git stash を使用して、「Your local changes would be overwritten by merge(ローカルの変更がマージによって上書きされます)」エラーを正常に解決しました。