本当に1つだけのコミットのペアがあります。 gitを使用していた場合、次を使用します。
git rebase -i <some-commit-before>
そして、それらをつぶします。
水銀でそれをすることはできますか?もしそうなら、どのように?
はい、 変更セットの連結 により、拡張機能なしでMercurialを使用してこれを行うことができます。
または、拡張機能を使用する場合は、次の方法を使用できます。
私のお気に入りはhg strip --keep
コマンドです。そして、1回のコミットですべての変更をコミットします。
毎日の仕事中に多くの小さなコミットをするのが好きなので、これは私にとって最も速くて最も快適な方法です;)
注1:strip
を有効にするには、組み込みの拡張機能mq
が必要です。
注2:私のお気に入りのGit/Mercurialクライアント(SmartGit/Hg)は、strip
の間にデフォルトで--keep
パラメーターを追加します。さらに便利なのは、join commits
というオプションを提供することです:]
Rebase extension はチャームのように機能しました。 2つのコミットをつぶすには:
$ hg rebase --dest .~2 --base . --collapse
ドットは現在のリビジョンのショートカットです。
ブランチでいくつかのコミットがあり、それらをすべて1つにまとめたい場合はさらに簡単です。
$ hg rebase --dest {destination branch (e.g. master)} --base . --collapse
仕組み:
( http://Mercurial-scm.org/wiki/RebaseExtension#Collapsing から)
この回答を読んでいる場合、この回答に記載されている他のすべてのオプションを忘れて、 evolve extension から
fold
コマンドを使用できます。
evolve
はMercurialの拡張機能であり、安全で変更可能な履歴を作成するのに役立ちますが、まだ実験的です。 repo からクローンを作成し、このように.hgrcに追加することで使用できます。
[extensions]
evolve = ~/evolve/hgext/evolve.py
クローンを作成すると、ホームディレクトリにリポジトリが展開されます。これで準備完了です。 hg help fold
でヘルプを探すこともできます。
fold
に、壊れていないコミットの線形チェーンを押しつぶす/折りたたむように指示します。 foldが行うことは、すべての変更セットからの変更を含む新しい変更セットを作成し、それらすべてのコミットを廃止としてマークすることです。 docs でこれをより深く見ることができます。
次のような履歴があるとします。
a -> b -> c -> d -> e -> f -> g
e
、f
、およびg
をつぶします。できるよ
hg up g
hg fold -r e
結果は
a -> b -> c -> d -> h
ここで、h
は、3つのコミットe
、f
、およびg
のすべての変更を含む変更セットです。
履歴の途中からチェンジセットをフォールドすることもできます。つまり、必ずしもチップを含むチェーンを選択する必要はありません。 b
、c
、およびd
を折りたたみたいとします。できるよ
hg up d
hg fold -r b
hg evolve --all
これにより、
a -> i -> j
ここで、i
はb
、c
、d
およびj
の折り畳まれたチェンジセットはh
と同じチェンジセットです。 。 Evolveユーザーガイド は必読です。
私が使う:
hg phase --draft --force -r 267
...
hg rebase --dest 282 --source 267 --collapse
最新の2つのコミットをスカッシュ(統合)したいとします。
リビジョン番号を見つける
hg log -G -l 3
可能な出力:
@ changeset: 156:a922d923cf6f
| branch: default
| tag: tip
| user: naXa!
| date: Thu Dec 13 15:45:58 2018 +0300
| summary: commit message 3
|
o changeset: 155:5feb73422486
| branch: default
| user: naXa!
| date: Thu Dec 13 15:22:15 2018 +0300
| summary: commit message 2
|
o changeset: 154:2e490482bd75
| branch: default
~ user: naXa!
date: Thu Dec 13 03:28:27 2018 +0300
summary: commit message 1
ソフトリセットブランチ
hg strip --keep -r 155
変更を再度コミットする
hg commit -m "new commit message"
strip
を有効にするには、組み込みの拡張機能が必要です。作成/編集~/.hgrc
次の内容の設定ファイル:
[extensions]
strip =
chistedit
(Mercurial 2.3以降に組み込まれている)は、純粋なMercurialであるrebase -i
に最も近いと思います(chistedit
はhistedit
の対話型バージョンです)。 histeditに入ると、fold
コマンドはrebaseのsquash
にマップされ、roll
コマンドはrebaseのfixup
にマップされます。詳細については、 histedit docsを参照してください。
以下に簡単な例を示します。次のものがあり、1e21c4b1のすべての変更を前のリビジョンに移動し、前のリビジョンのメッセージのみを保持するとします。
@ 1e21c4b1 drees tip
| A commit you want to squash
o b4a738a4 drees
| A commit
o 788aa028 drees
| Older stuff
hg chistedit -r b4a738a4
を実行して、履歴を編集してb4a738a4に戻すことができます。 chisteditで1e21c4b1にカーソルを合わせ、r
を押して、そのリビジョンをロールすることを示します。 histedit(古いものから新しいものへ)の順序がhg log
(新しいものから古いものへ)から逆になっていることに注意してください。
#0 pick 160:b4a738a49916 A commit
#1 ^roll 161:1e21c4b1500c
変更を選択したら、c
を選択してコミットします。結果は次のとおりです。
@ bfa4a3be drees tip | 788aa028 dreesのコミット|古いもの
比較的初心者の場合は、histedit
がchistedit
よりも適切な選択になる可能性があります。これは、参照用にhisteditファイルでコマンドの説明を提供するためです。通常のテキスト編集(通常のリベースと同様)を使用してコマンドを設定するには、もう少し編集が必要です。
histedit
またはchistedit
を使用するには、〜/ .hgrcの拡張機能にhistedit
を追加する必要があります。
[extensions]
histedit =
rebase -i
に最も近く、履歴のどこでも動作するため、chistedit
を推奨しました。現在のリビジョンを前のリビジョンにサブスクライブ/微調整する場合は、@ Gを選択します。何が起こっているのかは明らかなので、Demeckiのstrip
提案は良いかもしれません。 Mercuria 2.8以降に組み込まれています。上記と同等の結果を得るには、次を実行できます。
hg strip .
hg add
hg commit --amend
注strip
は、histeditと同様に、〜/ .hgrcで有効にする必要があります。
[extensions]
strip =