最近知った便利なGitコマンド・オプションを使い所と併せて紹介します。
ファイル内の特定の編集だけステージしたい
$ git add --patch
addコマンドに--patch(もしくは-p)
オプションをつけると修正した塊(ハンク)ごとにステージするかどうかを選択できます
$ git add --patch
diff --git a/nvim/dein.toml b/nvim/dein.toml
index 964ebe1..69af6f8 100644
--- a/nvim/dein.toml
+++ b/nvim/dein.toml
@@ -621,9 +621,6 @@
+[[plugins]]
+repo = 'Shougo/dein.vim'
Stage this hunk [y,n,q,a,d,e,?]?
基本的にはy(es), n(o)でステージするハンクを選んでいくだけです(?を実行すれば各コマンドの内容が表示されます)
自分の想定していない修正が入っていないかステージする前に必ず確認したいのでaddコマンドは必ずこのオプションとともに実行するようにしています
ちょっとした修正を前のコミットに含めてしまいたい
$ git commit --amend --no-edit
ちょっとした修正をgit add
したあとに↑のコマンドを実行することで前のコミットに修正を取り入れることができます
直前のコミットをリモートにpushしてしまった場合は使えません
また, コミットメッセージも修正したい場合は--no-edit
コマンドなしで実行したらできます
新規作成したファイルが間違ってignoreされてないか確認する
$ git status --ignored | grep searching_file
新しく作成したファイルがなぜかignoreされていてコミットに含めるのを忘れてしまうことってあると思います(ないですかね)
git status
に--ignored
オプションをつけるとignoreされているファイルも合わせて表示してくれるので簡単に確認できます
そのまま実行するとignoreされているファイルが多いときは探すのがめんどくさいのでgrepしてもよいです
作業ディレクトリから不要なファイルを削除したい
$ git clean --interactive
一時的に何かしらのテスト用ファイルを作ったりすること、あると思います。その後必要なくなったので削除したい, そんなときはgit clean
を実行することで綺麗な状態にできます。--interactive(もしくは-i)
オプションをつけることで以下のように対話形式で削除するファイルを選択できるので誤って必要なファイルを削除することを防げます。
$ git clean --interactive
Would remove the following items:
.DS_Store test.py
*** Commands ***
1: clean 2: filter by pattern 3: select by numbers 4: ask each 5: quit 6: help
What now>
なおgit clean
するとファイルが完全に削除されるので一応ファイルの変更を残しておきたいときはgit stash --all
します
割り込み作業が入って別ブランチを切らないといけない
$ git worktree add -b hotfix/fatal-bug hotfix
何かしらの作業中に別の作業をする必要が出たときgit stash
してgit checkout -b hotfix/fatal-bug
のようにするのはちょっとめんどくさいですね
同じワーキングツリーでbranchを切り分けるのではなくワーキングツリー自体を新しく追加することで簡単に作業branchを切り替えることができます
git worktree add -b ブランチ名 パス名
とすることで新しくワーキングツリーが指定したパスに追加されます
↑の例だとhotfixディレクトリが新規に作成されるのでcd hotfix
して実際に作業を行なうことができます
作業が終わりpushまでしてしまったらルートディレクトリに戻ってrm -rf hotfix
で作成されたhotfixディレクトリを削除してgit worktree remove
もしくはgit worktree prune
するだけです
まとめ
↑で紹介したコマンドを利用することで雑なコミットをしてしまったり作業ディレクトリが汚れるのをある程度防げるような気がします
あとはbranchの切り方にも気をつけて綺麗なバージョン管理をしていきたいです