web-dev-qa-db-ja.com

Mercurial:リモートブランチからチェンジセットを削除します

リモートチェンジセットからを削除する方法、またはチェンジセット全体を削除する方法はありますか?誤って.warファイルをリモートリポジトリにプッシュしたので、それを削除したいと思います。

22
Miguel Ping

Hgmqueue拡張機能を使用して履歴を編集しました。うまくいったようです。皆さんありがとう。

4
Miguel Ping

Mercurialはデータを安全に保つために非常に努力しているため、通常、履歴を変更することはできません。

そうは言っても、Mercurialには多くの拡張機能があり、とにかく簡単に履歴を変更できます。 編集履歴に関するウィキのページ があります。そのページはまた結果を説明します。

あなたの特定のケースでは、他の人があなたのチェンジセットをすでに引っ張っているかどうかを自問する必要がありますか?もしそうなら、あなたがそれを削除しても、それは彼らのクローンにまだ存在しているので、あなたは間違いを受け入れるほうがよいかもしれません。

削除する場合は、hg cloneを使用して削除することをお勧めします。これは常にバックアップを残すため、安全な方法です。 [z]をリモートリポジトリにプッシュした場合:

[x] --- [y] --- [z]

そして今それを削除したい、そしてサーバーにログインして

hg clone -r y repo repo-without-z

次に、repo-without-zには[y]までのすべての変更が含まれます。つまり、[z]は削除されます。

[x] --- [y]

その後、作業を​​続行し、新しいチェンジセットをプッシュできます。

[x] --- [y] --- [w]

すでに[z]チェンジセットをプルしていて、今度は[w]をプルした場合、リポジトリに2つのヘッドが表示されます。

            [w]
           /
[x] --- [y] --- [z]

これ自体は危険ではありませんが、人々は驚くかもしれません。クローンから[z]を削除すると、最終的にはあなたと同じリポジトリになります。ただし、上記のように、ユーザーが多い場合、これは実用的でない可能性があります。

MQ拡張 からstripチェンジセットをインプレースで使用することもできます。そうすれば、新しいクローンを作成することはありません。

最後に、プッシュがサーバーで実行された最後の操作であることが確実な場合は、hg rollbackを使用して最後のトランザクションを削除できます。ただし、リポジトリにプッシュできるのがあなただけの場合は、これを行わないでください。そうしないと、別のトランザクションをロールバックする可能性があります。

リポジトリが Bitbucket にある場合、サーバーにログインできません。しかし、Bitbucketは最近、そのWebインターフェイスにストリップ機能を追加しました。 「管理者」セクションで「リポジトリ管理」を探します。

33
Martin Geisler

Bitbucketは、ストリッピング時にバンドル(バックアップ)を提供します。これはnotクォータにカウントされます。そのように見える理由は、使用するスペースの量を指定するキャッシュキーを無効にしていないためです。

これはシステムのバグであり、修正される予定です。それまでは、チェンジセットが削除され、バックアップは無料ですのでご安心ください:-)

13
jespern

TortoiseHgを使用して、マージされたブランチ「A」チェンジセットを「Dev」ブランチからリモートで削除したいという同様のケースがありました。

  1. ブランチAの親ブランチからブランチAAを作成します。その起源。
  2. AをAA(作業ディレクトリ)にマージし、[他のリビジョンからのすべての変更を破棄する]オプションがオンになっていることを確認します。
  3. AAをDevブランチにマージします(ブランチAの変更が削除されたことを示すコミットメッセージが表示されます)。

ブランチAの変更がDevに存在しなくなったことがわかります。

1
MarwaAhmad