Bazaarでcommit --amend
Bazaar Advent Calendar用に書きかけてて、結局出番のなかった「プラグインを作ってみる」というネタがあって、仕上げてアップしようかと思っていたら、ちょうど@hikaruworldさんのブログに同じテーマのエントリが掲載されました。
プラグインの機能
recommitコマンドを追加します。Gitのcommit --amendのように、直前のコミットをやりなおすコマンドです。
Purpose: Edit last commit information. Usage: bzr recommit [LOCATION] Options: -v, --verbose Display more information. -q, --quiet Only display errors and warnings. --usage Show usage message and options. -x ARG, --exclude=ARG files or directories excluded from the commit. -m ARG, --message=ARG new commit message to be applied to the new commit -i ARG, --include=ARG files or directories appended to the commit -h, --help Show help message. Description: This command allow you to add or remove files from last commit, or edit message of last commit. From: plugin "recommit" See also: plugins/recommit
所詮サンプルなので、大したことをしてるわけではありません。
基本的には、uncommitとcommitを続けて呼んでいるだけです。
使い方
コミットメッセージの書き換え
"-m"を指定することで、コミットメッセージを書き換えることができます
$ bzr recommit -m "新しいメッセージ"関係ないファイルを間違えて一緒にコミットしてしまった場合などは、"-x"でコミットからそのファイルを除外することができます
# testsフォルダ配下を除外する逆に、追加忘れがあった場合は、"-i"でコミットにファイルを追加することができます。
$ bzr recommit -x tests
# lib/web_ui.pyを追加するuncommit前に作業ツリーの変更内容をshelveするのは敢えてしていません。
$ bzr recommit -i lib/web_ui.py
なので、コミットしたファイルに少し修正を加えて、recommitで差し替えることもできます。
$ bzr commit foo.txt -m "first"
# foo.txtを修正
$ vim foo.txt
# 修正した内容で差し替え
$ bzr recommit
制限事項
"--fixes"を指定したコミットに対してrecommitを実行したときに、ちゃんとBugIDが残るかどうかはまだテストしていません。テストしたらやっぱりダメだったので修正しました。- 途中でエラーが発生した場合は、手動で元に戻す必要があります。uncommitと同じように、コンソールに以下のようなメッセージが表示されるので、このコマンドを実行してください。
You can restore the old tip by running:
bzr pull . --overwrite -r revid:xxxxx
ソース
ソースはLaunchpadに上げてあります。
lp:~hid-iwata/+junk/bzr-recommit
(https://code.launchpad.net/~hid-iwata/+junk/bzr-recommit)