Open15
git コマンド備忘録

ログを 1 行表示する
$ git log --oneline

2つのブランチ間のコミット単位の差分を確認する
マージ先ブランチ名を master
、マージ元をbranch
とすると、以下のコマンドでbranch
ブランチにはあって、master
ブランチにはないコミットの一覧を表示できます。
$ git log --oneline --no-merges master..branch

gerrit で一度レビューに出した後に修正する
$ git commit -a --amend
$ git push origin HEAD:refs/for/${target-branch-name}

異なるブランチ(根が共通ではない)をマージするとき、通常はエラーになる。
$ git merge <マージ元ブランチ>
fatal: refusing to merge unrelated histories
この場合は --allow-unrelated-histories
を付ける

リモートのブランチを後からローカルにチェックアウト
$ git fetch origin <remote-branch-name>

マージ作業時に必ずマージコミットログを残すようにする(--no-ff
オプションを使う)
$ git merge --no-ff <topic_branch_name>

特定のコミットまで全て Revert
特定のコミットだけではなく、今のHEADから特定のコミットまでの間の全てのコミットを Revert する方法
$ git reset --hard <SHA/Commit ID>
$ git reset --soft HEAD@{1}
$ git commit -m "Revert to xxxx"

直前のリモートの pull を取り消す
$ git reflog
# 戻りたい場所までリセット
$ git reset --hard HEAD@{1}

別リポジトリの指定ブランチ同士の差分を確認する
fork元のリポジトリの特定のブランチと、fork先のリポジトリの特定のブランチを比較したい場合など
$ git remote add <適当なリポジトリ名> <リポジトリのURL.git>
$ git fetch <先ほど追加したリポジトリ名>
$ git log --oneline --no-merges <現在のブランチ名>..<先ほど追加したリポジトリ名>/<比較対象のブランチ名>

直前のコミットを取り消す
$ git reset --soft HEAD^

gerrt でレビュー中のものをリベースする
1. GerritのCLをローカルに取得する
以下のように、Web画面の操作で取得できるコマンドをそのまま利用する
2. リベース作業
$ git rebase origin/<リベース元のブランチ名>
# もしコンフリクトがなければここで終了。コンフリクトがあれば解消してから以下を実行
$ git add .
$ git rebase --continue
3. push
$ git push origin HEAD:refs/for/<プッシュ先のブランチ名>

パッチを適用する
Dry run
$ git apply --check hoge.patch
適用
$ git apply hoge.patch

git lfs で指定したディレクトリ以下のファイル全てを対象にする
$ git lfs track "<path_to_target_directory>/**"

既存のタグ&リリースを更新(cherry-pick)する
# ローカルのタグを削除
$ git tag -d <タグ名>
$ git push origin :refs/tags/<タグ名>
$ git cherry-pick <該当の変更のSHA>
# タグを設定
$ git tag <タグ名>
$ git push --tags origin

異なるリポジトリからcherry-pickする
git remote add other <cherry-pick元のリポジトリパス>
git fetch other <cherry-pick元のリポジトリの対象ブランチ名>
git cherry-pick <対象ブランチ上の修正コミット SHA>