Gitエラー: rejected master -> master (non-fast-forward)の原因と解決方法


このエラーメッセージは、通常、リモートリポジトリにプッシュしようとした変更が、リモートリポジトリ上の現在の状態と競合していることを示しています。これは、他の人が既にリモートリポジトリに変更をプッシュしており、それと競合する変更を行ったために発生することがあります。以下に、このエラーメッセージの一般的な原因と解決方法をいくつか紹介します。

  1. リモートリポジトリの変更を取得する: まず、他の人がプッシュした変更を取得し、自分のローカルリポジトリに反映させる必要があります。これには、次のコマンドを使用します。

    git pull origin master

    このコマンドは、リモートリポジトリの変更を取得し、現在のブランチにマージします。変更が競合する場合、マージコンフリクトが発生する可能性があります。この場合は、競合を解決してからコミットしてください。

  2. フォースプッシュを行う: もし自分の変更が他の人の変更と競合しない場合、フォースプッシュを行うことでリモートリポジトリに変更を強制的にプッシュすることができます。ただし、他の人が行った変更を上書きしてしまう可能性があるため、注意が必要です。フォースプッシュを行うには、次のコマンドを使用します。

    git push -f origin master

    このコマンドは、リモートリポジトリに変更を強制的にプッシュします。ただし、他の人の変更と競合している場合、この方法を使用することは推奨されません。

  3. ブランチを作成して変更をマージする: もし他の人の変更と競合する変更を行った場合、新しいブランチを作成して変更をマージすることを検討してください。これにより、他の人の変更との競合を避けることができます。具体的な手順は以下の通りです。

    # 新しいブランチを作成する
    git branch my_changes
    # 新しいブランチに切り替える
    git checkout my_changes
    # 変更をコミットする
    git commit -m "My changes"
    # リモートリポジトリに新しいブランチをプッシュする
    git push origin my_changes

    この方法では、競合を回避しながため、新しいブランチを作成して変更を行います。その後、必要に応じてプルリクエストを作成して変更をマージすることができます。

これらは一般的な解決方法のいくつかですが、実際の状況に応じて最適な方法を選択する必要があります。また、Gitのバージョンや設定によっても解決方法が異なる場合があります。

以上が「! [rejected] master -> master (non-fast-forward)」エラーの原因と解決方法の概要です。この情報を参考に、Gitのエラーを効果的に対処できるようになることを願っています。