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