2014-04-04 38 views
1

我們使用Git(和格里特),但每個人都對這個項目是新來的git,這是我們做了以下錯誤:我們都使用主分支我們提交如何修正不正確rebase後混亂的git主機?

  • 我們爲某一方的開發創建了一個單獨的分支testbranch。
  • 過了一段時間,我們需要重新設置testbranch以掌握testbranch中需要的master中的某些更改。
  • 我們應該做的(我認爲)是:
    • git的重訂主testbranch
  • 但是我們所做的是:
    • git的重訂testbranch主
    • 混帳推緣起首:測試分支
  • 這個,我們現在意識到,採取了所有最近的主要變化,並將它們推到最重要的位置測試分支發生變化。
  • 我們很遺憾地在上面總共4次在幾個月的過程中,每次更新大量的更新。
  • 我們現在已經完成了testbranch並希望將testbranch的所有更改合併到master中。
  • 但是這不起作用 - 可能很明顯 - 因爲testbranch已經擁有了master中的所有更改,並且文件和衝突的數量很大,get/gerrit(不知道是哪個)會一直給出合併錯誤。

此時:

  • 我們能做些什麼來恢復?
  • 我們應該挑選testbranch的所有變化嗎?但是,當他們與從主人轉變的變化混合時,我們如何識別他們?
  • 我們是否應該將master重命名爲old_master,並將testbranch重命名爲新的master?如果是這樣,我們該怎麼做?

非常感謝任何答案。

+0

您能否在此階段精簡(儘可能簡單且儘可能最小化)您的提交歷史記錄的外觀? – Useless

+0

master的提交歷史很簡單 - 它只包含提交到它的項目。 testbranch的提交歷史記錄基本上是在testbranch中進行的一系列更改,後面跟隨來自master的一組更改,重複4次。從視覺上看,它看起來像一團糟。 – Ask613

回答

1

首先是一個快速PSA。您不應該在服務存儲庫中重新分配分支。在你概述的場景中,你應該把master合併到testbranch中。這會將您的主變更添加到testbranch。通過重新設計,您正在重寫公共分支(由其他人克隆的分支)的歷史記錄,這將不會爲克隆存儲庫的開發人員帶來問題。這就是說,如果你已經成功地將master轉移到testbranch,那麼master應該擁有master + testbranch的所有更改。我認爲這是你想要的。您應該能夠驗證主服務器是否具有所需的所有更改(即所有您的測試分支更改)。如果是這種情況,那麼您可以使用當前主服務器前進。

如果測試分支上還有其他更改沒有重新設置爲主控,那麼您需要將這些更改合併到主控。合併應該是直截了當的,因爲主和測試分支通常是相同的,因爲你以前的基準。

你得到合併衝突的事實很奇怪。我建議嘗試合併時創建一個新的克隆。您對公共存儲庫進行的重新佈局可能會混淆正在進行/取出更改的所有克隆。

或者,如果您可以驗證testbranch是否有所需的所有更改,您可以嘗試您在問題中概述的「重命名分支」計劃。要做到這一點:

  1. 選擇「項目」從格里特菜單選擇從項目的子菜單
  2. 選擇「分行」創建一個分支叫old_master並設置「初始版本」是「主」。這將創建一個名爲old_master的新分支,指向master當前指向的位置。您應該在分支列表中使用與主版本相同的修訂哈希來查看它。
  3. 選中「master」旁邊的複選框,然後點擊刪除按鈕刪除分支主控。
  4. 創建一個名爲主與最初的版本是testbranch你應該可以看到主分支列表中具有相同修訂散列作爲testbranch

新主新的分支是現在一樣testbranch

你將需要告訴所有開發人員創建一個新的克隆,並停止使用任何舊的克隆。