web-dev-qa-db-ja.com

SVNでのリバースマージ(Revert Merge)とは、簡単な説明と最初から最後までの段階的なプロセス

SVNのリバースマージ(Revert Merge)とは何ですか?簡単な説明と、最初から最後までの段階的なプロセスがすばらしいでしょう。

誰かが私にプロセスを教えてもらえますか?そして、良いシンプルな例も素晴らしいでしょう。

19
Nahser Bakht

亀から ユーザーガイド

変更を作業コピーからマージして元に戻し、既にコミットされている変更を元に戻すには、元に戻すリビジョンを選択し、[逆マージ]チェックボックスがオンになっていることを確認します。

私の見解では、リバースマージは、1つ以上の以前のコミットに対する「アンチ」コミットを表す「通常の」コミットです。以前のコミットは引き続き存在しますが、変更は新しい「アンチ」コミットによって元に戻ります。

23
Micha

短い答え

逆マージは正式にはマージと同じですが、もちろん逆順です。逆マージされたリビジョンからの変更は、作業コピーで元に戻されます。

たとえば、HEADからrev。123に戻る場合、作業コピーがHEAD状態にあると仮定して、このようにリバースマージします:

svn merge -r HEAD:123

これにより、作業コピーはリビジョン123の状態に設定されますが、正式にはHEADに基づいています。作業コピーの状態は、ファイルを手動で編集してリビジョン123に戻した場合と同じになります。現時点では、リポジトリで何も変更されていません。

これは同じではないことに注意してください 更新をリビジョン123に変更します。これを行った場合、作業コピーのファイルはどちらの場合も同じ内容になりますが、作業コピーの状態は異なります。SVNは、作業コピーがリビジョン123ではなくリビジョン123に基づいていることを認識します頭。その後、変更をコミットしようとすると、HEADに最初に更新する必要があることが通知されます。これにより、当面は何も変更していないと想定して、リビジョン123への更新が取り消されます。

元のシナリオに戻ります。リバースマージに問題がなければ、リポジトリにチェックインできます。

svn commit -m "We undid all changes since r123."

または、間違いを犯したと思われる場合は、revertreverse mergeを使用できます。これは、作業コピーをリポジトリの状態に戻すだけなので、まったく異なります。これは(この場合はHEAD)に基づいています:

svn revert --recursive .

ただし、その場合は注意してください。リバースマージは元に戻せず元に戻ります:-)。ドットは現在のディレクトリを指し、誤って何かを元に戻さないようにするための安全対策として、(他のほとんどのSVNコマンドの場合とは異なり)明示的に指定する必要があります。

9