Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What is going on with this article?
@tkhshiq

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

間違えたブランチで作業し始めてしまった時の対処法「$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/

1
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
tkhshiq
プログラミング初学者です。 自分のアウトプット用に投稿します。 間違いありましたらご指摘ください!

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
1
Help us understand the problem. What is going on with this article?