ヘッドを次のように表さくらんぼ狩りの変更のためのコミット

StackOverflow https://stackoverflow.com/questions/854930

  •  21-08-2019
  •  | 
  •  

質問

は、私は多くの変化を自分のコードにのみ必要なコミット数の変わります。があるのではなmercurial?知っている darcs 現在に至っており、このようにします。

知ってい hg transplant ることができ所定の方法では、このようになった犯コードの現在の支店がない場合の追加変更設定あり。

役に立ちましたか?

解決

MQとしてチャド記れる方向は決まっています。りも軽量化ソリューション

  • 記録を延長 る作品約と同じようにdarcsます。で配布mercurial.
  • 陳列棚延長 できる"陳列棚"一定の変更を可能にし、コミットのみサブセットのご変更ものにな配架)

他のヒント

ご利用の場合 TortoiseHg1.x Windowsの場合は、 この機能が実装されている美しい 右のボックス(拡張子が必要です。

  1. のTortoiseHgコミットツールです。
  2. を選択ファイルをできるだけ いコミットサブセットの 変わります。
  3. をクリックしHunk 選択タブで、プレビューで表示されなくなります。
  4. ダブルクリックまたは利用のcommandを 切り替える変更hunksき に含まれます。

のための TortoiseHg2.x, のHunk選択タブが開始されます。その 陳列棚のツール.これは、いくつかの機能はhunkます。新しい特徴をしてもらったりのコストも追加さい。

enter image description here

ございますのでご注意は明示的に可能にすMercurial陳列棚延長利用の場合この特徴です。にSteve Borho(鉛TortoiseHg開発) 応答の異なるTortoiseHg質問: "私たちは現地のコピーの陳列棚の延長を呼び出します。"


のための TortoiseHg2.7+, この機能を改善し、再紹介します。今では内蔵の直接のコミットツール:

example of change selection in the commit tool

通知ファイル一覧の左にあるファイルをチェックし、表示で、第二のファイルをチェックなので、次表には含まれておりませんが、第三のファイルSample.txtはなったのはNullチェックボックス表示など)でのみ選択の変化からそのファイルに含まれます。

の変更Sample.txt とすることをチェックインの変更を選択部分のイメージです。の変化は対象外となりますがチェックなしのdiffビューはグレーアウトされます。また通知のアイコンのための陳列棚のツールは簡単に手に入ります。

Mercurialのキューチュートリアルでは、このユースケースのためにひどいです。私が見てきたすべての例は、あなたがコミットするためにまだ持っていると仮定して、あなたは、単一のパッチを更新しています。この時間のほとんどがそうではない、とあなたが一緒にスカッシュまたはいくつかの他の方法で変更したい2つのまたは3コミットをしています。

あなたは歴史のこの種を持っているとしましょう。

---O---O---A---B---C
スカッシュは、B、およびCの最初のinit MQをコミットする

最初の例である:

$ hg qinit

今、私たちは、パッチキューに「輸入」のコミットA、BおよびCにする必要があります。彼らは最後の3つのコミットしていると仮定します。私たちは、そうのようにそれらをインポートするには、「-N」改訂の構文を使用することができます:

$ hg qimport -r -3:-1

これは戻って最後のコミットまでの3つのパッチからパッチとしてインポートを意味します。あなたはhg qseriesでこれらのパッチの状態を確認することができます。それはこのような何かを表示する必要があります:

$ hg qseries
101.diff
102.diff
103.diff

番号101、102及び103は、次にコミットA、BおよびCのローカルリビジョン番号これらのパッチに対応する場合は、はそれらがすでに説明した変更を意味し、に適用されます作業コピー。あなたは、変更作業コピーを取り除くとhg qpopを使用することにより、唯一のパッチの形でそれらを保存し、コミットの履歴からそれらを削除することができます。あなたは、スタックからの変更CとBをポップするhg qpop; hg qpopを言う、または「にポップ」するためのパッチを指定することができます。この場合、それはこのようなものになるだろう。

$ hg qpop 101.diff
now at: 101.diff

あなたは今のところは、パッチキューにBとCをコミットしたパッチを持っていますが、彼らは適用されません(その変更は「失われた」されている - 彼らは唯一のパッチキュー領域に存在します)。今、あなたはつまり、我々は新しいを作成し、最後の一つに、これらのパッチを折ることができるが、変更A + B + Cの合計に相当しますコミットます。

$ hg qfold -e 102.diff 103.diff
あなたがコミットメッセージを変更することができますので、

これはあなたのエディタが表示されます。デフォルトメッセージは、アスタリスクによって分離された変更A、BとC、のコミットメッセージの連結であろう。ここでの良いところは、そのhg qfoldあなたbashを使用している場合は、パッチをタブ完了し、HG-完了スクリプトが調達していますです。

:A + B + Cは、単一のことが私たちの興味3つのパッチの組み合わせであるコミットであるここでは、このように歴史を残し
---O---O---A+B+C

私たちは以前のように歴史の同じ種類を持っている場合は、別のユースケースはあるが、我々はパッチBを削除し、A + Cをマージしたいです。これは実際には上記とはかなり似ています。あなたはqfoldのステップに到達すると、あなたは、単に最後の2つのコミットするのではなく、最後のコミットで倍になります。

$ hg qfold -e 103.diff

このパッチは、キュー内のBの変更を残していますが、作業コピーには適用されず、そのコミットすることは歴史の中ではありません。あなたが実行することによってこれを見ることができます:

$ hg qunapplied
102.diff

歴史は今、A + Cは、単一のことが変化し、AとCを組み合わせたコミットである場合には、このようになります

---O---O---A+C

最後のユースケースは、あなたが上記のようqimportを実行することにより、これを行うと思いますC.をコミットのみに適用する必要があるかもしれない、とあなたはしたくなかったすべてのパッチをオフにポップなります:

$ hg qpop -a

-aフラグ手段は、すべてのパッチをオフにポップ。今あなたがしたいですかひとつを適用することができます:

$ hg qpush 103.diff

これは、この歴史をあなたに残します:

---O---O---C

あなたはこのすべてで行われたら、キューあいを終える必要があります。これはで行うことができます:

$ hg qfinish -a

だから、私たちはあります。あなたが実行できるようになりました。hg push のだけあなたが望むものを正確にコミット、またはhg email のメーリングリストへのコヒーレントパッチます。

誰も示唆していないので、私は何かが欠けてるよう

私が感じるこのすでにます。

通常は「HGコミット」コマンドを選択します(ローカルの作業ディレクトリにあるすべての保留中の変更をコミットする必要はありません)コミットするものを選択するために使用することができます。

あなたはそのような変更のセットを持っている場合:

M ext-web/docroot/WEB-INF/liferay-display.xml
M ext-web/docroot/WEB-INF/liferay-portlet-ext.xml
M ext-web/docroot/WEB-INF/portlet-ext.xml

あなたが...それらの変更の2つだけをコミットすることができます。

hg commit -m "partial commit of working dir changes" ext-web/docroot/WEB-INF/liferay-display.xml ext-web/docroot/WEB-INF/liferay-portlet-ext.xml

あなたが選択(亀のようなGUIのチェックボックス法VS)コミットするファイルを手入力する必要がなく、それを取得し、何の拡張を必要としないので、それは程度の簡単ですので、コマンドラインから超便利ではありません。そして、ファイルグロブは、おそらく彼らのユニークなパス名に「Liferayのを」共有コミットファイルの両方、それは上記と同じように(タイピングを減らすことができます。

あなたはMercurialを一緒に配布されたレコード拡張を、使用することができます。

あなたは~/.hgrcセクションに追加することで、最初にあなたの[extensions]ファイルでそれを有効にする必要があります:

[extensions]
record=

次に、だけではなく、hg recordhg commitを入力して、あなたがコミットするファイルをに変更するかを選択することができるようになります。

また確認および選択するためのよりよいインタフェースを提供します crecord拡張を使用することができます変更。 (それはしかし、Mercurialのと一緒に配布されていない、と私はそれが時折めちゃくちゃにそれは完全にバグのないではありませんので、コミットを見てきました。)

いくつかの時間が経過しました。最良のオプションは、現在hg commit --interactiveようです。

私はコミットパッチをに使用しています。それはあなたがコミットする前に差分を編集することができますスクリプトです。これは、Emacsの差分モードおよびVC-モードと本当にうれしいです。

過去に私がcrecordを使用しますが、それは(実際には、レコードの拡張子はcrecordが依存するバグを、持っている)unicodeに関連するバグを持っています。

まずなすべてを忘れま知っていGUIとのコマンドライン.次回からのコマンドラインながらここ

hg stat>filelist.txt

このパイプの全ての変更ファイルと呼ばれるテキストファイルfilelist.txt

次回の編集filelistだけを含め、ファイルを希望す。

最後にコミットのfileset sytnax:

hgコミット"に設定:'listfile:test.txt'"

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top