##はじめに
こんにちは。エンジニアとして働き始めて4日目になりました。
さて今回は、実務でgitで悩んで先輩エンジニアの方に助けていただきました。
その解消法についてまとめましたので、ぜひ参考にしていただけると幸いです。
##対象読者
- 駆け出しエンジニア
- プログラミング初心者
- gitがわからない人
- gitが苦手な人
エラー内容
- gitでブランチを切って、問題となっているところを修正した
- git add .
- git commit -m "hogehoge"
- git push ブランチ名
4でpushしたとき、下記のようなエラーが...
! [rejected] ブランチ名->ブランチ名 (non-fast-forward)
error: failed to push some refs to 'hogehogehogehogehogehogehogehogehoge.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が出来なかったようです。
リモートのブランチがリベース?されていて衝突しまったみたい。
リベースの意味はまた別途調べたいと思います。
##解決方法
先輩エンジニアさんが助けてくれたことをそのまま順を追って調べてみました。
今回の解決方法はおそらく、
ローカルのブランチを一旦消して再度作り直すというやり方です。
gitのローカルの中身(実際にはもっとブランチがありますが今回は省略)
- master
- feature/hogehoge(修正していたブランチ)
手順
-
git reset --soft HEAD^ → feature/hogehogeブランチをコミット前に戻す。
(参考: https://qiita.com/shuntaro_tamura/items/db1aef9cf9d78db50ffe) - git stash → add した部分の履歴を保管しておく
- git checkout master → masterにチェックアウトする
- git branch -D feature/hogehoge → feature/hogehogeブランチを一旦消す
- git pull → masterのリモートの最新情報をローカルに持ってくる
- git checkout feature/hogehoge → 再度、feature/hogehogeブランチを作ってチェックアウトする
- git stash pop → 手順2で保管しておいた履歴を復元する
- git add . → addする
- git commit -m "hogehoge" → commitする
- git push origin feature/hogehoge → pushする
上記でpushに成功しました。
他にもやり方があるみたいですが、今回はこちらのやり方を紹介いたします。
##終わりに
実務に入ってみて、gitって難しいなあと感じました。
多分これからもgitに悩まされるのだろうと思いますが1つ1つ覚えて行けたらなあと思います。
参考になりましたら幸いです。
##参考記事