Gitでよく使うコマンドのまとめ

Gitの基本操作を勉強したのでメモしておく。

リポジトリを複製する

リモートリポジトリの内容をローカルに複製(ダウンロード)することができる。リポジトリにはrsync://example.com/path/to/repo.git/git://example.com/path/to/repo.git/ssh://[user@]example.com[:port]/path/to/repo.git/などの形式で対象を指定することができる。

git clone リポジトリURL

リポジトリを作成する

カレントディレクトリにリポジトリを作成する。

git init

ブランチを一覧表示する

ローカルリポジトリに存在するブランチの一覧を表示する。

git branch

ブランチを作成する

ローカルリポジトリにブランチを新しく作成する。

git branch ブランチ名

ブランチの名前を変更する

checkoutしているブランチの名前を変更する。

git branch -m 変更後の名前

ブランチを削除する

ローカルリポジトリのブランチを削除する。

git branch -D ブランチ名

リモートリポジトリのブランチも含めて削除する場合は、このままプッシュすれば削除することが出来る。プッシュコマンドは以下のような書式で記述できる。

git push プッシュ先リポジトリ ローカルのブランチ名:リモートのブランチ名

上記を踏まえて,ローカルのブランチを削除した状態で以下のようにプッシュすることでリモートのリポジトリを削除することが出来る。

git push origin :ブランチ名

ブランチを切り替える

リモートリポジトリのブランチを取得し,ローカルリポジトリのブランチの内容を書き換える。

git checkout ブランチ名

ファイルを編集前の状態に戻す

リモートリポジトリのブランチからファイルを取得する。

git checkout ファイルパス

現在のブランチに含まれる内容を基に,新しいブランチを作成する

現在checkoutしているブランチの内容を基にして,新しいブランチを作成する。

git checkout -b ブランチ名

ブランチに他のブランチの内容をマージする

checkoutしているブランチに他のブランチの内容をマージする。マージした結果,コンフリクトが起こることもある。 コンフリクトが起こった場合は,手動でソースコードを修正する必要がある。

git merge ブランチ名

リモートリポジトリの内容を取り寄せる

リモートリポジトリのブランチの内容を取り寄せる。取り寄せただけでローカルリポジトリのブランチへのマージは行われない。

git fetch

リモートリポジトリの内容を取り寄せて,マージする

リモートリポジトリのブランチの内容を取り寄せ,マージを行う。

git pull

リモートリポジトリの内容を取り寄せて,リベースする

リモートリポジトリのブランチの内容を取り寄せ,リベースを行う。新しくコミットを積む前にgit pullし忘れた場合や,コミット(枝分かれ)をキレイにしたいときに使う。

git pull --rebase

ブランチのコミット履歴を確認する

checkoutしているブランチに積まれているコミットの履歴を確認する。

git log

変更のあるファイルを確認する

変更のあるファイルを確認する。

git status

ファイルの差分を確認する

編集したファイルの,元の状態との差分を確認する。

git diff

ファイルの更新をステージング反映する

ファイルの更新をステージング(commit可能な状態)に反映する。

git add ファイルパス

ファイルの削除をステージングに反映する

ファイルの削除をステージング(commit可能な状態)に反映する。

git rm ファイルパス

更新内容をステージングから外す

ファイルの編集内容はそのままで,ステージングからファイルを外す(addをする前の状態に戻す)。

git reset

全ての内容を元に戻す

ファイルの編集内容ごと,全てのファイルを元の状態に戻す。HEAD~1やHEAD~2などと指定すると,いくつか前のコミットまで戻ることが出来る。

git reset --hard HEAD

ブランチに更新内容を反映する

checkoutしたブランチに対して自分で追加した更新内容を反映する。

git commit

–amendオプションを付けることで,1つ前のコミットに対してコミットの内容を上書きすることが出来る。

git commit --amend

ローカルリポジトリのコミットをリモートリポジトリに反映する

ローカルリポジトリで積んだコミットをリモートリポジトリに反映することが出来る。

git push origin HEAD

–amendを使ったコミットなどを行った場合は,-fオプションを付けることでプッシュすることができる。

git push -f origin HEAD

コミットの歴史を書き換える

派生元のコミットを最新のコミットにすることが出来る。masterの古いコミットを元に派生したブランチがあった場合,そのブランチをmasterの最新のコミットを元に派生したブランチにすることが出来る。

git rebase ブランチ名

コミットの歴史を書き換えることが出来る。実行すると,エディタが立ち上がりコミットの編集モードへと入る。originを指定することでリモートのブランチを基にしてコミットの歴史を書き換える。

git rebase -i origin ブランチ名

rebaseした内容を完了する

rebaseによるコミット履歴の変更を完了する。

git rebase --continue

rebaseした内容を元に戻す

rebaseによるコミット履歴の変更を取り止める。

git rebase --abort

特定のコミットへ戻る

reflogでコミットのハッシュ値を調べる。

git reflog

reflogで調べたハッシュを使い,resetで特定のコミットへ戻る。

git reset --hard ハッシュ値

他のブランチの特定のコミットを適用する

cherry-pickで特定のコミットのみをつまみ食いする。reflog,もしくは他の情報から調べたハッシュ値を使用する。

git cherry-pick ハッシュ値

コミットを打ち消す(コミット履歴は積まれる)

ブランチへのコミットを打ち消す。コミットが無かったことになるように見えるが、実際はコミット履歴は積まれている形で変更が加わる。打ち消したいコミットハッシュを指定して使用する。ここには枝分かれしたブランチ名も指定することが出来る。

git revert コミットハッシュ

複数のファイルの内容を検索する

複数のファイルから,特定のキーワードにマッチする行を検索することが出来る。

git grep キーワード

問題のあるコミットを探索する

2分岐探索によって,バグが混入したコミットを探すことが出来る。

git bisect start 問題のあるコミットハッシュ 問題のないコミットハッシュ

※「問題のあるコミットハッシュ」には,バグが混入している最新のコミットハッシュを指定し,「問題のないコミットハッシュ」には,適当に時系列を遡って見つけたバグのまだ混入していない状態のコミットハッシュを指定する。

「問題ある」「問題ない」の判定は以下のコマンドで行う。

問題ある場合

$git bisect bad

問題ない場合

$git bisect good

この判定を何度か繰り返すことで,問題のあるコミットを絞り込むことができる。
探索が終了したら,以下のコマンドによってbisectモードを終了する。

git bisect reset

ファイルの変更内容を一時保存する

作業途中にレビュー依頼などがきて,他のブランチに切り替えたい場合,変更内容を一時保存しておくことが出来る。

git stash save

一時保存した変更内容が積まれたリストを確認する。

git stash list

一時保存した変更内容を取り出す。

git stash pop

一時保存したものが溜まり過ぎると,どんな変更内容だったのかが分からなくなるので,基本的には一時保存する内容は一つまでにして運用すると良い。

参考
会社の先輩からの指導
Learn Git Branching
初心者でも分かる!git rebaseの使い方を解説します | 株式会社LIG