Git Revert 複数コミットをまとめて取り消すときにコミットメッセージを設定する

「ここからここまでのコミット」と範囲を指定したrevertをして、いい感じのコミットメッセージを作る方法です。

複数のコミットをrevertしたい場合は、単に複数のコミットを指定するか、オプション--no-commitでrevertコマンドを繰り返した後にrevert --continueして確定します。どちらの場合も、コミットメッセージをコマンドラインで指定することができません。オプション-eはコミットメッセージを編集するためのエディタを開くもので、メッセージをコマンドラインで指定できません。*コマンドリファレンス Git - git-revert Documentation

メッセージを指定するには、オプション--no-commitを実行した後に通常のコマンドgit commitをオプション-mと共に実行します。from: stack overflow

ところで、gitには「ここからここまでのコミット」を表す記法があります。例えば、master..HEADの「..」みたいなやつ。詳しくはここに書いてあります、Git Book コミットの範囲指定。revertコマンドでは、この記法で複数コミットを指定できます。

以下のコマンドではbashの文字列展開を使って、すべての取り消し対象コミットのメッセージの先頭行を結合したテキストを作ります。

$ ref=[ここまで戻したいコミット、タグ]
$ git revert --no-commit $ref..HEAD
$ git commit -m "Revert to $ref" -m "$(eval "git log --pretty=oneline $ref..HEAD")"

# 確認
$ git diff $ref HEAD 
  • revert --no-commitで、チェリーピッキング
    • revert --continueするとメッセージが指定できない
  • commit -mしてしまえばいい
    • -mオプションを複数書いたら改行して追加される
  • bashで入れ子の文字列展開にはevalを使う
    • "$(eval "$var")"
ツイッターでシェア
みんなに共有、忘れないようにメモ

あぜち(おばあちゃん)

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント