2012-10-27 34 views
4

我有一個關於bitbucket的開源項目。最近,我一直在研究一個實驗分支,我(無論出於何種原因)並沒有爲實際分支做準備。相反,我所做的就是使用書籤。我應該如何管理「恢復」使用mercurial書籤完成的分支?

所以我同一版本做了兩個書籤

  • 測試--the新的代碼,我對現在應該放棄工作(由於實驗失敗)
  • 主 - 穩定的舊代碼那工作

我在測試工作。我也將測試推向了我的服務器,最終我將tip標籤轉換爲新的不穩定代碼,當時我真的寧願留在主服務器上。我通過執行hg update main「切換」回主書籤,然後進行無意義的更改。所以,我用hg push -f推這個,現在我的源代碼控制在服務器上是「正確的」。

我知道應該有一種更清晰的方式來「切換」分支機構。這種手術在未來應該做什麼?

+1

@MarkBooth我沒有意識到這一點。投票結束並標記主持人注意加快進程 – Earlz

回答

0

我不明白你的問題,因爲你切換(不含引號)分支,即使它們沒有命名分支,當你使用書籤時它們仍然是分支。

你有這個錯誤是一個誠實的錯誤,我看不出有水銀保護你從再做使用書籤(標記不同的書籤一樣轉,並與一個錯誤犯)的方式。我可以告訴你,儘管是怎麼做私人地方分支與水銀,這樣一來,你就可以避免你剛後果:

您使用名爲分支機構和相位

Mercurial Phases是真的甜心,讓我快速解釋他們。您可以將修訂標記爲三個稱爲階段的特殊狀態,其中包括:祕密,草稿和公開。

  1. 祕密:別被推。可以通過歷史編輯進行修改。
  2. 草稿:被推送。可以通過歷史編輯進行修改。這是任何修訂的默認狀態。
  3. public:推送。使用歷史編輯擴展名時會發出警告(strip,rebase,histedit,...)。

如前所述,所有本地修訂是默認草案,當你推他們,他們成爲公共。您可以使用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 

,你可以放棄該分支,離開它就像這樣,它不會永遠得到推動。忘記它,甚至關閉它,以便它不會打擾你,當你列出你的分支機構。它不會被推到它不會被列出,所以只是不要擔心它。

但是,如果你有強迫症,只是帶(hg strip)的分支在那裏打開提交的分支,它消失了:

hg strip 123 

如果你有一個已經存在的一個分支,可以逐步同時多次修改如下:

hg phase <start revision>::<end revision> -sf 

爲了讓你的祕密分支草案或公衆,只是逐步的最新修訂,這些階段:

hg phase -d tip //assuming you are in the experiment branch 

然後推,分支將公開。

Mercurial在歷史修改方面日益變得越來越好,但並沒有改變它的勸阻性普遍理念。階段是爲了保護你免受意外的歷史修改,以及分享你不意味着什麼。

如何* I *使用書籤

就個人而言,我使用書籤進行調試和時,我想嘗試2種不同的做一件事情的方式。 對我來說,當你想做匿名分支時,書籤很有用(更新到以前的版本,提交和分叉歷史記錄),但想讓事情變得清晰可辨。

+0

我認爲問題是我真的不知道在Mercurial中分支的方式,因爲他們似乎是3種方式(克隆,實際分支和書籤)..我認爲這聽起來像一個很好的計劃,像這樣的未來事情雖然 – Earlz

+0

@Earlz他們都是分支機構,如果你看看DAG,你稱爲實際分支機構只是命名分支機構。另外,不要「克隆到分支」,它只是......有更好的方法,即使這種方法很容易恢復。 – dukeofgaming

1

tip在具有任何分支的倉庫中不是一個廣泛有用的概念。無論您是使用書籤,命名分支還是匿名分支,tip始終表示任何分支上最近的提交,這是您很少關心的事情。真正解決您的問題的方法是不要再擔心tip

相關問題