TortoiseSVN を使用して、SVNサーバーにいくつかの不正なコード変更をコミットしました。
現在、最新のリビジョンは155ですが、最新の2つのリビジョンを削除して、最新のリビジョンを153にしたいと思います。つまり、最後の2つのコミットを「取り消す」必要があります。
TortoiseSVNを使用してこれを行うにはどうすればよいですか? TortoiseSVNメニューにオプションはありますか、それともコマンドラインを使用する必要がありますか?
SVNログを開いた場合、リビジョンを右クリックして、オプションこのリビジョンに戻すまたはこのリビジョンからの変更を戻すを使用できます。これらのオプションはどちらも作業コピーを更新します(その後、コミットできます)。
TortoiseSVNにはdeleteリビジョンへのオプションはありません。
残念ながら、TortoiseSVN(またはその他のSVNクライアント)では、履歴から完全に消えるという意味で、リビジョンを実際に削除する方法はありません。 SVNリポジトリの履歴を変更するのは難しく、サーバーでの操作が必要です-この質問を参照してください: なぜSubversionの重要な機能を無効にしないのですか?
ただし、チェックインを元に戻す新しいチェックインを作成することにより、チェックインを「取り消す」ことができます。これは通常、「リバースマージ」と呼ばれる手法で行われます。たとえば、 偶発的なチェックインを取り消す
更新された作業コピーのルートで、次のコマンドを使用する必要があります。
svn merge -rHEAD:153 .
これにより、リビジョン153からのすべての変更が「取り消され」、リビジョン156がリビジョン153のようになります。
後でコミットすることを忘れないでください!
TortoiseSvnからも同じことができます: 'Show Log'インターフェースを開き、リビジョン153を選択して右クリックし、 'Revert changes from this revision'を選択します。
私は 亀のウェブサイト から取られたこれらの指示を使用しました。
しかし、直後にCOMMITをクリックすることが重要です。気が付くまで頭がおかしくなりました。
古いリビジョンを作成する必要がある場合は、ヘッドリビジョンを次のようにします。
変更を元に戻す必要があるファイルまたはフォルダーを選択します。すべての変更を元に戻す場合は、これが最上位のフォルダである必要があります。
TortoiseSVN→ログの表示を選択して、リビジョンのリストを表示します。必要なリビジョンを表示するには、[すべて表示]または[次の100]を使用する必要がある場合があります。
選択したリビジョンを右クリックして、コンテキストメニュー→このリビジョンに戻すを選択します。これにより、選択したリビジョン以降のすべての変更が破棄されます。
コミットする
コマンドラインから:
変更をファイルに戻す:
svn merge -r <newBadRev>:<oldRevToMergeBackTo> <filename>
例えば:
svn merge -r 155:153 myfile.cpp