Gitのコマンド集

普段仕事や日々の勉強でソースコードの管理としてGitを使っています。 そこで、普段良く使うコマンドやトラブルになったときに解決できたコマンドなどをまとめてみました。 このブログを読んでくださっている皆様にも役立つと思います。

コミット内容を確認する

指定したコミットの内容を確認します。また、確認したいコミットのハッシュ値とファイルを指定することで、そのファイルのコミット時の変更内容が確認できます。

# HEADの指すのコミット内容 
$ git show

# ファイル、コミットを指定
$ git show [コミットのハッシュ値]:[ファイル名]

コミットメッセージのみを変更する

間違えた内容のコミットメッセージを書いてしまったときに、コミットメッセージのみを修正します。コミット時に起動するエディタが立ち上がりません。

$ git commit --amend --only -m '[コミットメッセージ]'

前回のコミットからコミット内容を修正する

前回のコミットからファイルを修正します。

$ git add [変更したファイル]
$ git commit --amend

# --no-editでコミットメッセージはそのままで修正内容だけを書き換える
$ git commit --amend --no-edit

直前のコミットを取り消す

直前のコミットを取り消します。引数によりコミットを取り消したあとの変更内容の扱いが変わります。 --hardをつけなければ変更した内容はそのまま残る

# コミットを取り消して、変更内容を残す
$ git reset HEAD^

# コミットを取り消して、変更内容は残したまま、ステージングに追加された状態にする
$ git reset HEAD^ --soft

# コミットを取り消して、変更内容も取り消す
$ git reset HEAD^ --hard

追跡されていないファイルを削除する

# untrakedなファイルやディレクトリを確認する
$ git clean -dn

# untrakedなファイルやディレクトリを削除する
$ git clean -df

直前のコミットからファイルを削除する

直前のコミットからファイルの変更内容を修正、または直前のコミットから新しいファイルを追加したときにファイルを削除します。

$ git checkout HEAD^ [ファイル名]

# ファイルを修正したい場合は修正してステージングに追加する
$ git add [ファイル名]
$ git commit --amend --no-edit

gitだけから削除し、指定したファイルをuntrakedな状態にしたい場合

$ git rm --cached [ファイル名]
$ git commit --amend --no-edit

直前のコミット以外のコミット内容を取り消す

直前のコミット以前にコミットした内容を書き換えます。 例えば最後に行ったコミットから4番目を変更したい場合。

$ git rebase -i HEAD~4

するとエディタが立ち上がるので下記のように変更します。

pick 8f74ea3 first commit
pick a358c18 second commit
pick 1e6431f third commit
pick 8c8509c fourth commit
edit 8f74ea3 first commit
pick a358c18 second commit
pick 1e6431f third commit
pick 8c8509c fourth commit

変更後エディタを閉じるとrebaseが開始され、先程指定したコミットがHEADを指した状態で停止します。
ファイルを変更し、ステージングに追加してから下記コマンドを実行します。

$ git commit --amend --no

これによりエディタで指定されたコミットは修正されました。そして残りのコミットに対してrebaseを進めます。

$ git rebase --continue

コンフリクトが起こればその都度上記のように修正して解消していきます。

修正した変更をもとに戻す

HEADのコミットから変更した内容をHEAD時の状態に戻します。これはステージングに追加したファイルの変更をすべて戻します。

$ git reset HEAD --hard

# リモートブランチと同じ状態に戻すにはHEADではなく、リモートブランチを指定する
$ git reset [origin/ブランチ名] --hard

ステージングに追加した内容を除いた変更のみ、元に戻す場合は下記コマンドで変更します。

$ git checkout .

# ファイルを指定してもどに戻すこともできる
$ git checkout [ファイル名]

ステージングに追加した内容を取り消す

$ git reset
# ファイルを指定してもどに戻すこともできる
$ git reset -- [ファイル名]

ステージングに追加した内容と追加してない内容を入れ替える

ステージングに修正内容を追加してから、追加で修正していき内容を入れ替えたくなった時に使用します。

# -kでステージングにある修正を除く
$ git stash -k
$ git reset --hard
$ git stash pop
$ git add -A

ブランチを削除する

マージ済みなどの必要のないブランチを削除します。

$ git branch -d [ブランチ名]

# マージされていないブランチを削除する
$ git branch -D [ブランチ名]

また、複数ブランチを削除したいときは正規表現などで指定して削除します。
例えばmasterブランチ以外を削除するには下記コマンドを入力します。

$ git branch | grep -v master | xargs git branch -d

gitの操作を取り消す

gitはgitのコマンドなどの操作したログを保存しているので、その履歴からコマンドの取り消しができます。

$ git reflog

過去のgitのコマンド履歴が表示されるので戻りたいハッシュ値を探してresetします。

$ git reset --hard [ハッシュ値]

新しいブランチを作る

現在のブランチからの分岐で新しいブランチを作ります。

$ git checkout -b [新ブランチ名]

# コミットのハッシュ値を指定して、新しいブランチに修正内容を移動します。
$ git checkout -b [新ブランチ名] [コミットのハッシュ値]

別のブランチのファイルの修正内容を反映させる

別のブランチのファイルの修正内容をの内容を現在のブランチに反映させます。

$ git checkout [ブランチ名] -- [ファイル名]

別のブランチのコミット内容を反映させる

別のブランチで変更した内容を別のブランチでもその内容を反映させたいときにおこないます。

# あらかじめ反映させたいコミットのハッシュ値を確認しておく
$ git cherry-pick [コミットのハッシュ値]

リモートのブランチの内容をローカルブランチに反映させる

他の人と同じtopicブランチで作業をしていて、他の人がforce pushなどして自分のローカルにpullできなくなったとき、下記コマンドでローカルブランチを上書きします。

$ git fetch origin
$ git reset --hard oritin/[ブランチ名]

特定バージョンにファイルを戻したい

特定のコミットのときのファイル内容に戻したとき、コミットのハッシュ値を確認しておき、下記コマンドで反映させます。

$ git checkout [コミットのハッシュ値] -- [ディレクトリ/ ファイル名]

ブランチ名を変更する

ブランチ名を変更した時は下記コマンドを入力します。

$ git branch -m [ブランチ名] [新ブランチ名]

修正した内容を一時的に別の場所に退避させる

変更した内容を一時的に退避させて、他のブランチに切り替えたり、他の変更作業を行ったりします。

# -uでuntracked fileも退避の対象にする
$ git stash -u
# 作業ディレクトリから特定のファイルのみstashしたい時
$ git stash [ファイル名]
# branchを切り替えたり、作業したあと
$ git stash apply

stashしたファイルを現在のブランチに適用します。

# stashしたlist一覽を表示
$ git stash list

# 適用したいstashを選び、ブランチ適用する
$ git stash apply "stash@{n}"

# 適用したあとのstashを適用と同時に削除したいとき
$ git stash pop "stash@{n}"

複数のコミットを一つにまとめたい

topicブランチで作業しているときに細かくコミットしながら作業をすすめると最後にtopicブランチの内容をすべてまとめていたいことがあります。
このときは下記コマンドでコミットをまとめることができます。

$ git rebase -i HEAD~4

edit画面が下記のように表示される

pick 8f74ea3 first commit
pick a358c18 second commit
pick 1e6431f third commit
pick 8c8509c fourth commit

例えば、上記のsecond commitから新しいコミットをまとめたい時、second commitにすべてまとめたいコミットを組み合わせたいとすると、second commit以外のpickの箇所をfに変更し保存して閉じると一番古いコミットにすべてまとめることができます。

pick 8f74ea3 first commit
pick a358c18 second commit
f 1e6431f third commit
f 8c8509c fourth commit

組み合わせるコミットの名前を変更したい場合はpickfの代わりにsに変更するとエディタが立ち上がりコミットメッセージを編集することができます。

過去のコミットを見る

$ git log

# 各コミットで変更された内容をみたいとき
$ git log -p

# 変更されたファイル一覽などをみたいとき
$ git log -stat

# ある時間内のlogを見る。たとえば10/1~11/7のlogを見たい時
$ git log --since='2019-10-1' --until='2019-11-7'

# ある文字列が追加されたコミットのみを抜き出す
$ git log -S [検索したい文字列]

# 特定のファイルを含むコミットを検索する
$ git log -- [ディレクトリ/ ファイル名]

# マージコミットのみ表示する
$ git log --merges 

# マージコミットを覗いて表示する
$ git log --no-merges 

# マージコミットを覗いて表示する
$ git log --no-merges 

# コミットログを検索する
$ git log --grep="[検索したい文字列]"

ステージングに追加したファイルの変更を確認します。

$ git diff --cached

コミットやブランチ間の変更内容を確認したい

HEADのコミットやブランチと以前のコミットや別のブランチの内容を比較します 。 HEAD以外のコミットやブランチも同士もdiffを取ることは可能です。

# HEADのコミット内容と以前のコミット内容の差分を確認する
$ git diff HEAD [コミットのハッシュ値]

# 上記のファイルのみの差分を確認する
$ git diff HEAD:[ファイル名] [コミットのハッシュ値]:[ファイル名]

# ブランチ間の差分を確認する
$ git diff master:[ファイル名] develop:[ファイル名]

あるコミットが含まれているマージコミットを探す

あるコミットを含んだマージコミットを検索します。

# コミットのハッシュ値と検索するブランチを指定する
$ git log [コミットのハッシュ値]..[ブランチ名] --ancestry-path --merges

各行が変更されたコミットを確認する

対象のファイルで各業が変更されたコミットを調べたいときに下記コマンドで確認します。

$ git blame [ファイル名]

# -Lで行番号を指定できる
$ git blame -L n,m [ファイル名]

# 関数名でもしてできる
$ git blame -L :funciton [ファイル名]

変更の内容を同時に表示したい場合はlogコマンドで表示させることができます。

$ git log -L n,m:[ファイル名]

コミットを取り消す

特定のコミットを取り消します。revertで取り消すとコミットとして記録されます。

$ git revert [コミットのハッシュ値]

# コミットメッセージを編集する
$ git revert [コミットのハッシュ値] -e

# コミットせずステージングに追加した状態の場合
$ git revert [コミットのハッシュ値] -n

# マージコミットを取り消すとき、2つの親にどちらを戻すか指定するひつがある
# git log で Merge: xxxxxxx yyyyyyy のコミットIDの一番目か2番目を指定する
$ git revert -m 1  [マージコミットのハッシュ値]

取り消した内容をコミットに残したくない場合はrebaseでコミットを取り消します。

# 取り消したいコミット値よりも前のコミット値を指定
$ git rebase -i [コミットのハッシュ値]

エディタが立上がり、下記のように表示されます。

pick 8f74ea3 first commit
pick a358c18 second commit
pick 1e6431f third commit
pick 8c8509c fourth commit

上記からいらないコミットを削除し保存して、エディタを終了すると削除したコミットが削除されます。

リベースやマージを取り消す

リベースやマージの変更のリセットする場合はこの変数を指定することで取り消すことができます。

$ git reset --hard ORIG_HEAD

以上で、今までよく使っているまたは、使ったことのあるGitのコマンドをまとめてみました。 また新しくコマンドを使用したときに随時更新してきたいと思っております。