我想在我的项目中合并几个分支,但我不知道如何让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
似乎没有任何作用。
帮助我欧比旺。你是我唯一的希望。
答案 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,然后编辑该文件以合并旧分支的更改。
我不知道为什么我无法合并:-(。