ブランチを(引用符なしで)切り替えているので、あなたの質問はよくわかりません。名前がブランチでなくても、ブックマークを使用するとブランチのままになります。
あなたが犯した間違いは正直な間違いであり、Mercurialにブックマークでそれを再び行うことからあなたを保護させる方法はありません(同じリビジョンを異なるブックマークでマークし、間違ったブックマークでコミットする)。私があなたに言うことができるのは、Mercurialを使ってプライベートローカル分岐を行う方法です。こうすることで、今の結果を回避できます。
名前付きブランチとフェーズを使用します
Mercurial Phasesは本当に甘いので、簡単に説明しましょう。フェーズと呼ばれる3つの特別な状態の改訂をマークできます。これらは、シークレット、ドラフト、およびパブリックです。
- 秘密:押されないでください。履歴編集で変更できます。
- ドラフト:プッシュされます。履歴編集で変更できます。これは、リビジョンのデフォルトの状態です。
- public:プッシュされます。それらに履歴編集拡張機能(ストリップ、リベース、ヒストリットなど)を使用すると、警告が発行されます。
前述のように、すべてのローカルリビジョンはデフォルトでドラフトであり、プッシュすると公開されます。このコマンドを使用しhg phase
て、特定のフェーズへのリビジョンをマークできますが、#3から#2、または#2から#1(前の番号付けによる)に移行する場合は、変更を強制するために-f引数が必要です。 、 これは:
シークレット->ドラフト->パブリック
左に移動するには、-forceまたは-fを使用する必要があります。
これがあなたがすることです:
hg branch experiment
hg commit -m "Opening experimental branch" //say this creates revision 123
hg phase -sf tip //s is for secret, f is for force
//... hack hack hack
hg commit -m "Uh oh screwed up here"
hg push //no secret revisions are pushed
今、あなたはその枝を捨ててそのままにしておくことができます、それは決して押されることはありません。それを忘れて、あなたがあなたの枝をリストするときにそれがあなたを煩わせないようにそれを閉じるだけでも。プッシュされたり、リストされたりしないので、心配する必要はありません。
ただし、OCDを使用している場合hg strip
は、ブランチが開かれたコミットでブランチを削除()するだけで、次のようになります。
hg strip 123
既存のブランチがある場合は、次のように一度に複数のリビジョンをフェーズできます。
hg phase <start revision>::<end revision> -sf
シークレットブランチのドラフトまたは公開を行うには、これらのフェーズの最新のリビジョンをフェーズするだけです。
hg phase -d tip //assuming you are in the experiment branch
次にプッシュすると、ブランチが公開されます。
Mercurialは、それを思いとどまらせるという一般的な哲学を変えることなく、歴史の修正においてますます良くなっています。フェーズは、偶発的な履歴の変更から保護するだけでなく、意図しないことを共有することからも保護することを目的としています。
*私*がブックマークを使用する方法
個人的には、ブックマークを使用してデバッグを行ったり、1つのことを2つの異なる方法で試したい場合に使用しています。私にとって、ブックマークは、匿名のブランチ(以前のリビジョンへの更新、履歴のコミットとフォーク)を実行したいが、物事をわかりやすくしたい場合に役立ちます。