LoginSignup
0
2

More than 3 years have passed since last update.

間違えたブランチで作業し始めてしまった時の対処法「git stash」。又、git stashやcheckoutができなくなった時の対処法。

Last updated at Posted at 2020-08-02

間違えたブランチで作業し始めてしまった時の対処法「$git stash」。
又、git stashやcheckoutができなくなった時の対処法。

本記事の狙い

gitで躓いたことを自分用に記録してゆきます。

問題

間違えて統合ブランチで作業を始めちゃった。。。

ブランチを切り替えようと
$git stashすると
app/views/layouts/application.html.erb: needs merge
と言われstashできなかった。

解決方法

git stashで一時保存する。

以下で$git stashとはなんぞやを説明しています。
知っている方は下記手順まで。

$git stash 
を実行することでステージングされている・いないデータを
別の場所でそれぞれ一時保管しておける。

ただし、以下は stash されない。
・まだステージングされていない作業コピー内の新しいファイル
・無視されたファイル(gitignoreに記述されたファイル)

▼参考:作業コピーの位置づけ(スライド15p)
https://www.slideshare.net/yoshinoriyamanouchi12/git-79086120

stash後にcheckoutやその他git操作が行える。
checkoutして本来居たかったブランチに移り
$git stash pop
でstash から変更が削除され、現在のにブランチに再適用される。


$git stash apply
を使用してその変更を stash に維持することも可能。

※stash は作業しているローカルの Git リポジトリにのみ適用される。
プッシュ時にサーバーには転送されない。

▼参考:stashについて
https://www.atlassian.com/ja/git/tutorials/saving-changes/git-stash
▼参考:リモート追跡ブランチについて
https://qiita.com/uasi/items/69368c17c79e99aaddbf

手順

$git status 
で問題を特定します。

Unmerged paths:
(use "git add ..." to mark resolution)
both modified: (コンフリクトが起きているファイル)

=>エディターでコンフリクト箇所を修正し、保存。

Changes not staged for commit:
(use "git add ..." to update what will be committed)
(use "git restore ..." to discard changes in working directory)
(変更されているがステージング($git add (ファイル名))されていないファイル)

=>コンフリクト修正したファイルもろともステージング

この状態で

$git stash
$git checkout (行きたいファイル)

git stashの使い方

$git stash 

一時的に作業した内容を保存。

$git checkout (branch名)

お望みのブランチ(branch名)へ移動。

$git stash pop

stash前の状態に戻す。

$git stash
$git checkout
$git pop

を行うとcheckout前の状態をcheckout後のブランチへ反映させるため、
コンフリクトが起きます。

またコンフリクトを解消し、ステージング($git add (ファイル名))すれば
checkout、もしくはstash等操作ができる状態になります。

$git stash apply

お望みのブランチ(branch名)にstashした内容を反映。

因みに…

$git stash list

stash 中の内容が見れる。

$ git stash list --date=local

とすることで作成日時を表示できる。

$git stash apply stash@{2}

で望んだstashのみ反映させられる。
▼参考
https://gist.github.com/koudaiii/526707492ebc5915596e
https://ccbaxy.xyz/blog/2020/03/20/ruby33/

0
2
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
2