💻

覚えておくと便利なGitコマンド集

3 min read

これまで出会ったGitコマンドを備忘録として残しておこうかなと思います。
初めて見るコマンドがあったらぜひ使ってみてください!

ブランチを改名したい

ローカルでブランチを切った時からリモートにpushする時までで、ブランチを改名したいタイミングってありますよね。そういう時はこのコマンドで簡単に改名できます。

$ git branch -m [<oldbranch>] <newbranch>

変更内容を一時的に保存・退避したい

コミットはしたくないが、ブランチ切り替えなどで一時的に変更内容を保存・退避させておきたい時に便利です。
stashした変更はshowで確認、popで復帰できます。

$ git stash
$ git stash show
$ git stash pop

コミットログの一覧を見たい

これまでのコミットログ一覧をパッと見れます。

$ git log --oneline

ファイルを検索したい

リポジトリ内のカレントディレクトリ下にあるファイルを高速かつ高機能に検索できます。
-iオプションは大文字・小文字の区別を無視し、-Pオプションを使うとPerl互換の正規表現を利用できます。
--and, --or, --notオプションを用いて複数の条件設定もできます。

$ git grep [-i] [-P] <pattern> [--and|--or|--not <pattern>...]

コミットやブランチの差分を見たい

2つのコミットやブランチ間の差分を確認したい時に便利です。例はブランチの場合。

$ git diff <ブランチA> <ブランチB>

コミットログツリーを可視化したい

コミットログツリーを視覚的に把握したい場合に便利です。

$ git log --graph

別ブランチの特定のコミットだけ取り込みたい

ブランチ全てはいらないが特定のコミットだけを取り込みたい場合に便利です。

$ git cherry-pick <commit>

特定のPRで扱われているブランチをローカルに持ってきたい

PRで出されているブランチの動作をローカルで確認したい場合に便利です。

$ git fetch origin pull/ID/head:BRANCHNAME

変更内容を全て破棄したい

未コミットの変更をすべて破棄します。
追跡されているファイルはすべて編集前の状態 (HEAD)に戻り、削除したファイルも復帰されます。
追跡されていないファイル(新規ファイル)はそのまま残ります。

$ git reset --hard

直前のコミットに変更を追加したい

一度コミットしたけど、次の作業内容も一緒のコミットに追加したい、という場合に便利です。
--no-editオプションをつければコミットメッセージの編集を飛ばせます。

$ git commit --amend (--no-edit)

気を付けたいのが、amend することでコミットハッシュが書き換わってしまうという点。
コミットを修正してリモートリポジトリにpushしようとしたらエラーが出る場合、$ git push --force-with-leaseするとうまくpushできるかと思います。

ベースブランチを置き換えたい

rebaseは枝分かれを解消し、きれいに1つにまとめてくれます。
mergeとうまく使い分けたいですね。(僕も正解が分かってない。)

$ git rebase <upstream>

過去のコミットを編集したい場合

例えば、「直近2つのコミットを1つにまとめたい」、「3つ前のコミットメッセージを修正したい」、「5つ前のコミットを削除したい」など、複数にわたるコミットを編集したい場合に便利です。

$ git rebase -i HEAD~X (Xは数字)

2つにわたって編集したいなら HEAD~2、3つにわたって編集したいならHEAD~3という感じ。
このコマンドを打つと以下のような画面になるので、自分がやりたいことに応じてコマンドを選択します。

pick af42728 hogehoge
pick dc0944f fugafuga

# Rebase 2505c1e..dc0944f onto 2505c1e (2 commands)
#
# Commands:
# p, pick <commit> = use commit
# r, reword <commit> = use commit, but edit the commit message
# e, edit <commit> = use commit, but stop for amending
# s, squash <commit> = use commit, but meld into previous commit
# f, fixup <commit> = like "squash", but discard this commit's log message
# x, exec <command> = run command (the rest of the line) using shell
# b, break = stop here (continue rebase later with 'git rebase --continue')
# d, drop <commit> = remove commit
# l, label <label> = label current HEAD with a name
# t, reset <label> = reset HEAD to a label
# m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]
# .       create a merge commit using the original merge commit's
# .       message (or the oneline, if no original merge commit was
# .       specified). Use -c <commit> to reword the commit message.
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
"~/Desktop/Nuno Theme Starter Files/.git/rebase-merge/git-rebase-todo" 28L, 1226C

まとめ

余談ですが、よく使うGitコマンドはshellにエイリアスを登録しておくのがオススメです。
Gitには本当に色々なコマンドがあって覚えられない...
僕が知らないコマンドもまだまだあると思うので、便利なコマンドに出会ったら、随時ここに追加していきます。