簡體   English   中英

Git:使用rebase應用主題分支(不合並)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM