This is IT

技術、日常

git pushがrejectされてしまう場合

概要

タイトル通り。

❯ git push origin branch-name

To github.com:XXXXXXXX.git
 ! [rejected]        my-ls -> my-ls (non-fast-forward)

error: failed to push some refs to 'github.com:XXXXXX.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.

ここのエラー文にも書いてあるし、ぐぐれば出てくるんだけど、ちゃんとpullすればよいみたい。 でも、「pullしても上手くいかねえよ!?」となったので、記事に残しておく。

pullしてもうまくいかない

❯ git pull

hint: Pulling without specifying how to reconcile divergent branches is
hint: discouraged. You can squelch this message by running one of the following
hint: commands sometime before your next pull:
hint:
hint:   git config pull.rebase false  # merge (the default strategy)
hint:   git config pull.rebase true   # rebase
hint:   git config pull.ff only       # fast-forward only
hint:
hint: You can replace "git config" with "git config --global" to set a default
hint: preference for all repositories. You can also pass --rebase, --no-rebase,
hint: or --ff-only on the command line to override the configured default per
hint: invocation.

There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.

    git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

    git branch --set-upstream-to=origin/<branch> my-ls

これでpullした気になっていた。俺のばかばかばか!!!

エラーにも書いてある通り、git pull <remote> <branch>でpullしなきゃだめ。

コード編集する前に一回pullしておこう

今回の教訓。

コミットが汚くなっていたので、git reset -hard ^HEADとかしまくっていたら、編集したところ全て消えてもとに戻ってしまった。

「pushしたらrejectされた!」ってなる前に、ちゃんとpullをしておいてから編集をしましょう。

そもそも何でこんな目に合ったかは解明できず(前回pushしてから何も触れてないはずなのに)