2012-02-03 74 views
2

我在2分支git混亂。 Frontend包含了大量正在進行的開發工作 - 它應該被分割成多個分支,並且有點混亂。走出git中的2分支混亂

這裏的情況是 - frontend是在左邊的master頂部右側:

| frontend 1: newest commit (to be pushed) 
| frontend 2: recent commit (to be pushed) 
| frontend 3: week-old commit (this was a temporary save of lots of ongoing work - it probably should have been a stash. This one cannot be pushed) 
| 
| | master: this is the current state of the site 
| | master: previous commit 
|/
|/ 
| master before `git branch frontend` 

分支frontend,我想:

  • 轉移frontend 1frontend 2master,以便他們現在可以推送。
  • 「取消」 frontend 3和移動代碼回舉辦這樣我就可以使提交正確的(即不是在一般工作一個巨大的轉儲)

我在git的初學者,我很擔心我會如果我繼續輸入命令來改善它,那麼會造成更多的傷害(正如我已經完成的那樣)。如果您能夠提供幫助,我們將非常感謝。謝謝。

回答

2
  1. 做一個interactive rebase重新排列frontent的順序犯這樣frontend 3是最新的一個。
  2. 然後,在前端時,執行git reset HEAD^以在保持更改的同時「取消」前端3。
  3. git stash存儲從frontend 3
  4. 的更改
  5. 切換到主站。
  6. frontend合併爲master。 (或者是rebase,取決於你的選擇)
  7. 隨時隨地彈出儲存的更改並繼續工作。

這假定交互式衍合實際上可以乾淨地進行 - 即,在frontend 3的變化無關的在frontend 1frontend 2的那些。

+0

非常感謝您的回答!你能否評論這與「櫻桃挑選」/「rebase -i」答案有何不同? – sscirrus 2012-02-03 01:44:53

+0

@sscirrus一旦完成,效果將是相同的。我的方式是,你可以在你推動而不是之後,清楚地看到'前端'分支的歷史是否可以重新安排,避免用另一個替換一個混亂。 (雖然在你得到好的改變之後你會有時間清理。) – millimoose 2012-02-03 01:55:45

+0

@sscirrus(我有點不喜歡櫻桃採摘,因爲它創建了一個更改的副本,而不是將它們移動到樹上,這聽起來像在後來想要乾淨地合併分支時要求衝突。) – millimoose 2012-02-03 01:57:45

0

你可以cherry-pick這兩個提交你想要回到master。然後rebase -ifrontend將允許您重新排序和分裂分支上的提交,但是你喜歡。

0

最簡單的方法很可能是挑選frontend2frontend1成爲主人,然後還挑選frontend3並做一個軟重置。