[英]Git complex merge (after migration from svn)
在幾天內,我必須做一個復雜的提交,我將嘗試詳細解釋:
我們正在使用GIT(從svn遷移后)並有3個工作分支:
所以通常開發人員會這樣順序:
新票 - >本地副本 - >主干 - >預生產 - >制作
非常標准,我想。
現在,問題本身:在主干中我們有一個任務完成的地獄(1000多個小時),那是從svn遷移之前的那個,所以它不是git-branched,或者類似的東西,它只是一堆提交。 我們需要將該任務合並到預生產,然后相應地生產分支。
我無法確定最輕松的方式是什么。 我甚至不確定分支在遷移后是否有共同的祖先提交。
是否有解決問題的常用方法? 也許我可以將與此任務相關的提交分組到分支中,然后將此分支與pre和production合並?
任何建議都非常感謝。
如果你需要一個祖先提交(總是一個好主意IMO),你可以使用SVN找到干線和預生產/生產最后相同的實際分歧點,然后在git中的預生產分支上找到相應提交的SHA1。做這個:
git checkout -b temp trunk // Don't use trunk itself in case it breaks
git rebase <SHA1 goes here> // Rewrite the commits as changes from that SHA1
// Possibly fix some conflicts
// Verify manually that you have the code you expect
git branch -m trunk old_trunk // Move old trunk aside
git branch -m temp trunk // Here's the new trunk!
這將使你的主干分支免於預生產。 您可能需要重復,以便預生產也分支生產。
為了將它們干凈地合並,打開git rerere (以便在將預生產合並到生產中時記錄並自動重用解決任何沖突的方式),然后執行以下操作:
git checkout preproduction
git merge --no-ff trunk
這將進行合並提交(no-fast-forward),以便您可以查看功能的開始和停止位置,而不是一長串提交。 它也將保留樹干分支,因此您可以繼續保持它准備合並下一個功能。
我們用來管理這個過程的模型是git-flow ,聽起來很像你描述的工作流,所以我建議你檢查它,以及支持它的命令行工具 。
此外,如果您希望對提交進行分組,我將探索使用rebase將它們從主干流中取出並將它們作為非快進合並放回,這樣您就可以看到特定功能的開始和結束位置。
我傾向於分支生產,然后與這個新分支合並。 然后任何問題都可以解決,最后這個分支將成為一個新的預生產,然后可能最終合並回生產,或根據歷史,成為生產2.在http:// www。有一系列的Git教程。 ava.co.uk/git和一個合並。 它們可能是你已經知道的東西,在這種情況下我會道歉,或者它們可能足夠清晰,讓你對你所選擇的方法充滿信心。 HTH
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.