我對本地存儲庫提交了一些更改,但尚未推送。由於某個功能的使用時間比預期的要長,因此我希望在推送之前將這些更改交換到命名的分支上。我怎樣才能做到這一點?Mercurial將更改移至新分支
回答
至於建議的關口,MqExtension是你的問題的解決方案。恕我直言,一個更簡單的工作流程是使用rebase extension。假設你有一個歷史是這樣的:
@ changeset: 2:81b92083cb1d
| tag: tip
| summary: my new feature: edit file a
|
o changeset: 1:8bdc4508ac7b
| summary: my new feature: add file b
|
o changeset: 0:d554afd54164
summary: initial
這意味着,修訂0
是你開始你的工作特性的基礎。現在您想要在指定的分支上修改1-2
,比如說my-feature
。更新至版本0
,並創建一個分支:
$ hg up 0
$ hg branch my-feature
$ hg ci -m "start new branch my-feature"
歷史,現在看起來是這樣的:
@ changeset: 3:b5939750b911
| branch: my-feature
| tag: tip
| parent: 0:d554afd54164
| summary: start new branch my-feature
|
| o changeset: 2:81b92083cb1d
| | summary: my new feature: edit file a
| |
| o changeset: 1:8bdc4508ac7b
|/ summary: my new feature: add file b
|
o changeset: 0:d554afd54164
summary: initial
使用rebase
命令將修訂1-2
到修訂3
:
$ hg rebase -s 1 -d 3
這結果如下圖:
@ changeset: 3:88a90f9bbde7
| branch: my-feature
| tag: tip
| summary: my new feature: edit file a
|
o changeset: 2:38f5adf2cf4b
| branch: my-feature
| summary: my new feature: add file b
|
o changeset: 1:b5939750b911
| branch: my-feature
| summary: start new branch my-feature
|
o changeset: 0:d554afd54164
summary: initial
就是這樣..正如馬克的回答中所提到的那樣,移動已經推動的變更集通常是一個壞主意,除非你在一個小團隊中工作,你可以溝通和執行你的歷史操縱。
恕我直言,這種解決方案的缺點是它引入了「啓動新分支我的功能」啞提交(即不會更改任何文件)。 – sschuberth
@sschuberth:我認爲在這裏明確表達是件好事。如果額外的變更集對您來說是一個問題,請將其與後面的變更集結合使用(例如,通過使用現在內置的[histedit](http://mercurial.selenic.com/wiki/HisteditExtension)擴展名的'fold'命令)。 –
如何用ASCII樹打印日誌? –
您可以使用MqExtension。比方說,變更集移動洋洋灑灑1-3:
hg qimport -r 1:3 # convert revisions to patches
hg qpop -a # remove all them from history
hg branch new # start a new branch
hg qpush -a # push them all back into history
hg qfin -a # finalize the patches
我喜歡的補丁解決方案由Mark Tolonen描述here
我有什麼:
hg log -G
#default branch
@ changeset: 3:cb292fcdbde1
|
o changeset: 2:e746dceba503
|
o changeset: 1:2d50c7ab6b8f
|
o changeset: 0:c22be856358b
我想要什麼:
@ changeset: 3:0e85ae268e35
| branch: feature/my_feature
|
o changeset: 2:1450cb9ec349
| branch: feature/my_feature
|
o changeset: 1:7b9836f25f28
| branch: feature/my_feature
|
/
|
o changeset: 0:c22be856358b
汞命令:
hg export -o feature.diff 1 2 3
hg update 0
hg branch feature/my_feature
hg import feature.diff
這裏是我的本地庫的
@ changeset: 6:0e85ae268e35
| branch: feature/my_feature
|
o changeset: 5:1450cb9ec349
| branch: feature/my_feature
|
o changeset: 4:7b9836f25f28
| branch: feature/my_feature
|
| o changeset: 3:cb292fcdbde1
| |
| o changeset: 2:e746dceba503
| |
| o changeset: 1:2d50c7ab6b8f
|/
|
o changeset: 0:c22be856358b
現在我需要從我的默認分支刪除修訂版1 2和3的狀態。 您可以使用mq擴展名中的strip命令執行此操作。 hg strip
從存儲庫中刪除變更集及其所有後代。
通過將以下行添加到配置文件(.hgrc或Mercurial)來啓用擴展。INI):
vim ~/.hgrc
並添加:
[extensions]
mq =
現在剝離這種儲存庫版本1.
hg strip 1
我們在這裏
@ changeset: 3:0e85ae268e35
| branch: feature/my_feature
|
o changeset: 2:1450cb9ec349
| branch: feature/my_feature
|
o changeset: 1:7b9836f25f28
| branch: feature/my_feature
|
o changeset: 0:c22be856358b
注:更改集不同但版本相同
對於那些傾向於使用GUI
- 轉到
Tortoise Hg
- >File
- >Settings
然後剔rebase
。
重啓龜UI
創建新的分支,你將被移動的變化。點擊當前分行名稱 - >選擇
Open a new named branch
- >選擇分行名稱。- 如果沒有做出要移動變化
public
(如draft
)到5(如果改變已經公佈和你不是高級開發人員,你應該與某個高級人員談話(請準備替罪羊),因爲你可能會把事情搞得一團糟,我不承擔任何責任:))。
轉到View
- >Show Console
(或按Ctrl +大號) 然後在控制檯hg phase -f -d 2
寫 - 其中2最低版本,你會被轉移到新的分支。
太棒了!去試試這個,但只有一個問題 - 爲什麼在最後階段將公共階段改爲公開? 「在遠程存儲庫中看到的任何變更集都是公開的」,所以當你推動它時,它不會被設置爲公共嗎? –
@JoshLeeDucks推動時,他們不會再自動改變爲「公共」(至少對我而言他們不會)。 –
- 1. git將本地提交的更改移至新分支並按
- 2. 分支模型:如何將分支完成的更改移至另一分支
- 3. 將分支移至新標籤
- 4. Mercurial,更改集的更改分支
- 5. 將工作移至另一個分支Mercurial
- 6. 從分支中的mercurial分支庫中提取最新更改
- 7. GIT中移動從主未提交更改至新分支
- 8. 將開發變更移至新功能分支
- 9. git:如何在合併分支之前將更改移至新文件?
- 10. Mercurial總是說更改分支時更新了文件
- 11. Mercurial/Tortoiehg合併分支沒有更新
- 12. 將本地更改移入分支
- 13. 如何將已提交但未修改的更改移至另一個分支?
- 14. Git - 將分支移至主人
- 15. 如何將某些變更集移動到mercurial中的新分支
- 16. 我如何更新與其他分支的mercurial分支
- 17. 如何使用Mercurial將上游更改引入分支?
- 18. 如何僅將您的更改推送到許多mercurial分支?
- 19. Mercurial:將單個更改合併到未命名的分支中
- 20. 事後如何將我的更改移動到新分支?
- 21. 使用VS2010將TFVC掛起的更改轉移到新分支?
- 22. 如何將分支更新爲Mercurial中不同分支上的標籤狀態?
- 23. Mercurial - 將兩個分支合併爲第三個新分支
- 24. mercurial將一個分支設置爲新的默認分支
- 25. 我可以將更改多個mercurial subrepos提交給新的命名分支嗎?
- 26. TFS將分支移至新創建的文件夾
- 27. 將更新推送到修剪的Mercurial分支
- 28. 將主變更移至開發分支(使用GIT)
- 29. 在Mercurial中移動分支開始
- 30. 僅將某些更改列表移至新的SVN服務器
可能的重複[如何將某些變更集移動到新的分支在mercurial](http://stackoverflow.com/questions/2219756/how-to-move-some-changeset-to-a-new-branch- in-mercurial) –