はじめに
よく使う便利なコマンドや、いざ使おうと思った時、忘れてしまっていることがあるコマンドをまとめてみました。
1つ前にコミットした差分
git log -p -1
1つ前にコミットしたファイル一覧を表示
git log --stat -1
1つ前のコミットをなかったことにする
git reset --hard HEAD^
ワークディレクトリの内容はそのままで1つ前のコミットをなかったことにする
git reset --soft HEAD^
1つ前のコミットメッセージを修正
git commit --amend
1つ前のコミットユーザを修正したい
git commit --amend --author="user_name <user_email@example.com>"
1つ前のコミットした時間を今の時間に修正したい
git commit --amend --date "`date -R`"
コミット済みの2以上のコミットを1つのコミットにまとめる
例)aaa.txt
ファイルを編集しコミットしたが、漏れがあり、追加編集したコミットを1つにまとめたい
git rebase -i HEAD~~
まとめたいコミットのコマンドを pick
から s
または squash
に変更し保存(:wq
等)
コミットメッセージを修正する画面が表示される
コミットメッセージを修正し保存(:wq
等)
追加の変更を最新のコミットに追加する
変更内容をAddしておく
git add -A
最新のコミットのメッセージのまま追加の変更を最新のコミットに反映
git commit --amend --no-edit
空でcommitする
git commit --allow-empty -m "メッセージ"
一番最初のコミットを2つ目のコミットとまとめる
git rebase -i --root
派生元のブランチを変更する
git rebase --onto [変更先ブランチ名] [変更前ブランチ名] [対象のブランチ名]
派生元のブランチを更新する場合
git pull --rebase origin [派生元のブランチ名]
リモートのブランチにローカルのブランチを強制一致させる
git reset --hard origin/[ブランチ名]
ブランチの切り替え
git checkout [切り替えたいブランチ名]
ブランチの作成
git checkout -b [作成したいブランチ名]
この時、派生元にするブランチに切り替えておく
ブランチの削除
current branchが削除対象のブランチの場合、以下のエラーが発生し、削除できないので、別のブランチに checkout
しておく
error: Cannot delete the branch 'test' which you are currently on.
マージ済みのブランチを削除
git branch --delete [削除したいブランチ名]
マージしていないブランチを削除する場合、以下のエラーが出て、マージされていないとお知らせしてくれる
error: The branch 'test' is not fully merged.
If you are sure you want to delete it, run 'git branch -D test'.
マージしたかどうかを問わずブランチを削除
git branch -D [削除したいブランチ名]
マージ済みのブランチを一括削除
git branch --merged|egrep -v '\*|develop|master|main'|xargs git branch -d
※develop
、master
、main
は消さないようにしています。
1つ前の作業ブランチに切り替える
git checkout -
指定ファイルを1つ前のコミット時の状態に戻す
git checkout HEAD~ [指定ファイル]
特定のファイルのみコミットを取り消す(変更する)
git checkout [コミットID] -- [変更したいファイル or フォルダ]
Gitの設定を変更
ユーザ名の設定(local)
git config --local user.name [ユーザ名]
メールアドレスの設定(local)
git config --local user.email [メールアドレス]
設定の確認
git config --list
特定のコミットのみを反映させる
git cherry-pick [コミットID]
特定のコミットを指定のブランチにpush
git push origin [コミットID]:[pushしたいブランチ名]
ファイル名の大文字・小文字の変更を検知
設定の確認
git config -l --local | grep core.ignorecase
検知しない
core.ignorecase=true
検知する
core.ignorecase=false
設定の更新
例)検知するに更新
git config core.ignorecase false
タグのコミットハッシュ取得
git show-ref -s [タグ名]
最後に
筆者は特に commit --amend --author
と rebase --onto
の書き方を忘れます。
筆者は大量にコンフリクトした時等の考えることを放棄した瞬間、呪文のように git status
を唱えています。