私はSVNコミットを元に戻す方法のさまざまな例を見つけました
svn merge -r [current_version]:[previous_version] [repository_url]
または
svn merge -c -[R] .
しかし、どちらも機能していないようです。それらのコマンドを試し、手動で変更されたファイルを確認しました。
リビジョン番号1944のコミットを元に戻すにはどうすればよいですか?元に戻されたことを確認するにはどうすればよいですか?
私はSVNコミットを元に戻す方法のさまざまな例を見つけました
svn merge -r [current_version]:[previous_version] [repository_url]
または
svn merge -c -[R] .
しかし、どちらも機能していないようです。それらのコマンドを試し、手動で変更されたファイルを確認しました。
リビジョン番号1944のコミットを元に戻すにはどうすればよいですか?元に戻されたことを確認するにはどうすればよいですか?
回答:
どちらの例も機能するはずですが、
svn merge -r UPREV:LOWREV .
範囲を元に戻す
svn merge -c -REV .
単一のリビジョンを元に戻す
この構文では-現在のディレクトリがWCであり(マージごとに行う必要があるように)結果をコミットします
ログを見たいですか?
svn: Merge source required
。サイコロはありません。
svn merge -c -42587,-42589 .
TortoiseSVNクライアントを使用している場合は、[ログの表示]ダイアログから簡単に実行できます。
svn merge -r 1944:1943 .
作業コピーのr1944の変更を元に戻す必要があります。その後、作業コピーの変更を(diffで)確認できますが、リポジトリに復帰を適用するためにコミットする必要があります。
svn merge -r 1944:1943 .
代わりに試しましたが、何も変わっていません。
svn status
もsvn diff
何も与えません。
svn: Try 'svn help' for more info svn: Merge source required
svn merge -r 1945:1943 .
うまくいったようです。私は理解していると思います:「不良」コミットの「前」のバージョンを作業リポジトリにマージする必要があります。これは、前のコミットを単純に「元に戻す」場合に問題ありません。しかし、バージョン1900で行われた変更を元に戻したい場合はどうでしょうか。
まず、作業コピーを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.
------------------------------------------------------------------------
リビジョンを「コミット解除」することは不可能ですが、作業コピーをバージョン1943に戻し、バージョン1945としてコミットすることができます。バージョン1943と1945は同一であり、変更を事実上元に戻します。
svn dump
当時とsvn load
。ただし、もちろん、これは通常の状況では使用しないでください。
$ git revert
ます。Gitを長期間使用した後は、SVNを学ぶのが少し難しいことに気づきました。
次のように、予行演習を行います。HEADは現在のバージョンで、PREVは以前のバージョンであり、次にファイルまたはコミット済みアイテムへのパス:
svn merge --dry-run -rHEAD:PREV https://example.com/svn/myproject/trunk
ドライランに問題がなければ、-dry-runなしでコマンドを実行します。
リビジョンの変更を確認して再コミットします。バージョン番号を参照するには、次を試してください。
svn log
F=code.c
REV=123
svn diff -c $REV $F | patch -R -p0 \
&& svn commit -m "undid rev $REV" $F
既に与えられた提案は一部の人にはうまくいくかもしれませんが、私の場合にはうまくいきません。マージを実行するときに、rev 1443
更新するユーザーrev 1445
、マージからの1444
ものと同じであっても、変更されたすべてのファイルを同期します1443
。エンドユーザーに更新がまったく表示されないようにする必要がありました。
コミットを完全に隠したい場合は、正しいリビジョンで新しいブランチを作成し、ブランチを交換することで可能です。唯一のことは、すべてのロックを削除して再度追加する必要があることです。
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>
これは私にとってうまくいきました、おそらくそれはそこにいる他の誰かに役立つでしょう=)
私は上記を試しました、(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
。