2011-02-03 20 views
13

バージョンコントロールにTortoiseHgを使用しています。私はローカルにコミットした後、リモートリポジトリにプッシュしました。特定のコミットポイントに元に戻すにはどうしたらよいですか?Mercurialプッシュを元に戻す

3つの異なるプッシュがあり、最初のプッシュに戻したいと思います。私は、HGロールバックについて読んHGコマンドを元に戻すが、私はこれを達成するためにそれらを使用する方法がわからないです。

+0

干し草は、切断され乾燥された長い草で、牛のための食糧として使用されます。 :-) –

+1

この記事の他にも便利な "[間違いを見つけて修正する](http://hgbook.red-bean.com/read/finding-and-fixing-mistakes.html)"です。 –

答えて

14

あなたは別のリポジトリにプッシュしたので、変更がどこに伝播したかを知る方法がありません。あなたがプッシュしていなければ、元に戻すことができますが、元に戻すのは最後のトランザクションだけです。真の歴史を修正する

他のオプションは、stripコマンドになりますが、あなたがプッシュしたので、再び、これはオプションではありません。あなたがあなたのローカルを削除した場合、あなたは引き続き次回に引っ張ったチェンジセットを元に戻します。

あなたが中央へのアクセス権を持っている場合、あなたはそれを取り除くことができますが、他の誰かがすでに変更を引っ張っている場合は、その後、彼らは再び中央に、彼らがプッシュする次回に再表示されます。

この時点で唯一安全なオプションは、バックアウトコマンドです。これは基本的に、あなたが誤って入れてきたチェンジセットを逆転させ、先端に新しいチェンジセットを作成します。

2

あなたはhginit.com's 'fixing goofs' pageを読むことをお勧めします。あなたは "後退"し、併合し、押したいと思う。これが実際に行うことは、変更の逆を実行してそれを適用する新しいコミットを作成することです。

14

「純粋な」Mercurialの観点から、マイクは右に押されたチェンジセットがあなたのコントロールから外れています。 しかし、は、実際にはこれはしばしばあまりにも厳しい見通しです。

マイクの意見に反して、すでにプッシュされたチェンジセットを取り除くがオプションになります。それは、あなたが集中リポジトリ(そこにもストリップする)と、あなたのチーム/コミュニティの規模とそれがどのように編成されているかを制御できるかどうかによって異なります。

必ず誰もがあなたの悪いチェンジを引っ張っはまだありません、ちょうどあなたのローカルおよび中央リポジトリを除去しているため、あなたが知っている場合 - 行われ、歴史は削除。

誰かが既にあなたの悪いチェンジを引っ張る、あなたにもをローカルおよび中央のレポを取り除く必要があるだろうとあなたは自分のローカルリポジトリに悪いチェンジを除去するために、すべてのプッシュチームメンバーに通知する必要があるだろう可能性がある場合(または剥ぎ取られた中心のレポから再クローンする)。あなたが幸運なら、皆さんがあなたの言うことをします。それ以外の場合、チェンジセットは遅かれ早かれ中央リポジトリに再び終了します。

一番下の行は、ストリッピング、あなたのようなケースのためのソリューションであるかもしれないということです - あなたはコスト(負担余分な仕事とあなたのチーム)と利益(クリーン履歴)をバランスする必要があります。


大量のバイナリファイルを誤って追加した場合のメリットがコストを上回る実用的な例です。その場合、おそらくすべてのチームメンバーは、爆発したリポジトリを使って作業するのではなく、同期して削除することを好みます。


UPDATE:あなたは中央リポジトリに戻ることから取り除かチェンジを防ぐために、サーバー側のフックを使用することができます - read more here

+0

あなたはそうです、私はこれに非常に "純粋な"立場を取った。それはクリーンアップすることが可能で、あなたの例は、あなたが確かに努力を投資したいと思う、そして必要なフォローアップである素晴らしいものです。 – Mikezx6r

関連する問題