我有一个git仓库,有2个分支:master和test。

主分支和测试分支之间存在差异。

两个分支都提交了所有更改。

如果我这样做:

git checkout master
git diff test

屏幕上会出现一个充满变化的屏幕,显示不同之处。我想合并测试分支中的更改,这样做:

git merge test

但是得到的信息是"Already - updated "

但是,检查每个不同分支下的文件可以清楚地显示出差异。

这里的问题是什么,我如何解决它?


当前回答

这种情况发生在我身上,因为GIT奇怪地认为本地分支与远程分支不同。 这在分支图中可见:它显示了两个不同的分支:remotes/origin/branch_name和branch_name。

解决方案是简单地删除本地回购并从远程重新克隆它。这样GIT就会理解remotes/origin/branch_name>和branch_name确实是相同的,并且我可以发出GIT合并branch_name。

rm <my_repo>
git clone <my_repo>
cd <my_repo>
git checkout <branch_name>
git pull
git checkout master
git merge <branch_name>

其他回答

假设你有一个具有以下提交历史的分支master:

A -- B -- C -- D

现在,你创建了一个分支测试,处理它,并执行4次提交:


                 E -- F -- G -- H
                /
A -- B -- C -- D

主人的头指向D,测试者的头指向H。

当你要合并的分支的HEAD是你想要合并的分支的提交链的父节点时,就会显示“Already - updated”消息。 这里的情况就是这样:D是E的父结点。

从测试到主服务器没有什么需要合并的,因为从那时起主服务器上没有任何变化。 你在这里要做的就是告诉Git让master的head指向H,所以master的分支有如下的提交历史:

A -- B -- C -- D -- E -- F -- G -- H

这是一个Git命令重置的作业。 你也想让工作目录反映这个变化,所以你要做一个硬重置:

git reset --hard H

这很傻,但可能会发生。假设你的分支名称前缀是一个问题引用(例如#91-fix-html-markup),如果你这样合并:

$ git merge #91-fix-html-markup

它不会像预期的那样工作,因为#之后的所有内容都被忽略,因为#开始一个内联注释。

在这种情况下,你可以重命名分支,省略#或使用单引号环绕分支名称:git merge '#91-fix-html-markup'。

我也有同样的问题。我在遥控器上做了修改,它仍然显示“已经更新”。重新克隆存储库为我解决了这个问题。

这对我来说很有效。假设你有一个branch1,你想把它合并到branch2。

你打开git命令行,进入branch2的根文件夹,输入:

git checkout branch1
git pull branch1
git checkout branch2
git merge branch1
git push

如果你有冲突,在git推送之前解决它们。

使用Git Bash面对这个场景。

我们的存储库有多个分支,每个分支都有不同的提交周期,合并偶尔会发生一次。 Old_Branch被用作New_Branch的父类

Old_Branch更新了一些更改,需要与New_Branch合并

正在使用下面的拉命令,没有任何分支,从所有分支获得所有来源。

Git拉源

奇怪的是,这并没有从所有分支中拉出所有的提交。曾经认为它正如所示显示几乎所有的分支和标签。

所以要解决这个问题,已经检查出Old_Branch拉了最新的使用

git checkout Old_Branch git拉原点Old_Branch

现在查看New_Branch

git checkout New_Branch

拉了一下,确认一下

git拉原点New_Branch git合并Old_Branch

viola得到了从Old_Branch到New_Branch的冲突来修复:),这是预期的