2012-02-03 71 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并做一个软重置。