2014-01-28 82 views
1

我在我的項目的主分支中擁有我的代碼。我想要在單獨的分支中的代碼,而不是在主人。我可以創建一個新的分支。但創建分支後,是否有可能以這種方式刪除主人的所有代碼,如果我後來rebase或合併我的新分支到主人它不會導致任何問題?將主代碼中的所有代碼轉移到新分支並從主代碼中移除代碼

謝謝

+0

你提交併推送到遠程? –

+0

是的,我已經推到遠程,我想在遠程本身上創建一個新的分支,並將所有代碼從主站轉移到新分支 –

回答

3

這是一個有點棘手,你不能做正確,如果其他公司已經有了你的提交複印件。即如果您將主分支推送到其他人正在使用的遠程存儲庫,或者如果有人直接從您的存儲庫中提取,則沒有乾淨的方法可以擺脫此問題。

您必須重寫主分支的歷史記錄。有兩種情況我們必須在這裏看一下。從你的問題,我認爲在master,有一個提交已經創建之前任何代碼提交你想從主要刪除。讓該提交的ID爲rootcommit。如果您的代碼已經有一個新分支,請跳過第1步和第2步,從主分支分支。

  1. git checkout master:確保你在主人。
  2. git checkout -b my-fancy-new-branch:創建您的新功能分支。
  3. git checkout master:切換回主人
  4. git reset --hard rootcommit:將主人重置爲您自己提交之前的狀態。
  5. 可選的,如果你有你拉一個遠程:git pull --ff(如果失敗,因爲拉不快進,你不得不重新考慮rootcommit它包含了一些你的工作)

事實上,如果你在處理你的代碼的時候從任何一個遠程服務器上進行操作的話,這應該甚至可以工作如果你想聽聽您對從遙控器上的提交頂部提交,您可以在遠程變化衍合新的分支:

git checkout my-fancy-new-branch 
git rebase master 

應用這些更改到遠程,這是可能的,但一個巨大的麻煩,你現在必須對主人做推力。每個擁有該存儲庫克隆的人員,都必須特別謹慎,因爲主人的歷史已經發生了變化。他們必須按照與您所做的基本相同的步驟進行操作,然後拉出然後重新應用其本地更改(如果有的話)。要執行強制推送,您必須執行:

git checkout master 
git push --force 

如上所述,強制推送實際上是邪惡的,您可能應該避免它。如果可以的話,就把這些提交留在歷史中,下次再做。