Gitを使い始めて10年くらい立ちましたが、よく使うコマンドなどは大体同じですので、普段使っているコマンドをチートシート的にまとめてみようと思いました。
Gitの使い方になれて見返すときに便利かなと。
ただ8割以上は頭の中にいれておいて、頻度が少ないもののみ見返すのが理想かと思います。
リポジトリ作成と基本設定
新規リポジトリの作成
# 通常のリポジトリ作成
git init
ユーザー設定
# 登録ユーザー名を設定
git config --global user.name "test"
# 登録ユーザーメールアドレスを設定
git config --global user.email test@example.com
# 常にCRLFをLFに自動変換する
git config --global core.autocrlf input
注意: 特定のディレクトリのみの設定を変えたい場合は --global
を省略すると、そのディレクトリだけに適用されます。
リポジトリ取り込みや設定など
初回時にローカル環境にリポジトリを取り込みたい時に使うコマンドです。
# リポジトリ取り込み
git clone url
# 特定ブランチを指定してクローン
git clone -b ブランチ名 url
# ローカルとリモートのリポジトリがすでにあってリモートのリポジトリを登録したいとき
git remote add origin git-url(http or ssh)
# 正常に登録されているかを確認したいときで
git remote -v
# 以下のような出力結果になります。
#origin git@github.com:xxxxx/xxxxx.git (fetch)
#origin git@github.com:xxxxx/xxxxx.git (push)
# 新規追加ではなく途中からリモートURLを変更したいとき
git remote set-url origin git-url(http or ssh)
# すでにリポジトリがある場合に別ブランチを取り込みたい時などに使います。
# fetch origin ブランチ名 +
git fetch origin ブランチ名 # 省略時は全て
# git fetch --allだと全てのブランチの変更を取り込む
# このあと追跡ブランチから対象ブランチを以下のコマンドで作ります。
git checkout -b ブランチ名 remotes/ブランチ名
# 特定ブランチをリモートリポジトリからひっぱってきて最新化したいときです。
git pull origin ブランチ名
基本的なワークフロー
日常業務でGitにファイルを登録して、プッシュするまでの一連のフローです。
インデックス登録→コミット→リモート登録→プッシュ
# ワーキングディレクトリ登録
git add 対象ファイル
# .で全ファイルのほか、ワイルドカードなども使える
# コミット
# 後述するamendもよく使います。
git commit -m "何らかのメッセージ"
# プッシュ
git push origin ローカルブランチ:リモートブランチ
# 同じことがほとんどなので実質ローカルブランチ:リモートブランチになるかと思います。
# ex git push origin developなど
取り込み系
別ブランチの取り込みです。
# 元ソースへの取り込み
git merge 取り込みたいブランチ名
# 意図しない状態になってしまい、マージコミットをする前にマージを辞めたいとき
git merge --abort
# マージのように全体ではなく、特定のコミットのみ取り込み
git cherry-pick (-n) ハッシュ値 # -nオプションを入れると取り込まず、インデックスに取り込みのみ
# マージと同じように使うこともありますが、履歴を作り替え、一直線にします。(あまり使わないかも・・・)
git rebase 取り込みたいブランチ名
ブランチ関連の操作
新しいブランチを作る、消すときなど
# 新ブランチ作成 or 既存のブランチがある場合はそのブランチに移動
git branch ブランチ名
# -bオプションでそのブランチに移動します
# ブランチ確認
git branch -a
# ブランチ削除
git branch -D ブランチ名
# ローカルの追跡ブランチ削除
git branch -r -d remotes/ブランチ名
ファイルを戻したい時のコマンド(主にgit reset,checkout)
戻したいと言っても現時点でのファイルの変更をなしにしたい、インデックスへの変更を取り消したい、コミット自体を取り消したい、にしたいなどさまざまなケースがあります。
# 間違って変更してしまったファイル(addもコミットもしていない)の取り消し
git checkout HEAD ファイル
# ローカルを間違ってaddしてしまい、インデックスへの変更を取り除きたい
git reset ファイル名 # ファイル名未指定だと全ファイル
※正確には `git reset --mixed` です。省略するとmixedになります。
# 間違ってcommitしてしまい、commitだけ取り消したい場合
git reset --soft HEAD^
ちなみに再修正する場合は再修正して下記のようにすることが多いです:
git add 変更内容
# commitを増やさずに、最後のコミットに追加することになります。
git commit --amend
以前の状態にファイル全部を戻したい時
過去の特定の日時でシステム全体がどうだったかを見たい時など:
履歴まで全部一気に戻すので注意が必要です。別フォルダにもってきて過去の一地点の状態がどうだったかなどの時に使います。
git reset --hard ハッシュ値
git reset --hard
自体は変更自体をすべてなかったことにしたい、みたいなコマンドなのでHEAD^を対象に使うと作業フォルダ、インデックス、履歴全てを消して1つ前に戻しますが、あまりそういう使い方はせず、上記のような調査系で使うことがメインでした。
特定のファイルを特定のコミットに戻したい・特定のブランチの特定ファイルを持ってきたい
過去の調査でよく使います。
git checkout ハッシュ値 ファイル
# 別ブランチとの差分があってそこから取り込みたいときによく使います。
git checkout [取り込み元のブランチ] -- [特定のファイルの相対パス]
コミット自体プッシュしてしまい、打ち消す変更のコミットを作りたいとき
直近のプロジェクトでよく使っていました。
複数ブランチで運用していると変更が反映されなくなることもあることからNGにしているプロジェクトもありますね。
git revert ハッシュ値
一時的な作業保存
gitでコミットせずに作業を保存したいときがあります。例えば、あるブランチで作業していて、コミットせずに一時的に別のブランチに切り替えたいときです。
そんなときに使えるのが git stash
です。
作業の保存
git stash
この時点で保存され、下記のようなメッセージが出力されます:
Saved working directory and index state WIP on ブランチ名: リビジョン コメント
HEAD is now at リビジョン番号 コメント
内容の確認
# 保存データの日にちなどを確認
git stash list
# 具体的なソースの内容を確認
git show -p
# ブランチを切り替えた後:保存されていた内容が現ブランチに吐き出される(stashは消滅)
git stash pop
# またはstashの内容を保持したまま適用
git stash apply
強引なgit stash
ワーキングディレクトリとstash内のとりこみが競合するなどgit stashがうまくいかず、下記のようなメッセージが出てしまうこともあります:
Cannot apply to a dirty working tree, please stage your changes
この場合、差分自体は見れるので:
git stash show -p | git apply
とすると差分がうまく取り込めます。
現状確認系コマンド
ログ確認
# 記録確認系
git log --オプション
# オプション例:
# -p : ソースの変更内容まで確認できる
# --stat : ファイルのリストと変更量
# --oneline : コミットログとハッシュ値
ステータス確認
# 現状の確認系(インデックスに入っているものなどを確認)
git status
差分確認
# addする前の変更点の確認
git diff
# addした後の変更点の確認
git diff --cached
# commitした後の変更点の確認
git diff HEAD^
# ハッシュ値同士の比較
git diff ハッシュ値1 ハッシュ値2
# ブランチ同士の比較
git diff ブランチA ブランチB