20200214のGitに関する記事は8件です。

Git 間違ってmasterで作業してしまった時のコマンド

思わずdevelopmenntのつもりで作業してしまった! または止むを得ずmasterで作業せざるを得なかった場合のコマンド備忘録

特にデプロイ確認の際には本番環境で作業せざるをえない。

作業内容を退避させる

$ git stash save

これでmasterで作業した分を一時保存

新ブランチに移動

$ git checkout -b development

新ブランチで作業内容を復元

$ git stash pop

これにて マスターの作業内容が無事に新ブランチに移ったとさ。 チャンチャン!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

お困りのあなたに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の機能について説明します。

その他の便利機能

一時退避した内容を反映と削除を一緒にする

applydropをいっぺんにやってくれるコマンドです

ターミナル
git stash pop stash@{0}

インデックスの内容もそのまま一緒に一時退避する

下記のコマンドでインデックスの内容(addしたファイル)をそのままに一時退避することもできます

ターミナル
git stash -k

オプション:-k もしくは --keep-index

スタッシュを全て消す

下記のコマンドで一時退避したスタッシュを全部消すことができます
全て消えてしまうので注意してください

ターミナル
$git stash clear

以上です!!!
ここまで読んでいただきありがとうございました!!
疑問、気になるところがございましたら、質問、コメントよろしくお願いします!!!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Middleman ローカル環境の立ち上げ方 流れ

気をつけること

  • ruby,nodeのバージョンを確認すること。
  • 指定されているversionを合わす。

commandでの流れ

git clone --recursive git@github.com:なんとかなんとか.git
cd なんとか.com
npm run setup
bundle exec middleman build
bundle exec middleman server

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

.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/

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

?【GitHub】ブラウザからプルリクのファイルを再度編集しようとしてもできないときの対応

環境

GitHub

やりたいこと

GitHubにてPull Requestを出し、再度ファイルを編集しようとした際に鉛筆アイコンをクリックしようとすると下記文言が表示されて編集できない

You must be on a branch to make or propose changes to this file

band_top1 - コピー.png

やったこと

右上にあるTree:[コミット番号]をクリックして対象のブランチに変更

band_top1 - コピー.png

編集可能

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[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 が何もないとき

スクリーンショット 2020-02-14 8.46.39.png

stash があるとき

スクリーンショット 2020-02-14 8.47.41.png

感想

git hooks のおかげでやりたいことが意外とすんなり実現できました。
これでけっこう stash の戻し忘れは減るんじゃないかとおもいます。もし気になった方はぜひ試してみてください。

参考

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[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 が何もないとき

スクリーンショット 2020-02-14 8.46.39.png

stash があるとき

スクリーンショット 2020-02-14 8.47.41.png

感想

git hooks のおかげでやりたいことが意外とすんなり実現できました。
これでけっこう stash の戻し忘れは減るんじゃないかとおもいます。もし気になった方はぜひ試してみてください。

参考

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む