2010-04-22 33 views
1

我有一個git回購有幾個分支 - 有主分支,這是我們的穩定工作版本,然後有一個開發/分期分支,我們正在做新的工作英寸在git中回滾或重新創建主分支?

不幸的是,它會似乎沒有想到我有點過分熱衷於重新定義,並且在一段時間內將所有暫存代碼拉入Master(大約80次提交...是的,我知道,愚蠢,笨拙,糟糕的代碼管理等等)。 ...)。

由於這個原因,我很難在當前版本的應用程序(一個rails應用程序)上做一些小修改,並推出更改,而不會推出我們不需要的「stage」新功能但想要發佈。

我想知道是否有可能做到以下幾點:

  1. 確定最後的「樹幹」提交
  2. 採取一切從該點開始承諾,並將其移動到一個單獨的分支,或多或少回滾更改
  3. 開始使用它們製作的分支。

不幸的是,我仍在不斷地學習git,所以我對這裏真正要做的事情有點困惑。

順便說一下,提交已被推送到遠程,但我不介意用--force重新推送,我是唯一一個推動遠程的人。

謝謝!

回答

2

會有公佈的問題(這意味着你將有:

  • 力推新主人到遠程
  • 與任何人已經爲了從遠程已經退出了他們,如果你的情況是他們的主復位到一臺遠程 )

通信:

m1-m2-m3-m4-s1-s2-s3-s4 (master,stage) 

也就是說,如果你的當前主自己居然也現階段分支,一個簡單的復位是爲了(如knittl在his answer提到)

但是,如果你的情況是:

m1-m2-m3-m4-s1-s2-s3-s4-m5-m6 (master) 
         \ 
         -s5-s6 (stage) 

如:「我把舞臺融入主人,然後繼續主人!「
,然後rebase --onto是爲了:

git checkout master 
git reset --HARD m4 
git rebase --onto master s4 m6 

您將獲得:

m1-m2-m3-m4-m5'-m6' (master) 
      \ 
      -s1-s2-s3-s4-s5-s6 (stage) 
+0

非常好的答案+1 – knittl 2010-04-22 09:39:55

+0

感謝您的詳細解答,無論您的和knittl的回答是分機可以幫助...現在我只需要懲罰自己搞砸工作流程:P – 2010-04-23 11:10:29

0

您是否已將您的提交推送到遠程存儲庫?如果你沒有,你可以簡單地使用git reset <commit>(確保前閱讀手冊頁,復位可能是危險和混亂)

+0

對不起,我應該補充說 - 這些提交已經被推到遠程,但我不再次將他們推回去,我是唯一一個推動遠程的人, – 2010-04-22 08:39:42

+0

好吧,在這種情況下,請確保其他人也刪除提交 – knittl 2010-04-22 08:41:38