[英]Git: apply topic branch using rebase (without merge)
我想在我的主人身上申請一個小主題分支(在貢獻者的遠程倉庫上)。 我認為這樣做的規范方法是:
git merge contributor/topic-branch
但是我希望逐個應用提交而不是生成合並提交。
天真地運行git rebase contributor/topic-branch
顯然是行不通的,因為它將我的master應用到主題分支上,好像主題分支是我的上游。 所以我嘗試了這個:
git rebase master contributor/topic-branch
這就是我想要的,除了現在我有一個分離的HEAD,我需要修復master分支指向HEAD(使用branch -f
)。 我當然可以編寫一個Bash函數來自動執行此操作,但是有沒有“正確”的方法來引入主題分支而不使用merge
?
怎么樣:
git checkout topic-branch
git rebase master
git checkout master
git merge topic-branch
這解決了本地分支的問題。 解決跟蹤分支是一項練習。
編輯:我想我應該解釋一下這里發生了什么。 首先,您切換到主題分支; 然后你重新定義主題分支,使其基於主分支。 (然后,當然,你測試一切仍然有效。你確實有自動測試,對吧?)既然主題分支在主人之前,你可以改回主人並將主題合並到主人; 不需要合並提交,因為它是快進的。
我還發現,cherry-pick支持提交范圍,所以你可以做到
git cherry-pick HEAD..contributor/topic-branch
(這相繼應用了無法從HEAD訪問的topic-branch
中的所有提交。)
我從手冊頁中了解到,如果主題分支中存在合並提交,則會失敗,因此這僅適用於具有線性歷史記錄的簡單情況。
此外,如果使用本地主題分支執行此操作, branch -d
將不會檢測到topic-branch
已合並,因此您必須使用-D
。 (相比之下,Philip的rebase
+ merge
方法沒有這個問題。)
如果要將提交范圍從commit-start-id
移植到topic-branch-head
,那么請執行
git checkout contributor/topic-branch
git rebase --onto master <commit-start-id>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.