Address
304 North Cardinal St.
Dorchester Center, MA 02124
Work Hours
Monday to Friday: 7AM - 7PM
Weekend: 10AM - 5PM
Address
304 North Cardinal St.
Dorchester Center, MA 02124
Work Hours
Monday to Friday: 7AM - 7PM
Weekend: 10AM - 5PM
今回はGitでエラーメッセージ「Updates were rejected because the remote contains work that you do~」が出てpushできない場合の対処・解決方法の解説です。
Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., ‘git pull …’) before pushing again.
hint: See the ‘Note about fast-forwards’ in ‘git push –help’ for details.
ちなみに、この英文の読み方ですが、各行の「hint:」の部分は無視して、
Updates were rejected because the remote contains work that you do not have locally. This is usually caused by another repository pushing to the same ref. You may want to first integrate the remote changes (e.g., ‘git pull …’) before pushing again. See the ‘Note about fast-forwards’ in ‘git push –help’ for details.
という文となります。
このエラーメッセージを簡単に要訳しますと、
「Github上のリモートリポジトリについてすでに別のpushがなされたため、その内容が変更されています。この場合は自分がpushする前に、「git pull」などのコマンドによってリモートリポジトリの変更内容を、自分の手元PCのリポジトリにも反映させてからもう一度pushしましょう」
というものになります。つまり、リモートリポジトリが最新であって、手元にあるローカルリモートリポジトリが古い場合に出るメッセージの1つです。そのときの簡単なイメージ図がこちらです。
リモートリポジトリ(Githubにあるものなど) | ローカルリポジトリ(手元PCにあるもの) |
A→A1へ変更 | A→A2へ変更 |
もしこのようにGithub上のリポジトリの内容と、ローカルのそれにズレが生じていた場合、上の表でいうA1とA2という2つの変更の関係性が問題となります。たとえば次のような関係性が考えられます。
仮に「A→A1+A2」としたい場合に、ローカルの変更(A→A2)を直接リモートリポジトリに適用してしまうと、「(A1を無視して)A→A2」となってしまい、「A1+A2」という内容にはなりません。かなり大雑把な説明ですがこのような問題が生じてしまいます。
そこで上の表において「A→A1+A2」という結果にしたいならば、まず自分のローカルリポジトリにA→A1を適用してから、A2をpushすればいいということになります。
そうすれば、ローカルリポジトリの内容が「A→A1→A1+A2」となり、それをリモート側へpushすればリモート側も「A→A1→A1+A2」となります。ものすごく雑にいうとこのような感じです。
というわけでまずはリモート側の内容をローカル側にマージ(統合、適用)しましょう。具体的には、
git pull コマンド(実際にはリモートリポジトリのブランチ名やローカルリポジトリのブランチ名などの入力も必要でしょう)
を使ってリモート側のデータをローカル側へpullします。
それが完了してからA2への変更をpushすれば無事にpushが成功します。動画学習サイトUdemyにもGitの使い方を説明するわかりやすい人気の動画講座があります。ぜひ利用してみてください。