ホーム DoRuby 勇気が湧く!gitやらかし防止コマンド&オプション集!
 

勇気が湧く!gitやらかし防止コマンド&オプション集!

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

皆さんはgitを使っていてミスをしてしまうことはありませんか?
ミスとまではいわずとも「あの変更いらなかったな」とか「間違えてコミットしちゃった」とかはあると思います。

それらをなくすために一番大事なのは「確認」です。

確認をより確信あるものにするために個人的によく使うコマンドやオプション、
ミスをしてしまったときになんとかするものを紹介しようと思います。

git diff –cached

git diff はほぼ必須の確認コマンドだと思います。
現在ブランチの変更した差分を表示してくれるので、僕はcommitする前には必ず確認しています。
ですが、先にaddをしてしまうと差分を表示してくれません。

--cachedオプションをつけることによって、addした後でも差分を表示できます。
git diffで確認し忘れたときに、いちいちgit reset HEADしてチェックするのはめんどくさいですよね。

git add test.txt

git diff

git add test.txt

git diff --cached

diff --git a/test.txt b/test.txt
index e6a6914..2b70263 100644
--- a/test.txt
+++ b/test.txt
@@ -1,5 +1,5 @@
....以下省略

git status -uall

git statusだけ打っても新しく追加したディレクトリ以下のファイルは表示してくれません。
-uallオプションをつけると全部追跡してくれるので確認することができます。

git status

On branch develop
Untracked files:
  (use "git add <file>..." to include in what will be committed)

    testDir/

nothing added to commit but untracked files present (use "git add" to track)

git status -uall

On branch develop
Untracked files:
  (use "git add <file>..." to include in what will be committed)

    testDir/a.txt
    testDir/b.txt
    testDir/c.txt

nothing added to commit but untracked files present (use "git add" to track)

git log –name-status

個人的に一番使うlogのオプションです。
下記のようにそのコミットで変更されたファイルが出力され、
git status + git log のようなイメージで使えます。

git log --name-status

commit 49d8d9c4ff2e3bdfc7fd4e18eb3fa9e5507ed89b
Author: ziguzagu
Date:   Tue Jul 4 16:16:40 2017 +0900

    テストファイル追加

A       test_00.txt

commit 53c55b128356aa960739b5f999b9917ed63a9784
Author: ziguzagu
Date:   Tue Jul 4 16:10:10 2017 +0900

    hugaクラスにメソッド追加

M       app/models/hoge.rb

git reflog

ローカルで行ったcommit, merge, resetなどのログを見ることができます。
マージしていないブランチを消してしまったり、
git reset --hardなどで戻しすぎてしまった場合などでも履歴を見れるので、
任意の時点まで戻すことができます。

git reflog

36336b7 HEAD@{0}: commit: xxxx => cccc
331f0b6 HEAD@{1}: commit (merge): Merge branch 'change_text' into develop
4d02134 HEAD@{2}: checkout: moving from change_text to develop
510169f HEAD@{3}: commit: bbbb => cccc
1ef1996 HEAD@{4}: checkout: moving from develop to change_text
4d02134 HEAD@{5}: commit: bbbb => aaaa
1ef1996 HEAD@{6}: commit: テキスト作成
3057744 HEAD@{7}: checkout: moving from master to develop
3057744 HEAD@{8}: commit (initial): 最初のコミット

git reset --hard 4d02134

上記の例ではcommit: bbbb => aaaaのブランチまでを戻すことができますが、
このやり方の注意点として、以下の点が挙げられるので使用するときは注意しましょう。

  • 現在編集中のファイルは消えてしまう
  • 作業していたブランチを問わずにもどせてしまう

終わりに

ミスをしないための「確認」についての記事になりましたが、
もしミスをしてしまったときの対処法も知っておけば、より勇気を持って動けると思います。
自分はgit reflogでhash値を調べられることを知ってからはmergeに対する恐れは減りました。

最終的には確認の方法を知っていても自分が確認を忘れたり、
間違っているものを正しいと思い込んでたりしたら意味がないのでコマンド以外に
他の人にチェックしてもらえたりするとさらにいいですね。

記事を共有
モバイルバージョンを終了