だから私はMercurialで愚かな間違いを犯し続けています。多くの場合、「hg pull」と「hg update」を実行せずに作業を開始します。変更をプッシュしようとすると、エラーが発生します。
ローカルコミットを削除する方法はありますか?複数のヘッド、ブランチなどを作成することを避けることができますか?ローカルコミットを削除し、変更をヒントにマージしてから、再度コミットするだけです。簡単そうですね。 local commitsを簡単に削除する方法を見つけられないようですので、このチップときれいにマージできます。
繰り返しますが、「hg ci」で作成されたローカルコミットのみを削除しようとしています。ファイルを変更したり、元に戻したりしたくない.
「strip」拡張機能を有効にして、次を入力します。
hg strip #changeset# --keep
#changeset#
は、削除するチェンジセットのハッシュです。これにより、上記の変更セットが削除され、そこから派生する変更セットが削除され、作業ディレクトリがそのまま残されます。コミットしたコードの変更も元に戻したい場合は、--keep
オプションを削除します。
詳細については、 Strip Extension を確認してください。
「不明なコマンド「ストリップ」」を取得した場合は、有効にする必要があります。これを行うには、.hgrc
またはMercurial.ini
ファイルを見つけて、以下を追加します。
[extensions]
strip =
(Juozasがコメントで述べたように)複数のヘッドを持つことは、Mercurialの通常のワークフローです。あなたはそれと戦うためにストリップコマンドを使用しないでください。代わりに、ヘッドを着信ヘッドにマージし、競合を解決し、テストしてからプッシュする必要があります。
strip
コマンドは、ブランチを汚染する変更セットを本当に取り除きたい場合に便利です。実際、 この質問 の状況にあり、すべての「ドラフト」変更セットを完全に削除したい場合、チェックアウト- 一番上の答え 、これは基本的に次のことを提案します:
hg strip 'roots(outgoing())'
Hg Tortoiseを使用している場合は、拡張機能「strip」を有効にします。
- ファイル/設定/拡張機能/
- stripを選択します
次に、right click
を実行してストライピングを開始する場所から一番下のリビジョンを選択し、次を選択します。
- 変更履歴
- ストリップ
ちょうどこのような:
この例では、19番目のリビジョンから最後のコミットまで消去されます(22)。
最新の回答(Mercurial 2.1以降のみ):
Phases を使用して、秘密(プライベート)として共有したくないリビジョンをマークします。そうすれば、プッシュしても送信されません。
TortoiseHGでは、コミットを右クリックしてフェーズを変更できます。
Also:プルした後、拡張 "rebase"を使用して、ローカルコミットを共有リポジトリのヘッドに移動することもできます。
他のみんなが指摘しているように、おそらくヘッドをプルしてからマージする必要がありますが、 EditingHistory ツールを使用せずにコミットを本当に削除したい場合は、リポジトリをhg clone -r
取得するだけですそれらの変更を除くすべて。
これは元のリポジトリからそれらを削除しませんが、それらを持たない新しいクローンを作成します。その後、変更したリポジトリを削除できます(必要な場合)。
私もこの問題に出会いました。 2つのcommit
を作成し、両方のコミットをロールバックして削除したかった。
$ hg rollback
ただし、hg rollback
は2つのコミットではなく、最後のコミットにロールバックします。その時、私はこれに気づかず、コードを変更しました。
hg rollback
が1つのコミットをロールバックしたばかりであることがわかったとき、hg strip #changeset#
を使用できることがわかりました。そこで、hg log -l 10
を使用して最新の10個のコミットを見つけ、strip
にしたい適切な変更セットを取得しました。
$ hg log -l 10
changeset: 2499:81a7a8f7a5cd
branch: component_engine
tag: tip
user: myname<[email protected]>
date: Fri Aug 14 12:22:02 2015 +0800
summary: get runs from sandbox
changeset: 2498:9e3e1de76127
branch: component_engine
user: other_user_name<[email protected]>
date: Mon Aug 03 09:50:18 2015 +0800
summary: Set current destination to a copy incoming exchange
......
$ hg strip 2499
abort: local changes found
abort: local changes found
はどういう意味ですか? hg
は、まだコミットされていないコードへの変更を検出したことを意味します。したがって、これを解決するには、変更したコードとhg diff
およびhg revert
を保存するためにhg strip #changeset#
を使用する必要があります。ちょうどこのような:
$ hg diff > /PATH/TO/SAVE/YOUR/DIFF/FILE/my.diff
$ hg revert file_you_have_changed
$ hg strip #changeset#
上記を完了したら、patch
diffファイルを作成し、プロジェクトにコードを追加し直すことができます。
$ patch -p1 < /PATH/TO/SAVE/YOUR/DIFF/FILE/my.diff
Rebase extension を使用すると、これをさらに簡単に回避できます。hg pull --rebase
を使用するだけで、ブランチの問題を回避して、プルされたリビジョンにコミットが自動的に再コミットされます。
Gitに精通している場合は、git rebase -i
のように機能する histedit を使用してください。
hg strip
はあなたが探しているものです。 gitに精通している場合、git reset
に似ています。
コンソールを使用:
リビジョン番号を知る必要があります。 hg log -l 10
。このコマンドは、最新の10件のコミットを表示します。探しているコミットを見つけます。チェンジセット行changeset: 5888:ba6205914681
から4桁の数字が必要です
その後、hg strip -r 5888 --keep
。これにより、コミットのレコードが削除されますが、すべてのファイルが変更されたままになり、その後、それらを再コミットできます。 (ファイルを削除して削除するだけの場合--keep hg strip -r 5888