2009-05-25 12 views

答えて

4

私は履歴を編集するためにhg mqueue extensionを使用しました。それは働いたようです。 ありがとうございます。

+1

ya、http://mercurial.selenic。 com/wiki/EditingHistoryを使用すると、リビジョンに戻り、個々のリビジョンを削除したり、リビジョンで変更(パスワードの削除)を行うことができます – xster

34

Mercurialは、データの安全性を維持するのが非常に難しいので、一般的に履歴を変更することはできません。

言われているように、Mercurialの拡張機能は数多くあり、あなたは簡単に履歴を変更することができます。 page on the wiki about editing historyがあります。そのページではその結果についても説明します。

あなたの特定のケースでは、他の人があなたのチェンジセットを既に引っ張っているかどうか自問自答する必要がありますか?もしそうなら、あなたがそれを取り除いても、それは彼らのクローンにまだ残っており、あなたはそのミスを受け入れる方が良いかもしれません。

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

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

、今、それを削除したい場合、サーバにログインし、その後repo-without-z[y]まですべてchangestsを含んでいます

hg clone -r y repo repo-without-z 

を行う - つまり、 [z]は削除されています:

[x] --- [y] 

あなたはその後、作業を​​続けて、新しいチェンジセットをプッシュすることができます:

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

私はすでに[z]チェンジを引っ張られ、今[w]を引っ張っていた場合、私は、リポジトリに二つのヘッドが表示されます。

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

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

MQ extension~のストリップをそのまま使用することもできます。そうすれば、あなたは新しいクローンを作れません。

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

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

+1

あなたの投稿をありがとう。私は実際にbitbucketを使用しています。私はbitbucket repoからコミットを取り除こうとしていましたが、不可能と思われます。ストリップを使っていても、bitbucketは(私がアップロードした戦争のために)たくさんのスペースを占めていると私に伝えます。 –

+4

Bitbucketは削除されたリビジョンのバックアップを作成し、バックアップはあなたのクォータに向かってカウントします:-( Bitbucketでリポジトリを削除し、同じ名前で再度作成し、ローカルクローンからプッシュします。 –

+1

上記の私のコメントもはや有効ではありません。下記の[Jesper's](http://stackoverflow.com/a/909290/110204)の回答を参照してください。 –

13

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

これはシステム上のバグであり、改善されます。それまでは、チェンジセットは削除されており、バックアップは無料です:-)

+6

ニースジェスパー、お寄せいただきありがとうございます:-) –

1

私は私がマージされたブランチを削除する同様のケースリモートでTortoiseHgのを使用して「Dev」のブランチから「」チェンジた:

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

DevにはブランチAの変更は存在しません。

+1

これは私にとって素晴らしいソリューションです。私はちょうど(2)のために、あなたが "AをAAに併合"して捨てることを意味すると思う。とにかくそれは私がやったことです。その後、ステップ3では、望ましくない変更をすべて取り消した素晴らしいコミットを作成しました。 –

関連する問題