コンテンツにスキップ

[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

リモートに間違えて追加したファイルを取り消す

リモートを直接変更するので、他の人がコミットしていないか注意

  1. git rebase -i <hash_before_target_commit>を実行して、やり直したいコミットの1つ前に戻る
  2. 開かれたエディタのpickeditに書き換えて保存/終了する
  3. git rm <file> で消したいファイルを削除する
  4. git commit --amendで上書きコミット
  5. git rebase --continue
  6. 途中でconflictしたら解消してからgit rebase --continue
  7. 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