他の答えに従わないでください...
もちろん、あなたはそれらに従うことができます。しかし、コミットを行ってからブランチをリセットして、作成したばかりのコミットを削除し、他の回答で提案されている同様の回避策が、この問題を解決するためのクリーンな方法だとは思いません。
クリーン ソリューション
次の解決策は、私にとってははるかにクリーンなようであり、Git 自体によっても提案されていますgit status
—競合のあるリポジトリで実行してみてください:
Unmerged paths:
(use "git restore --staged <file>..." to unstage)
(use "git add <file>..." to mark resolution)
注:このrestore
コマンドは、Gitバージョン 2.23.0で導入されました。git reset HEAD <file>...
古いバージョンの Gitでは、 の代わりにコマンドを使用することが推奨されていましたgit restore --staged <file>...
。を使用して、ステージング領域 ( indexgit reset
と呼ばれる) 内のすべてのファイルのステージングを解除することもできます。Restore コマンドに相当するものは(ドットが必要で、任意のファイルを指定します) です。現在、これらのコマンドはどれでも使用でき、結果は同じです。これらのコマンドの違いについて知りたい場合は、ドキュメントを確認してください。git restore --staged .
それでは、Gitが提案することをしましょう(無意味なコミットを作成して元に戻すことなく):
- 手動で (または理想的にはいくつかのマージ ツールを使用して、以下を参照) 競合を解決します。
git restore --staged .
競合を解決済みとしてマークし、ステージング領域内のすべてのファイルのステージングを解除するために使用します。特定のファイルのみをアンステージする場合は、git restore --staged <file>
代わりに コマンドを使用してください。事前に実行する必要はありませんgit add
。
git stash drop
最後に、 Git はコンフリクト時に自動的にそれを行わないため、stash を で削除します。
コマンドライン コマンドに変換:
$ git stash pop
# ...resolve conflict(s)
$ git restore --staged .
$ git stash drop
デフォルトの動作の説明
競合を解決済みとしてマークするには、 と の 2 つの方法がありgit add
ますgit restore --staged <file>...
。whilegit restore --staged <file>...
は、競合を解決済みとしてマークし、ファイルをインデックスから削除します。git add
競合も解決済みとしてマークしますが、ファイルはインデックス内に保持します。
競合が解決された後にインデックスにファイルを追加するのは意図的なものです。このようにして、以前の stash からの変更と、競合が解決された後に行った変更を区別できます。気に入らない場合は、 を使用していつgit restore --staged .
でもインデックスからすべてを削除できます。
競合を解決するには、手動で行うのではなく、 KDiff3、Meldなどの3 方向マージ ツールを使用することを強くお勧めします。通常、競合のすべてまたは大部分を自動的に解決します。時間を大幅に節約できます。