Gitチートシート
いつも忘れるのでメモ。
※適宜更新、追加予定
バージョン確認
git version
Global Config設定
# グローバルGit構成ファイルに含まれる変数と値
git config --global --list
# ユーザー、Emailの設定
git config --global user.name "ユーザー名"
git config --global user.email "メールアドレス"
Localリポジトリ作成
git init
# デフォルトのブランチ名を指定する場合
git init -b <ブランチ名>
# ベアリポジトリ(作業用ディレクトリを持たない管理用リポジトリ)の作成
git init --bare
Remote
# リモートリポジトリへの接続を追加
git remote add <shortname> <URL>
# shortname -> デフォルトはorigin
# リモートリポジトリへの接続リスト
git remote
git remote -v
諸々確認用
# 作業ディレクトリのファイルの状況を見たいとき
git status
# コミット履歴を見たいとき
git log
git log -a # 全部見たいとき
git log -n # 直前n個を見たいとき
git log -p # 細かいファイルの差分を見たいとき
git log --graph # コミットをグラフ表示してほしいとき
git log --onefile # コミットメッセージのみ見たいときとか
# 親のコミットハッシュを見たいとき
git cap-file -p <コミットハッシュ>
ステージング
git add <ファイル名>
# 作業ディレクト内全部
git add -A
# ステージング解除
git restore --staged <ファイル名>
コミット
# 実行するとエディタが起動してコメントを書く
git commit
# コメント付き
git commit -m "コメント"
ブランチ
# ブランチ一覧(--allはリモート追跡ブランチも表示)
git branch
git branch --all
# (もしあったら)上流ブランチも表示
git branch -vv
# ブランチの作成
git branch <ブランチ名>
# 特定のコミットからブランチを作成
git branch <ブランチ名> <コミットハッシュ>
# ブランチの切り替え
git switch <ブランチ名>
# ブランチの作成+切り替え
git switch -c <新ブランチ名>
# checkoutでも可能
git checkout -b <新ブランチ名>
# リモートブランチと関連するリモート追跡ブランチの削除
git push <shortname> -d <ブランチ名>
# ローカルブランチの削除
git branch -d <ブランチ名>
# 削除されたリモートブランチに対応するリモート追跡ブランチを削除
git fetch -p (--pruneでもよい)
# 上流ブランチの定義
git branch -u <shortname>/<ブランチ名>
マージ
# マージ先のブランチにて、マージ元のブランチをマージ
git merge <マージ元ブランチ名>
# コンフリクト時
# -> 解消後に続行する場合
git add -> git commit
# -> 中止しマージ前の状態に戻す場合
git merge --abort
# コンフリクトを解消しようとすでに編集していた場合の中止
git reset --hard HEAD
リベース
# 元にするブランチで、取り込むブランチを指定する
git rebase <ブランチ名>
# コンフリクト時
# -> 解消後に続行する場合
git rebase --continue
# -> 中止しリベース前の状態に戻す場合
git rebase --abort
チェリーピック
別ブランチから特定のコミットのみを取り込む
# 取り込み先のブランチで取り込みたいコミットを取り込む
git cherry-pick <コミットハッシュ>
リバート
過去のコミットを打ち消す。
削除ではなく逆の内容のコミットが追加される。
git revert <コミットハッシュ>
タグ
特定のコミットに目印をつける
# 新規タグを作成
git tag <タグ名>
# タグをリモートリポジトリに共有
git push origin <タグ名>
# ローカルリポジトリのタグを削除
git tag -d <タグ名>
# リモートリポジトリのタグを削除
git push origin --delete <タグ名>
チェックアウト
# 特定コミットに移動
git checkout <コミットハッシュ>
プッシュ
git push <shortname> <ブランチ名>
# 上流ブランチをセットしながらプッシュ
# -> 上流ブランチ未定義の場合にgit pushすると自ら書かなくてもサジェストされる
git push --set-upstream <shortname> <ブランチ名>
クローン
git clone <URL> <ディレクトリ名>
# ディレクトリ名は省略可能、保存先を指定できる
フェッチ
git fetch <shortname>
# shortnameを省略したらoriginからのフェッチとなる
# fetch後に反映させるためにはgit merge origin/mainとかでマージする
プル
git pull <shortname> <ブランチ名>
# pull = fetch + (merge or rebase)
# ローカルブランチとリモートブランチが分岐していない -> 早送りマージ
# ローカルブランチとリモートブランチが分岐している -> 3方向マージ or リベース
# 3方向マージ -> --no-rebase, リベース -> --rebase
スタッシュ
コミットしていない変更を一時退避する的なヤツ
# スタッシュを保存
git stash save # saveは省略可能
git stash save "メッセージ"
# 新規作成ファイルも保存する場合
git stash -u
# スタッシュを保存
git stash save
# 過去に保存したスタッシュのリスト
git stash list
# スタッシュリストの一番上の変更を適用する
git stash apply
# スタッシュリストの一番上の変更(もともとaddしていたもの)をaddしていた状態のまま適用する
git stash apply --index
# スタッシュリストの一番上の変更を捨てる
git stash drop
# スタッシュリストから戻すとともにリストから捨てる
git stash pop
# スタッシュリストからすべて消す
git stash clear
# スタッシュの中を確認(-pでdiffまで見れる)
git stash show -p <スタッシュ名>
# ※スタッシュ名(stash@{0}みたいなヤツ)を指定するとその作業をいじれる
Tips
コンフリクトが起きたとき
ファイル修正 -> ステージング -> コミット
※キャンセルとかはいらない
直前のコミットメッセージを修正したい
プッシュ前なら修正可能!
git commit --amend
# -> エディタが立ち上がって修正できる
コミットを1つにまとめたい(スカッシュ)
git log --onefile # コミットハッシュを確認
# 1111111 commit1 <- これと
# 2222222 commit2 <- これと
# 3333333 commit3 <- これをまとめる
# 4444444 commit4 <- これを使う
# ※番号逆順な気もするが、commit4が一番古いものの想定
git rebase -i <親コミットハッシュ>
# -> まとめたいコミットたちの1つ前のコミットハッシュを指定する
# -> エディタが起動する
# -> まとめたいコミットをpick「s」とsをつける(一番古いものはそのまま)
# pick 3333333 commit3 <- 古い順に表示される
# picks 2222222 commit2
# picks 1111111 commit1
間違えてHEADに直接コミットしてしまったとき
過去のコミットをチェックアウトしたあと、そのままコミットした場合。
いわゆるdetached HEAD状態。
そのままブランチを新規作成すればOK。
ファイルを追跡対象から外したい
# 作業ディレクトリからも消す場合
git rm <ファイル名>
# 作業ディレクトリには残したい場合
git rm --cached <ファイル名>
# ※一度追跡を始めた場合はgit rm --cachedを使う
# 追跡前であれば.gitignoreに書けばOK!
空のディレクトリを追跡したい
フォルダ内に.gitkeep(空のファイル)を配置 or .gitignore(以下のもの)を配置
.gitignore
*
!.gitignore
使い分けは空のディレクトリにファイルが追加されたときに追跡対象に
- .gitkeep: 含めたい場合
- .gitignore: 含めたくない場合
らしい。