間違いを取り消す¶
間違いは起きる¶
Bazaarは下記で説明されるような間違いから簡単にリカバーできるように 設計されています。
プロジェクトのリビジョンの履歴をドロップする¶
思いがけず間違ったツリーをバージョン管理下に置いたとしても、 .bzr
ディレクトリを削除するだけで済みます。
ファイルもしくはディレクトリの登録を解除する¶
バージョン管理下に置きたくないファイルを思いがけず add
コマンドで登録しても、
それを忘れるようにBazaarにそれを忘れさせるために remove
コマンドを使用できます。
remove
は修正されたファイルが削除されないよに 安全に物事を行う ために設計されています。たとえば:
bzr add foo.html
(oops - didn't mean that)
bzr remove foo.html
このコマンドは修正されたもしくは未知のファイルについてはエラーを出力します。
ファイルを維持したいのであれば、 --keep
オプションを使います。
代わりに、ファイルを削除したいのであれば、 --force
オプションを使います:
bzr add foo.html
(oops - didn't mean that)
bzr remove --keep foo.html
(foo.html はディスクには残るけれども、bzrには登録されない)
一方で、未変更の TODO
ファイルは登録が解除されエラー出力なしでディスクから削除されます:
bzr add TODO
bzr commit -m "added TODO"
(hack, hack, hack - but don't change TODO)
bzr remove TODO
(TODO ファイルは削除される)
注: IDEもしくはオペレーティングシステムのファイルマネージャーを利用してファイルを削除する場合、 commit
コマンドはそれを削除されるものとして暗黙のうちに扱います。
最後のコミット以降の変更を取り消す¶
バージョン管理ツールを使う理由の1つは作業をしている間にツリーのステータスを楽に調べられることです。
最新の commit
以降の変更を廃棄することを決心したら、使うコマンドは revert
です:
bzr revert
事前の警告として、 実際にすべてが本当に廃棄されたことを確認するために
bzr status
と bzr diff
を最初に使うことはよい習慣です。
最後のコミット以降のファイルへの変更を取り消す¶
最後のコミット以降の特定のファイルの変更を取り消したいが、ツリーの他のすべての変更を維持したい場合、
ファイルの名前を引数として revert
に渡します:
bzr revert foo.py
最後のコミットを取り消す¶
意図しないコミットをしてしまったら、取り消すために uncommit
コマンドを使います:
bzr uncommit
revert
とは異なり、 uncommit
は作業のツリーの内容をそのままにします。
意図せずに間違ったエラーメッセージをコミットしてしまった場合、これは本当に重宝します:
bzr commit -m "Fix bug #11"
(damn - wrong bug number)
bzr uncommit
bzr commit -m "Fix bug #1"
コミットを取り消す別の理由は1つもしくは複数のファイルの追加を忘れたからというものです 。
これを避けるために、未知のファイルがツリーの中で見つかるとコミットがエラーになるように
commit
を commit --strict
のエイリアスにする人もいます。
注: merge
コマンドは次の章まで紹介しませんが、
uncommit
で追加するマージをリストアすることは無意味です。
(uncommit
の後で bzr status
を実行するとこれらが表示されます)
merge
は履歴の前の方の指定したコミットだけを効率良く取り消すためにも使われます。
merge
に関する詳細な情報は
次の章の 変更をマージする
とBazaarのユーザーリファレンスを参照してください。
複数のコミットを取り消す¶
複数のコミットを取り消すためには -r オプションを使います:
bzr uncommit -r -3
これを行うための理由が本当にいくつかの変更を破棄したいのであるなら、
uncommit
は作業ツリーを変更しないことを覚えておいてください:
タスクを完了させることと同じようにおそらく revert
コマンドを実行する必要があります。
しかし多くの場合、履歴をそのままにしておき、最新のよい状態の内容を反映する
新しいリビジョンを追加する方が間違いなくベターです。
過去のバージョンの状態に戻す¶
望まない変更を行ったが、コードがユーザーに公開されているのでコミットの取り消しが合理的ではない場合、
作業ツリーを望む状態に戻すために revert
を利用できます:
% bzr commit "Fix bug #5"
Committed revision 20.
(release the code)
(hmm - bad fix)
bzr revert -r 19
bzr commit -m "Backout fix for bug #5"
この作業によってツリー全体をリビジョン19の状態に変更します。
それ以降は新しいコミットをしていなければ、おそらくこれがあなたのしたい唯一のことです。
新しいコミットをしている場合は、 revert
はそれも消してしまいます。
その場合は、わるい修正を取り消す代わりに
リバースチェリーピック
を使う方がよいでしょう。
注: 19のような絶対的なリビジョン番号の代わりに、 負の数を使ってチップ(-1)と相対的なリビジョンを指定できます:
bzr revert -r -2
タグを訂正する¶
早まってタグを定義したのなら、
tag
コマンドの --force
オプションを使って再定義します:
bzr tag 2.0-beta-1
(oops, we're not yet ready for that)
(make more commits to include more fixes)
bzr tag 2.0-beta-1 --force
タグをクリアする¶
タグを定義したが使いたくないのであれば、削除するために、
tag
コマンドの --delete
オプションを使うことができます:
bzr tag 2.0-beta-4
(oops, we're not releasing a 4th beta)
bzr tag 2.0-beta-4 --delete