[Git] Snippets¶
確認¶
全てのブランチを確認¶
git branch -a
ignoreされたファイルの確認¶
git check-ignore ${path}
ワークスペースとインデックス登録済みの差分¶
git diff
インデックス登録済みとコミット済みの差分¶
git diff --staged
# --stagedは--cachedのsynonym
git diff --cached
コミット済みとリモートの差分¶
git diff HEAD^
タグ一覧表示¶
# 一覧
git tag -l
# コミットメッセージ付き
git tag -n
ログの詳細情報を表示¶
git log --pretty=fuller
コミットメッセージをgrepしてログを探す¶
git log --grep <word>
ファイルの変更情報を表示¶
git log --name-status
ファイルの過去の歴史を確認¶
git log -p $file
HEADのhashを取得する¶
git rev-parse HEAD
カレントブランチ名を取得する¶
git rev-parse --abbrev-ref HEAD
特定コミット時点の特定ファイルを閲覧する¶
git show <hash>:<file>
branchがmasterのどこから分岐しているかを調べる¶
git show-branch --sha1-name branch master
ワーキングツリーをあるコミット時点の状態にする¶
git restore -s <hash> <file>
変更¶
ブランチ作成¶
git switch -c <new_branch_name>
# v2.23以前
git checkout -b <new_branch_name>
ブランチ変更¶
git switch <branch_name>
# v2.23以前
git checkout <new_branch_name>
ブランチ名変更¶
git branch -m <branch_name> <new_branch_name>
リモートブランチを追跡する形でローカルに作成 (ブランチはorigin弁当!)¶
git switch -c <branch_name> <origin_branch_name>
# v2.23以前
git checkout -b <branch_name> <origin_branch_name>
タグをブランチとしてチェックアウト¶
git checkout -b <branch_name> refs/tags/<tag_name>
リモートで削除されたブランチを削除¶
git fetch -p
タグをつける¶
# local
git tag 1.0.0
# remote
git push origin 1.0.0
注釈つきタグをつける¶
# local
git tag -m '${message}' 1.0.0
# remote (if `followTags = true`)
git push
とりけし¶
ローカルの変更を戻す (addしていない場合)¶
git restore <file>
# v2.23以前
git checkout <file>
addしたファイルを取り消す¶
git restore -S <file>
# long
git restore --staged <file>
# v2.23以前
git reset HEAD <file>
HEADがない場合は
git rm --cached <file>
ある時点のコミットに戻す¶
git reset --hard <commit_id>
履歴を改ざんする¶
- editで改ざん
時間も含めて改ざんする場合¶
# 先頭(HEAD)から2つ分改ざんする
git rebase -i HEAD~2
# 日付を改ざんしたamend commit
git commit --amend --date="Sun Feb 4 19:37:11 2017 +0900"
# commit dateをauthor dateにあわせる
git rebase HEAD~2 --committer-date-is-author-date
リモートに間違えて追加したファイルを取り消す¶
リモートを直接変更するので、他の人がコミットしていないか注意
git rebase -i <hash_before_target_commit>
を実行して、やり直したいコミットの1つ前に戻る- 開かれたエディタの
pick
をedit
に書き換えて保存/終了する git rm <file>
で消したいファイルを削除するgit commit --amend
で上書きコミットgit rebase --continue
- 途中でconflictしたら解消してから
git rebase --continue
git push -f origin master
でforceコミット
削除¶
管理されていないエントリを削除する¶
git clean -f
ローカルブランチ削除¶
git branch -d <branch_name>
リモートブランチを削除¶
git push --delete origin <branch_name>
# または
git push origin :<branch_name>
マージ済みのローカルブランチを全て削除¶
git branch --merged master | grep -vE '^\*|master$|develop$' | xargs git branch -d
タグを消す¶
# local
git tag -d 1.0.0
# remote
git push --delete origin 1.0.0
1つ前にコミットしたpushを強制的に取り消す¶
git push -f origin HEAD~:master
設定¶
ユーザ情報を設定¶
# ユーザ名
git config --global user.name <user_name>
# メールアドレス
git config --global user.email <mail_address>
毎回認証情報でユーザ名を入力しないようにする¶
git remote set-url origin https://<user_name>@<github.com以降のURL>
全体¶
特定のタグを指定してshallow clone¶
git clone --depth=1 -b ${tag} ${URL}
サブモジュール(sub module)を含めてclone¶
git clone --recursive
パッチを作る/あてる¶
# パッチをあてる (事前にgit diffの結果をdiff.patchに出力しておく)
patch -p1 < diff.patch
# ワンライナー
git diff <target_commit> | patch -p1