- 投稿日:2020-02-14T22:58:38+09:00
Git 間違ってmasterで作業してしまった時のコマンド
- 投稿日:2020-02-14T20:38:22+09:00
お困りのあなたにgit stash!!
まず、はじめにgitは、1つの作業テーマに1つのブランチを作成して作業します。
だいたい機能追加とかバグ修正とかの単位でブランチを作って作業します。(ちゃんとやってますよね?)
そんな中で、こんな時ありませんか?
- ブランチを間違えて作業してしまっていた!!!やべ!!
- あるブランチで作業中だけど、いますぐ他のブランチでやりたいことができた。ブランチを切り替えるためにコミットしないといけないけど、作業すごく中途半端だからコミットはしたくない、、、
- 作業の途中で別の修正を優先してお願いされる、、、、そんな時は、別のブランチに切り替えないといけない。何も考えずブランチを切り替えるとエラー。。。
上記の場合、ブランチを切り替えたい、、、
でもコミットしていない変更点があってブランチを切り替えられず、「変更をコミットしてください」と怒られる
その時の解決策としては大きく2つあります。
- 1つ目は、コミットしてしまうことです。
ある程度編集が落ち着いているのであれば、アドしてコミットしてしまっていいと思います。- 2つ目がgit stashを使うことです。
こちらが今回の本題です。では、git stashについて説明します。
git stashとは一時的に変更を保存すること
まず、git stashとは変更を一時的に保存しておくことです。
git stashをするとローカルの作業ファイルが綺麗な(変更点のない)状態になります
そうすると、自由にブランチを切り替えることができます。git stashの流れ
git stashの大まかな流れを説明します
変更を一時退避させる
下記のコマンドでコミットをまだしていない変更点を一時退避します
コミットしていない変更点なので、addしているかどうかは関係ありませんターミナルgit stash -uオプション-uについて
上記のコマンドについている-uは--include-untrackedの略です
Gitがまだ追跡を開始いていない新規作成のファイルも一時退避させるためのオプションです
このオプションをつけないと新規作成したファイルなどは一時退避されませんコミットメッセージをつける
作業ファイルを確認してみましょう
変更した箇所が最新のコミット状態に戻っていると思います。
では、変更はどのように保存されているかを確認しましょう
下記のようなコマンドでコミットメッセージを残すことも可能です
コミットメッセージmessage
を残していますgit stash push ”message”
git stash save
は非推奨となったようです一時退避を確認
確認は以下のコマンドでできます。
実行結果が一時退避させた変更点になりますターミナルgit stash list // 実行結果 stash@{0}: WIP on hoge_branch: 7ea2020 Update hoge.rb実行結果について説明します。
スタッシュ名stash@{0}
はブランチ名hoge_branch
の作業でコミットハッシュ7ea2020
のコミットメッセージUpdate hoge.rb
の変更です
以上が実行結果の内容ですスタッシュした内容の詳細を確認する
下記のコマンドで一時退避した内容の詳細を見ることができます
ターミナルgit stash show -p ハッシュ名別ブランチで作業スタート
一時退避ができていれば、
git status
などで作業ファイルが綺麗な状態か確認し、
ブランチを切り替えて作業をしましょう。一時退避を戻す
作業が完了したら元の状態に戻したいと思うので、戻していきましょう
下記のコマンドで一時退避を現在いるブランチに反映させることができます
下記のコマンドはスタッシュ名stash@{0}
を反映させる時のコマンドです
スタッシュ名を指定しない時は直前のスタッシュが反映されますターミナルgit stash apply stash@{0}使い終わった一時退避を削除する
使い終わったスタッシュは削除しましょう
ためていくと履歴がカオスなことになるので、こまめに消すことをオススメします!!ターミナルgit stash drop stash@{0}以上がgit stashを使って行う作業の大きな流れです。
ここからは、もっと便利なgit stashの機能について説明します。
その他の便利機能
一時退避した内容を反映と削除を一緒にする
apply
とdrop
をいっぺんにやってくれるコマンドですターミナルgit stash pop stash@{0}インデックスの内容もそのまま一緒に一時退避する
下記のコマンドでインデックスの内容(addしたファイル)をそのままに一時退避することもできます
ターミナルgit stash -kオプション:
-k
もしくは--keep-index
スタッシュを全て消す
下記のコマンドで一時退避したスタッシュを全部消すことができます
全て消えてしまうので注意してくださいターミナル$git stash clear以上です!!!
ここまで読んでいただきありがとうございました!!
疑問、気になるところがございましたら、質問、コメントよろしくお願いします!!!
- 投稿日:2020-02-14T17:57:56+09:00
Middleman ローカル環境の立ち上げ方 流れ
- 投稿日:2020-02-14T11:38:24+09:00
Git ターミナルでの操作コマンドのまとめ②
はじめに
Gitでの基礎的なコマンド(
init
clone
add
commit
push
pull
)の理解はできました。
なので今回はlog
status
diff
branch
merge
fetch
について学習したことをまとめていきます。logについて
$ git log xxxx commit 0e532b7a21076a6c7201d95a244e720de91727a3 (HEAD -> master, origin/master, origin/HEAD) Author: xxxx-xxxxxxxx <xxxxxxx@gmail.com> Date: Tue Feb 18 18:01:02 2020 +0900 コメント内容リポジトリにコミットした履歴を確認できます。
logから出る時はq
を押します。statusについて
$ git status On branch master Your branch is up to date with 'origin/master'. nothing to commit, working tree clean追加/変更されたファイルの情報を表示します。
何もない場合は上記のような表示になります。diffについて
$ git diff xxxx特定のファイルの何処を編集したのか知りたい場合加えられた変更を確認します。
branchについて
$ git branch xxxx新たなブランチを作成します。
因みにブランチの切り替えはgit checkout xxxx
で行います。mergeについて
$ git merge xxxx現在作業しているブランチに、別のブランチで行われた変更点を反映させます。
fetchについて
$ git fetchリポジトリの更新内容を、自分の開発環境に取り入れる。
※pullとは別物の概念。おわりに
最初はターミナルでの操作は難しいと感じるところはありましたが、何度も繰り返し学習していると慣れてきました。
そのほかには、下記の参考サイトなどの記事を見て概念を理解することでより一層理解しやすいところがありました。参考サイトの一覧
「【Git入門】branchを指定してcloneする方法をわかりやすく解説」
https://www.sejuku.net/blog/71801「はじめてのGit!git statusで変更内容を確認する方法」
https://www.sejuku.net/blog/71857「過去のファイルと比較しよう! git-diffの使い方を解説」
https://www.sejuku.net/blog/70946「git mergeでブランチをマージしよう!いろんな疑問を徹底解説」
https://www.sejuku.net/blog/71003「共同開発の第一歩!git fetchを正しく理解しよう!」
https://www.sejuku.net/blog/71164
- 投稿日:2020-02-14T11:37:36+09:00
.gitignoreの設定
はじめに
Githubでpushするときにrequirements.txtに載せる必要のないものがあったため、.gitignoreで反映されないようにするための手順をまとめておきます。
.gitignoreの設定
1、対象のプロジェクト直下に「.gitignore」を作成する。
2、「.gitignore」に反映させたくはないものを記載する。
例えば、今回のアプリ作成の場合で言えば、仮想環境の「.venv」や「db.sqlite3」になるのでその内容を記載する。おわりに
今回は対象のデータが少ない場合だったので対象のファイルやデータを記載するだけで済みました。
もっとより細かく設定したい場合は「.gitignoreを使ってGitで無視するファイルを指定する」の記事に詳細が載っているので参考にしてみてください。参考サイト
「.gitignoreを使ってGitで無視するファイルを指定する」
http://cly7796.net/wp/other/to-specify-the-file-to-be-ignored-by-git-using-the-gitignore/
- 投稿日:2020-02-14T11:11:06+09:00
?【GitHub】ブラウザからプルリクのファイルを再度編集しようとしてもできないときの対応
- 投稿日:2020-02-14T08:51:09+09:00
[Git]stash の戻し忘れを git hooks で防止してみよう
前フリ
みなさんは
git stash
をつかっていますか?
簡単に説明しますと、まだ commit や add はしていない作業中の変更内容を退避しておける、というコマンドです。git stash についてのわかりやすい説明はこちら
【git stash】コミットはせずに変更を退避したいとき - Qiitaありがちなのはこんな場合です。
- 作業中に急な対応等で別の作業ブランチに移動したい
- しかし、やりかけの作業が邪魔をしてブランチの移動ができない
- まだ中途半端な状態だからコミットはしたくない
こんなときに
git stash
を実行すると、作業中の変更をそのまま退避してくれます。なので、別ブランチの用件を片付けて、また元の作業ブランチに戻り、退避していた変更を元に戻すと、当初の状態に戻ってこれる、というものです。しかし
そんな便利な
git stash
なんですが、1つ難点があります。
退避した変更を元に戻し忘れることがあります。
git stash
を実行すると、git status
の状態がnothing to commit, working tree clean
になります。要は変更中のファイルは何もないときと同じ表示です。こうなると何が困るかというとgit stash
を実行していたことを忘れてしまう ということが起こります。さすがに
git stash
直後は覚えているんですが、別のブランチに移動したり、そっちの作業に追われたりして、さらに間が空いてしまうとけっこう忘れます。解決案
忘れてしまう最大の原因は git stash してもしなくても見た目上の区別が全くつかない ことではないかと思います。ならば、見た目でわかるようにすれば解決できるのでは?と考えました。
というわけで、少々前置きが長くなりましたが今日は git stashしたら画面にそれを表示させて変更の戻し忘れを防止するツール を作ってみましたのでそちらをご紹介いたします。
動作確認済み環境
- git version 2.23.0
- git version 2.11.0.windows.3
Windows は GitBash で確認しています。
導入手順
Git の Hooks という機能を使います。git stash していることを通知してほしいタイミングとして、ブランチを移動した直後 に stash があることを画面に出してくれれば忘れにくいと思いましたので、
git checkout
を行うたびに stash の有無を画面に表示させる という動作をさせるようにしてみます。
post-checkout
というまさにおあつらえ向きなフックが用意されていましたw遠慮なくこちらを使うことにします。post-checkout 作成
開発中のリポジトリ直下まで移動したら以下の手順で
post-checkout
ファイルを作成します。拡張子はいりません。# 新規作成 cp .git/hooks/post-checkout.sample .git/hooks/post-checkout # 実行権限を付与(755じゃなくても実行さえできればなんでもよい) chmod 755 .git/hooks/post-checkoutフックの中身を実装
さきほど作成した
post-checkout
ファイルを以下のように編集してください。post-checkout#!/bin/bash STASH_LIST=$(git stash list) if [ -n "$STASH_LIST" ]; then echo '' echo -e "\033[1;31;239m`echo $STASH_LIST | wc -l | xargs echo` stashed works found.\033[0m" echo -e 'Please exec \033[1m`git stash list`\033[0m command to check the stashed works detail.' fi以上で準備は完了です。
使用例
あとは stash があるとき、ないときで、
git checkout
実行時に以下のように見た目が変わります。ないときは今までと特に何も変わりません。stash があるときはその個数も表示させています。stash が何もないとき
stash があるとき
感想
git hooks のおかげでやりたいことが意外とすんなり実現できました。
これでけっこう stash の戻し忘れは減るんじゃないかとおもいます。もし気になった方はぜひ試してみてください。参考
- 投稿日:2020-02-14T08:51:09+09:00
[Git]stash の戻し忘れを git hooks で防止する
前フリ
みなさんは
git stash
をつかっていますか?
簡単に説明しますと、まだ commit や add はしていない作業中の変更内容を退避しておける、というコマンドです。git stash についてのわかりやすい説明はこちら
【git stash】コミットはせずに変更を退避したいとき - Qiitaありがちなのはこんな場合です。
- 作業中に急な対応等で別の作業ブランチに移動したい
- しかし、やりかけの作業が邪魔をしてブランチの移動ができない
- まだ中途半端な状態だからコミットはしたくない
こんなときに
git stash
を実行すると、作業中の変更をそのまま退避してくれます。なので、別ブランチの用件を片付けて、また元の作業ブランチに戻り、退避していた変更を元に戻すと、当初の状態に戻ってこれる、というものです。しかし
そんな便利な
git stash
なんですが、1つ難点があります。
退避した変更を元に戻し忘れることがあります。
git stash
を実行すると、git status
の状態がnothing to commit, working tree clean
になります。要は変更中のファイルは何もないときと同じ表示です。こうなると何が困るかというとgit stash
を実行していたことを忘れてしまう ということが起こります。さすがに
git stash
直後は覚えているんですが、別のブランチに移動したり、そっちの作業に追われたりして、さらに間が空いてしまうとけっこう忘れます。解決案
忘れてしまう最大の原因は git stash してもしなくても見た目上の区別が全くつかない ことではないかと思います。ならば、見た目でわかるようにすれば解決できるのでは?と考えました。
というわけで、少々前置きが長くなりましたが今日は git stashしたら画面にそれを表示させて変更の戻し忘れを防止するツール を作ってみましたのでそちらをご紹介いたします。
動作確認済み環境
- git version 2.23.0
- git version 2.11.0.windows.3
Windows は GitBash で確認しています。
導入手順
Git の Hooks という機能を使います。git stash していることを通知してほしいタイミングとして、ブランチを移動した直後 に stash があることを画面に出してくれれば忘れにくいと思いましたので、
git checkout
を行うたびに stash の有無を画面に表示させる という動作をさせるようにしてみます。
post-checkout
というまさにおあつらえ向きなフックが用意されていましたw遠慮なくこちらを使うことにします。post-checkout 作成
開発中のリポジトリ直下まで移動したら以下の手順で
post-checkout
ファイルを作成します。拡張子はいりません。# 新規作成 touch .git/hooks/post-checkout # 実行権限を付与(755じゃなくても実行さえできればなんでもよい) chmod 755 .git/hooks/post-checkoutフックの中身を実装
さきほど作成した
post-checkout
ファイルを以下のように編集してください。post-checkout#!/bin/bash STASH_LIST=$(git stash list) if [ -n "$STASH_LIST" ]; then echo '' echo -e "\033[1;31;239m`echo $STASH_LIST | wc -l | xargs echo` stashed works found.\033[0m" echo -e 'Please exec \033[1m`git stash list`\033[0m command to check the stashed works detail.' fi以上で準備は完了です。
使用例
あとは stash があるとき、ないときで、
git checkout
実行時に以下のように見た目が変わります。ないときは今までと特に何も変わりません。stash があるときはその個数も表示させています。stash が何もないとき
stash があるとき
感想
git hooks のおかげでやりたいことが意外とすんなり実現できました。
これでけっこう stash の戻し忘れは減るんじゃないかとおもいます。もし気になった方はぜひ試してみてください。参考