2013-07-08 80 views
0

我以前一直在研究功能並將它們合併到主分支中。現在,我需要將master作爲一個穩定功能的分支來維護,然後在dev分支上工作以構建新功能。Git - 回滾到以前的提交而不丟失工作

問題是,我超過了我的目標穩定提交對主。

我想設置主人說,5提交前,推這個分支,然後保持作爲一個穩定的分支部署到我的生產服務器。

這就是我到目前爲止所做的: 在最新的提交(在我的穩定提交之前),我創建了一個新的分支「dev」 現在開發將成爲我不穩定的新特性構建。

現在我坐在主人和開發人員在同一(不穩定)提交。

我想讓主人現在坐在我以前的穩定提交(5提交前)。

獎金的問題 - 如果我然後想添加從dev的功能(這將提交在主要提前),但只有在他們穩定後,這可能嗎? 假設我在開發中,並且我已經構建了一個活動源和一個電子郵件系統,我只想包含電子郵件系統。

如何將我的電子郵件系統功能分支合併到master中(5個提交後面的dev,這個電子郵件系統分支是基於的),而不會引入所有其他更改(在這5個提交中進行的更改, )?

讓我知道我是否可以澄清任何事情。

+0

你推了些什麼?這很容易(git checkout master; git reset --hard )將您的本地主控移回您想要的位置。 – antlersoft

回答

2

要撤消提交:

git reset HEAD~5 --hard # 5 being number of commits, --hard to not keep around changed files 

由於您從master分支,提交歷史記錄仍然在dev中。一旦準備就緒,重新融入主人。

至於你的獎金問題,這通常與功能分支。例如,我通常有幾個我正在開發的分支:master(僅限於此處的穩定代碼),1.x(僅在此處發佈代碼),feature-X,feature-Y等。

每個功能都是沙盒,所以當它準備就緒時,我就把它合併到master中。如果一個特性Y依賴於X,我將X合併爲Y並繼續工作。一旦完成,合併到掌握,測試和推動。

在這種發展風格上有一個很好的寫法:http://nvie.com/posts/a-successful-git-branching-model/。這篇文章介紹了git-flow,這很受歡迎。我沒有完全按照書面使用它,但我從中得到了一些建議。

你也可以換成主人,不包括你不想保留的提交。爲此,我會使用git rebase -i master(-i爲交互式)。這可以讓你在合併成master之前查看和操作提交。我建議在做這個之前分支,以防止破壞分支。

+0

只需要更加清楚(因爲通過硬重置會丟失5次提交會非常糟糕),對主設備進行重置不會對我的開發分支執行任何操作嗎?確切地說, – Squadrons

+1

。如果你偏執,首先在測試分支上進行。除非你推動它,否則它不會搞亂你的遠程分支。 – tjameson

+0

另外,感謝您添加鏈接到git-flow。我剛開始使用git時讀過它,但現在我已經使用它一段時間了,我相信我已經準備好開始使用它了。 – Squadrons

1

在你的分支主:

  • git checkout -b dev:你現在有一個Dev分支指向相同的哈希作爲主(不穩定)
  • git reset --hard HEAD~5:主現在5年前承諾(你不穩定提交仍在您的分支)

獎勵:

  • 廁所K代表git cherry-pick
  • 建立在從開發分支的「電子郵件」功能,然後rebasemaster你的分支電子郵件(在電子郵件分支:git rebase master
2

做到這一點的指針維持當前的主

git branch -m master old_master 

然後

git checkout -b master HEAD~5 

移動旅遊主5條前(或指定SHA),那麼你可以刪除old_master與

git branch -d old_master 

對於獎金問題,您可以開發功能分支並將它們與--no-ff合併lopment分支,然後坐在master上,你會做git merge --no-ff devcommit,其中devcommit代表該特性分支在開發中的合併。

你可以在this後看到一個關於如何做到這一點的例子。

相關問題