我有一个git仓库,有2个分支:master和test。
主分支和测试分支之间存在差异。
两个分支都提交了所有更改。
如果我这样做:
git checkout master
git diff test
屏幕上会出现一个充满变化的屏幕,显示不同之处。我想合并测试分支中的更改,这样做:
git merge test
但是得到的信息是"Already - updated "
但是,检查每个不同分支下的文件可以清楚地显示出差异。
这里的问题是什么,我如何解决它?
我有一个git仓库,有2个分支:master和test。
主分支和测试分支之间存在差异。
两个分支都提交了所有更改。
如果我这样做:
git checkout master
git diff test
屏幕上会出现一个充满变化的屏幕,显示不同之处。我想合并测试分支中的更改,这样做:
git merge test
但是得到的信息是"Already - updated "
但是,检查每个不同分支下的文件可以清楚地显示出差异。
这里的问题是什么,我如何解决它?
当前回答
合并总是在当前HEAD和一个或多个提交之间(通常是分支头或标签), 索引文件必须匹配HEAD提交的树(即上次提交的内容)。 换句话说,git diff——cached HEAD必须报告没有变化。 合并后的提交已经包含在HEAD中。这是最简单的情况,称为“Already - updated”。
这应该意味着测试中的提交已经合并到master中,但由于其他提交是在master上完成的,git diff test仍然会给出一些差异。
其他回答
这对我来说很有效。假设你有一个branch1,你想把它合并到branch2。
你打开git命令行,进入branch2的根文件夹,输入:
git checkout branch1
git pull branch1
git checkout branch2
git merge branch1
git push
如果你有冲突,在git推送之前解决它们。
我在当前分支中提交了更改,然后来自Origin分支的合并工作正常。
发生在我身上并被发送到这个页面,不确定我是否有相同的场景,但我的是我试图“重新合并”“测试”分支。
所以我之前合并了它,但我故意在合并过程中排除了一些特定的更改,所以它在分支之间显然有一些差异。然后,我试图重新合并它,因为我意识到/忘记我应该添加一个特定的更改/文件,我之前已经排除了,我希望如果我再次进行合并,将显示我之前排除的所有更改,但我错了,我得到了“已经更新”的消息。
在阅读@Bombe的评论/回答后,他是对的,我认为git是这样做的,所以我所做的是在测试分支上对文件进行硬备份,然后签出主分支,手动将文件粘贴到其中,并提交它,就像它是新的更改一样。
我不确定这是否是正确的方法,或者是否可以帮助其他有同样问题的人,但它确实为我的特殊情况提供了解决方案。
当我知道远程主机上有更改时,这种情况经常发生在我身上,所以我尝试使用git merge master合并它们。但是,这不会与远程主服务器合并,而是与本地主服务器合并。
在合并之前,签出master,然后git拉到这里。然后您将能够将新的更改合并到您的分支中。
这可能看起来微不足道,但我见过许多人忽略它,只是在父分支上进行git合并。这将自动导致“已经更新”的消息。
合并命令应该是git merge branchNametoMergeFrom
例如,假设你有2个分支branchA和branchB,你需要将B合并为a,你需要首先签出到branchA,然后使用merge命令,同时指定要合并的分支(在这种情况下是branchB)。
因此,命令不应该只是git merge,而应该是git merge branchB。