通常,在HG我的工作流程是專門使用:什麼是汞拉所用的底墊命令--rebase
hg pull --rebase
如果我想在兩個命令運行這個,我會怎麼做呢?
hg pull
hg rebase <probably with some options?>
通常,在HG我的工作流程是專門使用:什麼是汞拉所用的底墊命令--rebase
hg pull --rebase
如果我想在兩個命令運行這個,我會怎麼做呢?
hg pull
hg rebase <probably with some options?>
什麼hg pull --rebase
確實是首先執行hg pull
,然後hg rebase
帶有默認參數(您可以查看功能pullrebase()
中的Mercurial分配中的rebase.py
中的代碼),但只有在中拉出任何新修訂版時纔會執行。如果不需要重新綁定,hg pull --rebase
將更新爲新的分支提示。所以,hg pull && hg rebase
大致是正確的,但並不完全捕捉到一些角落案例(沒有新的修訂版,沒有必要的rebase)。
默認情況下,hg rebase
將使用工作目錄的父爲基本修訂的底墊和最近當前分支的版本(即通常你只是在拉)作爲目的地。總之,它相當於hg rebase -b . -d 'last(branch(.))'
。
在這種情況下,「基本修訂」是什麼意思?這意味着Mercurial將會去尋找基本修訂和目的地的最不共同的祖先。然後它會將所有東西重新分配,但不包括目的地之上的最小共同祖先。也就是說,指定基本版本允許你在分支[1]上選擇幾乎所有你想要重定義的版本,並讓Mercurial找出哪些版本屬於該分支。
注意,因爲底墊是基於當前工作目錄的父目錄,這意味着,如果您當前的結賬是不你一直在做什麼,然後hg pull --rebase
可以通過實際努力變基不同的驚喜你分支(它通常會失敗,因爲這些修訂通常是公共階段的一部分,但如果您使用所謂的non-publishing repositories和不使用命名分支),則需要注意這一點。
[1]在這種情況下分支是指一個匿名或拓撲分支,而不是一個命名分支。進一步的細節見hg help glossary
。
如果你想通過手(普通壞主意)變基,必須
hg help rebase
-s
和可用使用這些選項讓我們在玩具回購看到:
回購甲
A>hg log -T "{rev} {desc}\n"
1 A2
0 A1
2個變更集A1和A2被克隆到回購B
和C
(B爲pull --rebase A
,C對清潔pull A
)
和克隆後爲了測試您的使用情況(分歧歷史),將兩個附加變更集添加到A和B + C中
A>hg log -T "{rev} {desc}\n"
3 A2++
2 A2+
1 A2
0 A1
B>hg log -T "{rev} {desc}\n"
3 B2
2 B1
1 A2
0 A1
Ç狀態是相同於B
B>hg pull --rebase
...
B>hg log -T "{rev} {desc}\n" -G
@ 5 B2
|
o 4 B1
|
o 3 A2++
|
o 2 A2+
|
o 1 A2
|
o 0 A1
即衍合拉的結果是「對的遠程變化頂部的局部變化線性的歷史」,比從C
只是拉C>hg log -T "{rev} {desc}\n" -G
@ 5 A2++
|
o 4 A2+
|
| o 3 B2
| |
| o 2 B1
|/
o 1 A2
|
o 0 A1
,或者在GUI
,爲了得到從C B,你要變基2(-s 2
)到新的父5(-d 5
),但短期hg rebase -b 2
也將工作,將具有相同的效果
'如果你想用手重新綁定(壞想法在普通)' 爲什麼這是一個壞主意? – sixtyfootersdude
@sixtyfootersdude - 因爲Mercurial方式是(更多)合併分歧的歷史,違背Git風格的避免合併 –
這是否意味着我應該避免'hg pull --rebase'? – sixtyfootersdude
我懷疑它是類似於git的:http://stackoverflow.com/questions/18930527/difference-between-git-pull-and-git-pull-rebase – jonrsharpe