0

巨大なファイル (300MB) を誤ってコミットしてしまいました。その後、他のコミットを行い、巨大なファイルはリポジトリに入れるべきではないことに気付いたので、それらを削除しました。

ただし、プッシュする場合、mercurial は変更セットを時系列で送信しようとします。つまり、最初に巨大なファイルをプッシュしようとします。2時間待っても成功しませんでした。それで、残りに影響を与えずにその特定のコミット(チェンジセット)を取り除くことはできますか?

または、プロジェクト全体を削除し、新しいコピーを取得して、他の変更を手動で再適用する必要がありますか?

4

3 に答える 3

2

rebase通常、コマンドとstripコマンドは、この種の履歴変更操作に非常に役立つツールであることがわかります。親の上にある悪いコミットの後に行われたすべての変更をリベースしてから、悪い変更セットを取り除くことができます。

あなた<bad>が削除したい悪い変更セット<parent>は、その親で<child>あり、あなたが保持したい子であるとしましょう:

hg rebase -s <child> -d <parent>
hg strip <bad>

例:

$ hg log -G
@  changeset:   2:6d0685591967
|  summary:     after
|
o  changeset:   1:fab6b3f4effa
|  summary:     bad
|
o  changeset:   0:0233d1f3547c
   summary:     before

$ hg rebase -s 2 -d 0
saved backup bundle to .hg/strip-backup/6d0685591967-backup.hg
$ hg log -G
@  changeset:   2:b0fa9ee8533f
|  parent:      0:0233d1f3547c
|  summary:     after
|
| o  changeset:   1:fab6b3f4effa
|/   summary:     bad
|
o  changeset:   0:0233d1f3547c
   summary:     before

$ hg strip 1
saved backup bundle to .hg/strip-backup/fab6b3f4effa-backup.hg
$ hg log -G
@  changeset:   1:b0fa9ee8533f
|  summary:     after
|
o  changeset:   0:0233d1f3547c
   summary:     before

ご覧のとおり、悪い変更セットはなくなりました。

rebaseとが機能するには、と拡張機能stripを有効にする必要があることに注意してください。また、この履歴変更操作を実行する前に、必ずリポジトリのバックアップ コピーを作成してください。rebasemq

于 2012-11-14T09:53:43.300 に答える
1

他の変更を完全に手動で再適用する必要はありません。exportそれらimportを作成してから、新しいリポジトリのコピーに追加できます。

于 2012-11-13T20:02:02.710 に答える
1

プッシュが完了しない限り、「mq」拡張機能を有効にしてみてください。プッシュされていないコミットを削除できます。

于 2012-11-13T16:10:37.790 に答える