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>