git pullができないときはstashしてみる!!

複数人でプロジェクトを開発する現場では、gitを使うのが主流となっています。

しかし、gitにまだ慣れていない人はたまに遭遇するエラーににっちもさっちも行かないときがあると思います。

よくあるのがpullをしようとしたらエラーが出てpullできない。

 

こんな感じのエラー

 ! [rejected]        bacchi > bacchi (nonfastforward)

error: failed to push some refs to ‘git@hoge.com:pfg/hoge.combacchi.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.

 

git pullができないときはstashしてみましょう!!

手順をメインで紹介したのち解説をします。

当手順はあくまで1例です。他の原因でpullできないこともあります。

 

git pullできないときのstashの手順

まずはエラーが出てgit pullができないときはgit stashコマンドでstashをします。

git stash

 

git stashとは変更しているファイルすべてを別の場所に保存しておいて一時的に変更していない状態に戻すコマンドです。

なのでgit stashコマンドを実行したあとにgit statusで状態を確認するとなにも表示されなくなります。

※ 新規で作成したファイル等はstashでもとに戻すことはできません。

 

git stashをしたあとにgit pullまたはgit pull origin <ブランチ名>をしてみましょう。

git pull origin hoge

 

するとpullできるはずです!

pullできたーーー!!で終わらせてはいけません。次の手順を忘れずに!

 

pullができてリモートの変更を自分のパソコン(ローカル)に取り込むことができたら先程stashして一時的に保存した変更をもとに戻しましょう。

 

まず一時的に保存されているものを一覧で確認します。

git stash list

 

すると下のように表示されます。

stash@{0}: WIP on (no branch): hoge

 

stashは1回だけでなくいくつも追加でstashすることができます。

2つ以上stashした場合、最初の「stash@{0}」の部分の数字が0,1,2と増えて一覧で表示されます。

0が一番最近stashされたものです。

一覧で表示されたものから戻したいstashを確認しておきましょう。

 

stashを戻すコマンドは以下です。

git stash pop stash@{0}

 

git stash popコマンドで指定のstashをもとに戻すことができます。

場合によってはここでコンフリクトが発生しますが焦らず一つひとつ直して上げましょう。修正したらコンフリクトを修正した分をaddしてコミットすれば作業を始めてOKです!!

stashを一度しかしていない場合はgit stash popのみで大丈夫です。

 

手順まとめ

① git stash

② git pull ~~~

③ git stash listで確認

④ git stash pop hoge

⑤ コンフリクトを治す -> コンフリクト解消コミット

 

なぜpullできないのか

ではここから解説をしたいと思います。

そもそもpullとはリモートのすべての情報を自分のパソコンに取り込み更新(fetch)をしてあるブランチを取り込む(merge)作業をしています。

ちょい難しく言っていますが一つのブランチを自分のブランチにくっつけることをしています。

結果ソースコードを自動で書き換えてくれるのですが変更途中のソースを書き換えることができないのです。

なので変更途中のソースstashして一度別の所に保存し変更途中を取り消しソースをもとに戻しま取り消します。

気づく人もいらっしゃると思いますが、もちろん今変更しているものをコミットしてpullできるようにすることもできます。しかし、まだコミット段階じゃなくてコミットしたくないという時も少なくないはずです。

このようなときにstashを使いましょう。

このような要因でpullができないときにstashはとても有効ですがすべてのシチュエーションで対応できるものではありません。その他のパターンはまた別記事にまとめます。

stashをうまく使って効率的なgitライフを!!

 

まとめ

変更しているファイルがあってpullできない…

でもまだコミットしたくないよー

ってときはstashしましょう!!!

 

label

書いた人

銀座の事業会社でエンジニアをやっております。 まだまだぺーぺーです。

2 Comments

  1. クリクリ 2018年9月7日 Reply
    • yamasouAuthor 2018年9月7日 Reply

コメント

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です