2

Mercurial では、プッシュを徐々にコミットする必要があるシナリオをよく見かけますが、途中で別の人がコミットすると問題が発生します。

例: HG リポジトリに 4 つのファイル a.txt、b.txt、c.txt、d.txt があり、Mickey と Goofy の 2 人のユーザーがいるとします。

Mickey does:  $ echo "change1" >> a.txt
Mickey does:  $ echo "change2" >> b.txt
Mickey does:  $ echo "change3" >> c.txt
Mickey does:  $ hg commit -m "I am good" a.txt
Goofy does:   $ hg pull -u; echo "change4" >> d.txt; hg commit -m "The Donald change" 

Mickey はコミットとプッシュの準備をしますが、マージする必要があります: Mickey は次のことを行います: $ hg pull -u

これで Mickey には b.txt と c.txt の 2 つの変更が加えられました。彼の c.txt の変更は複雑で、今すぐリリースできないと仮定しましょう。Mickey は、c.txt をまだコミットせずに、a.txt と b.txt の変更をコミットしてプッシュするにはどうすればよいでしょうか?

4

2 に答える 2

2

コミットしたいファイル名を発行するだけです:

hg commit a.txt b.txt -m'partial commit'

あとは普通に押してください。

編集:ローカルの変更をパッチとして保存し、リモートの変更を元に戻してプルしてから、パッチを適用することができます。

hg diff > local.patch
hg revert
hg pull -u
patch -p1 < local.patch
于 2012-06-04T12:59:26.003 に答える
1

あなたの質問は私には完全に明確ではありません。間違っている場合は修正してください。

Mickey のレポには次のようなものがあります ( A— Mickey の変更セットとa変更、D— Goofy の変更セットとd変更、w— Mickey の作業コピーbc変更):

-- o --- A --- w
    \
     D

今、ミッキーにはたくさんのオプションがあります。bリリースする準備ができているので、すぐにコミットします。

$ hg ci b.txt -m "Finished working on b.txt"

-- o --- A --- B --- w
    \
     D

cこれで、作業コピーに変更のみが残ります。Mickey は中間コミットを行います。

$ hg ci -m "working on c"

-- o --- A --- B --- C' --- w
    \
     D

作業コピーはクリーンです。がマージに含まれていないことを確認するためC'に、Mickey は以前の変更セットに更新してからマージします。

$ hg up B
$ hg merge D
$ hg ci -m "Merged with Goofy"

-- o --- A --- B --- C
    \           \
     D --------- M --- w

これで Mickey は の作業を続行しC、準備ができたらコミットを修正できます。

$ hg up C
$ echo "final change" >> c.txt
$ hg ci --amend -m "Finished working on c.txt"

ここから、Mickey はマージまたはリベースできます (ちなみに、Goofy とのマージもリベースになる可能性があります)。

于 2012-06-04T22:04:38.043 に答える