Git合并分支

时间:2015-09-04 03:16:06

标签: git merge

我想在我的项目中合并几个分支,但我不知道如何让Git合并。我正在Linux Fedora 22上做我的工作。

我的项目中有以下Git结构,其中CAPITAL字母是分支,小写字母是提交:

                    ATTINY
                     /
>- MASTER - a - b - c

然后,我查看以前标记的版本,做了一些编辑并执行了一些提交:

>- TAG1.0 - e - f

这意味着:我在master工作,然后我创建了分支ATTINY以便保管,然后检查了一个较旧的(已标记的)分支,在那里做了一些工作。

沿途的某个地方(马上?)我得到了一个独立的HEAD。糟糕。

所以我让这些提交成为一个分支,并检查出来。然后我完成了我的工作,标记了它,并在那一点做了一个名为TAG2.0的分支,然后我更新了master指向它:

                    ATTINY
                     /
>- MASTER - a - b - c

>- TAG1.0 - e - f - OOPS (master) - g - h (...tag:2.0) - TAG2.0 (master)

现在我想将我为分支TAG2.0所做的工作与我在分支机构ATTINY留下的工作合并。我该怎么做?

我尝试将我的TAG2.0(主)分支与分支ATTINY合并,但我得到了#34;已经是最新的"。

我根据Git merge reports "Already up-to-date" though there is a difference做了一个git reset --hard ATTINY,但现在看起来我只有ATTINY分支的东西。我没有在TAG2.0分支中做出任何更改。

尽管TAG2.0和ATTINY分支之间存在差异,但git merge似乎没有任何作用。

帮助我欧比旺。你是我唯一的希望。

3 个答案:

答案 0 :(得分:2)

看起来您通过发布

设法丢失了一些提交
git reset --hard ATTINY

重置将当前分支移动到其他某个提交(在您的情况下为ATTINY)。如果没有其他分支指向您当前的提交,您将松开它。例如:

a -> b -> c -> d (master)
     |
     \ -> x -> y -> x (ATTINY)

$ git checkout master
$ git reset --hard ATTINY

结果

a -> b -> c -> d 
     |
     \ -> x -> y -> x (master, ATTINY)

所以你在d提交时没有引用它会消失

a -> b -> x -> y ->x (master, ATTINY)

但是在垃圾收集器物理删除之前,您可以通过创建指向该提交的新分支来恢复它

$ git reflog
641f62e HEAD@{0}: ...
641f62e HEAD@{1}: ...
6fb53aa HEAD@{2}: ...
3aed47e HEAD@{3}: ...

Reflog显示过去操作中涉及的参考。 选择一个或多个潜在候选者(从列表顶部)并创建分支:

git branch test1 641f62e 
git branch test2 6fb53aa 

然后检查情况,看看,如果你丢失了提交的回复

gitk --all

现在,您可以使用git reset --hard(小心)放回主分支。 我希望,你能用这一切恢复所有你的承诺。

现在回到你的问题:正如科林·德里斯科尔所说,这应该是

的问题
git checkout master
git merge ATTINY

您可能会获得“快进”合并(不会创建合并提交)。大部分时间都可以。但是,如果您真的想要创建合并提交,那么请执行

git checkout master
git merge ATTINY --no-ff

答案 1 :(得分:0)

应该是一个简单的问题:

git checkout master
git merge ATTINY

如果这不起作用,我建议您查看SourceTree。您的回购结构可能有点糟糕。

答案 2 :(得分:0)

似乎git merge没有帮助。由于我大多只更改了一个文件,因此我检查了我要合并的旧ATTINY分支,将文件复制到/ tmp,然后检出master,然后编辑该文件以合并旧分支的更改。

我不知道为什么我无法合并:-(。