リモートリポジトリにも変更があるファイルを変更した場合、「Your local changes to the following files would be overwritten by merge(次のファイルへのローカルの変更はマージによって上書きされます)」というエラーメッセージが表示されることがあります。MiniToolのこの記事で、その解決策をご紹介します。

リポジトリとは?Gitにおけるpushとpullとは?

リポジトリとは?リポジトリは、チームメンバーがGitHubのバージョン管理メカニズムを通じて常に修正・取得するコードの保存場所です。

「pull」は、リポジトリの最新バージョンをPycharmなどのローカルストレージ/IDE(統合開発環境)に取り込むことで、その後コードを変更したり、機能を追加したりすることができます。作業が完了したら、変更内容をリポジトリに「push」して保存・追加します。他の人もコードにアクセスできます。

関連記事:GitHubリポジトリをクローンして複製する方法

「次のファイルへのローカルの変更はマージによって上書きされます」の解決策

対処法1: pullを強制してローカルの変更を上書きする

最初の方法は、pullを強制してローカルの変更を上書きことです。これにより、コンピューターで行ったローカルの変更がすべて上書きされ、リポジトリ内のバージョンのコピーが表示されます。IDEで次のコマンドを実行する必要して下さい。

  • git reset — hard
  • git pull

その後、「次のファイルへのローカルの変更はマージによって上書きされます」が解消されたかどうかを確認します。

対処法2: 両方の変更を保持する

ローカルで行った変更とリポジトリ内の変更の両方を保持したい場合は、変更を追加してコミットします。IDEで次のコードを実行して下さい。

  • git add $the_file_under_error
  • git commit
  • git pull

対処法3: 両方の変更を保持するが、コミットしない

開発者がコードの一部を修正中であるために、コミット準備ができていないことがあります。この場合はコードを元に戻して安全に変更を保管し、リポジトリからバージョンを取得します。

  • git stash save –keep-index

または

  • git stash
  • git pull
  • git stash pop

ストアに入った後に何か問題が発生した場合は、通常通り解決する必要があります。以下のコードも使用できます。

  • git stash apply

マージが適切な選択肢でない場合は、リベースをご検討下さい。リベースの場合は、コードを次のように変更します。

  • git stash
  • git pull –rebase origin master
  • git stash pop

対処法4: コードの一部を変更する

コードのすべてではなく一部のみを変更したい場合は、上書きしたくない部分をすべてコミットしてから、対処法3を実行します。リポジトリに存在するバージョンを上書きしたい変更を行うには、次のコードを使用します。

  • git checkout path/to/file/to/revert

または

  • git checkout HEAD^ path/to/file/to/revert

また、ファイルがステージングされていないことも確認する必要があります。

  • git reset HEAD path/to/file/to/revert
  • git pull
関連記事:Gitエラーの修正:まず現在のインデックスを解決する必要がある

最後に

以上、Gitで「ローカルの変更はマージによって上書きされます」を解決するのによく使われる方法をご紹介しました。このエラーを解決するその他の有用な方法がございましたら、コメント欄でお知らせ下さい。

  • hatena