337

次のようなSVNコミットを元に戻す方法のさまざまな例を見つけました

svn merge -r [current_version]:[previous_version] [repository_url]

また

svn merge -c -[R] .

しかし、どちらも機能していないようです。これらのコマンドを試し、手動で変更されたファイルを確認しました。

リビジョン番号 1944 のコミットを元に戻すにはどうすればよいですか? 元に戻されたことを確認するにはどうすればよいですか (変更が元に戻されたことを実際のファイルで確認する必要はありません)。

4

14 に答える 14

476

両方の例が機能する必要がありますが

svn merge -r UPREV:LOWREV .範囲を元に戻す

svn merge -c -REV .単一のリビジョンを元に戻す

この構文では、現在のディレクトリがWCであり、(すべてのマージ後に実行する必要があるように)結果をコミットします

ログを見たいですか?

于 2012-11-11T11:12:48.290 に答える
138

TortoiseSVNクライアントを使用している場合は、[ログの表示] ダイアログから簡単に実行できます。

于 2013-09-24T05:16:55.557 に答える
71

svn merge -r 1944:1943 .作業コピーで r1944 の変更を元に戻す必要があります。その後、作業コピーの変更を (diff で) 確認できますが、元に戻してリポジトリに適用するには、コミットする必要があります。

于 2012-11-11T09:53:39.287 に答える
51

まず、作業コピーを 1943 年に戻します。

> svn merge -c -1943 .

次に、何がコミットされようとしているのかを確認します。

> svn status

3 番目に、バージョン 1945 をコミットします。

> svn commit -m "Fix bad commit."

4 番目に、新しいログを確認します。

> svn log -l 4

------------------------------------------------------------------------
1945 | myname | 2015-04-20 19:20:51 -0700 (Mon, 20 Apr 2015) | 1 line

Fix bad commit.
------------------------------------------------------------------------
1944 | myname | 2015-04-20 19:09:58 -0700 (Mon, 20 Apr 2015) | 1 line

This is the bad commit that I made.
------------------------------------------------------------------------
1943 | myname | 2015-04-20 18:36:45 -0700 (Mon, 20 Apr 2015) | 1 line

This was a good commit.
------------------------------------------------------------------------
于 2015-04-21T02:25:21.817 に答える
26

リビジョンを「コミット解除」することはできませんが、作業コピーをバージョン1943に戻し、バージョン1945としてコミットすることができます。バージョン1943と1945は同一であり、変更を効果的に元に戻します。

于 2012-11-11T10:00:57.193 に答える
5
F=code.c
REV=123
svn diff -c $REV $F | patch -R -p0 \
    && svn commit -m "undid rev $REV" $F
于 2013-10-01T12:18:42.997 に答える
2

すでに与えられた提案は一部の人にとってはうまくいくかもしれませんが、私の場合はうまくいきません。rev 1443マージを実行すると、に更新したのユーザーは、マージからと同じであっても、 でrev 1445変更されたすべてのファイルを同期します。エンドユーザーが更新をまったく見ないようにする必要がありました。14441443

コミットを完全に隠したい場合は、正しいリビジョンで新しいブランチを作成してからブランチを交換することで可能です。唯一のことは、すべてのロックを削除して再度追加する必要があることです。

copy -r 1443 file:///<your_branch> file:///<your_branch_at_correct_rev>
svn move file:///<your_branch> file:///<backup_branch>
svn move file:///<your_branch_at_correct_rev> file:///<your_branch>

これは私にとってはうまくいきました、おそらく他の誰かに役立つでしょう=)

于 2014-11-04T22:27:52.227 に答える
2

Alex, try this: svn merge [WorkingFolderPath] -r 1944:1943

于 2013-06-26T10:26:59.193 に答える
2
svn merge -c -M PATH

これは私の命を救った。

元に戻した後も、古いコードが表示されませんでした。上記のコマンドを実行した後、クリーンな古いバージョンのコードを取得しました。

于 2016-09-08T13:47:46.577 に答える
1

私は上記を試しました ( svn merge) そして、あなたは正しいです、それはジャックします. でも

svn update -r <revision> <target> [-R]

動作しているように見えますが、永続的ではありません (私の svn は古いリビジョンを表示しているだけです)。だから私はしなければならなかった

mv <target> <target backup>
svn update <target>
mv <target backup> <target>
svn commit -m "Reverted commit on <target>" <target>

私の特定のケースでは、私のターゲットはinterfaces/AngelInterface.php. ファイルに変更を加えてコミットし、ビルド コンピューターを更新して phpdoc コンパイラを実行したところ、変更が時間の無駄であることがわかりました。 svn log interfaces/AngelInterface.php私の変更をr22060として示し、そのファイルの以前のコミットはr22059でした。だから私はできるsvn update -r 22059 interfaces/AngelInterface.phpし、-r22059 にあったようなコードになってしまう。それで :-

mv interfaces/AngelInterface.php interfaces/AngelInterface.php~
svn update interfaces/AngelInterface.php
mv interfaces/AngelInterface.php~ interfaces/AngelInterface.php
svn commit -m "reverted -r22060" interfaces/AngelInterface.php

または、上記のすべての . -R代わりに指定することにより、ディレクトリで同じことを行うこともできます。interfaces/AngelInterface.php

于 2014-09-05T15:30:02.460 に答える