0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Git】`git push`が「rejected」された場合&「Please move or remove them before you merge」と言われてしまった場合の対応方法

Posted at

概要

  • 久しぶりに触るEC2サーバーで、ローカルブランチと最新のリモートブランチで差異がありました。サーバー内でいじっていたものがあったのでコミット後、プッシュしたら色々なエラーと出会ってしまったので、その解決手順を残します。

前提

  • サーバー(AWS EC2インスタンス)
    • OS:Ubuntu 18.04.3 LTS
    • Web Server:Apache/2.4.29

エラー内容

  • 特定のファイルのみコミットしたかったので、git addでファイルを選択してステージングエリアに追加した後にgit commit
  • そしてgit pushすると以下のエラーが表示されました。
To https://github.com/xxxxxxxx/xxxxxxxxxxx.git
 ! [rejected]        develop -> develop (non-fast-forward)
error: failed to push some refs to 'https://github.com/xxxxxxxx/xxxxxxxxxxx.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
  • pushしようとしたブランチ(develop)がリモートリポジトリにすでに存在しているものの、リモートブランチの状態がローカルブランチの状態と異なるため、リジェクトされた、という内容です。プッシュに失敗しています。
  • 4つ目のヒントで、リモートリポジトリにプッシュする前にリモートの変更をローカルにマージする必要があることを示唆しています。ということで、マージするところから始めていきます。
  • 結論、以下の2つが問題点と対応方法でした。
    • リモートブランチの状態とローカルブランチの状態が異なっていた→ローカルにマージが必要
    • 現在の作業ツリーに存在する未追跡ファイルがあった→stashで一時避難が必要

実施手順

①リモートとローカルのブランチの状態を同じにする
②未追跡ファイルを一時的に保存する
③リモートからローカルへマージ後、プッシュする

リモートとローカルのブランチの状態を同じにする

  • 以下コマンドでリモートブランチの変更を取得します。
$ git fetch
  • ローカルブランチをリモートブランチの最新の状態に更新します。
$ git merge origin/develop

error: The following untracked working tree files would be overwritten by merge:
	README.md
	xxxx/xxxx/xxxxx.sql
Please move or remove them before you merge.
Aborting
  • このエラーメッセージは、マージしようとしているブランチに、現在の作業ツリーに存在する未追跡ファイルが含まれているため、マージが中止されたことを示しています。削除するか、stashするかで解決できます。
    • この未追跡ファイルは、今回コミットしたくない部分になります。

未追跡ファイルを一時的に保存する

$ git stash push --include-untracked
  • ちなみに、保存する必要がない場合は、以下コマンドで削除できます。
    • dオプションはトラッキングしていない新しいフォルダもしくは新しいファイルを指定するオプション
$ git clean -f -d

リモートからローカルへマージ後、プッシュする

  • マージできるようになったので、プルします。
    • 競合が発生する可能性があるので、その場合は手動で確認したり変更したりした方が良いかもしれません
$ git pull
  • これでプッシュできる状態になったのでプッシュします。
    • 最新情報が一致するため通常のプッシュが行えます
$ git push origin develop 
  • 必要に応じて、保存したstashを復元したい場合はgit stash applyコマンドを使います。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?