2012-11-11 88 views
1

有道所以这是我:以“合并”这种情况

o experiments 
| 
o 
| 
o 
| 
o master 
| 
o 
| 
o (initial commit) 

正如你所看到的,我工作的“主”分支前三提交。然后,我创建了一个新的分支“实验”,朝不同的方向前进。

现在我面对这样的情况:

  1. 我已经决定,我目前的“实验”的路径是真的要走的路。
  2. 但是,仍然有很多文件和各种文件中的代码片断,来自我删除的旧“主”,但现在我想恢复。
  3. 事情发生了很大变化。例如,工作树的目录结构发生了很大变化。这可能意味着做一个常规的git合并不适合我。

我应该如何处理这种情况?一个想法是要问这个问题:

  • 我应该怎么签老“师傅”到另一个目录(当前工作树外),所以我可以做完全手动合并自己,?

如果你认为这最后一个问题是处理这种情况的适当的方式,请回答这个问题。随意建议其他方式。

+2

'master'分支有没有发展?如果没有,那么'git merge experiments'是'master'上的快速转发。 –

+1

你为什么认为git无法处理这个问题?我一直这样做。把所有东西都投入到实验中,结账主,将实验合并到主中。他说什么^ –

+0

@AndrewFinnell但是如果我改变文件夹结构,重命名文件,添加和删除文件等,不会搞砸了吗? git怎么可能知道我想要这样做的方式?只有一些我想要回来的文件。其他人我没有。而在另外一些人中,我只想要部分背部。嗯。 – NoobOverflow

回答

1

该图不隐藏任何细节。所以是的,我没有对主人做过任何独立的发展。

在这种情况下,合并是因为它可能可以去那么简单。 Git将进行快速合并。这意味着它基本上只会将master分支指针设置为与您的experiments分支相同的提交。没有其他事情发生。即使你对主人有所分歧,git也不会仅仅对两个分支的尖端进行简单比较,而是实际考察分支中发生的事情(通过找到共同的祖先)。这被称为三路合并。所以,它会大概找出你做了什么,你可能不会与极端的合并冲突。当然总会有一些例外情况,但在解决合并冲突时,您可能很容易将其弄清楚。

但同样,作为你的master没有分歧的一切,你可以很容易地准备experiments分支,你希望它看起来到底,然后快进master的方式。或者,如果您想让历史记录反映您实际上已经与主服务器分离(或至少计划为)的事实,则还可以使用git merge --no-ff experiments强制进行合并提交。