我有一个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 "
但是,检查每个不同分支下的文件可以清楚地显示出差异。
这里的问题是什么,我如何解决它?
当前回答
如果将分支A合并到分支B报告“Already up to date”,则反过来并不总是正确的。只有当分支B是分支A的后代时才成立,否则 分支B可以有A中没有的变更。
例子:
在master上创建分支A和B 您在master中做了一些更改,并只将这些更改合并到分支B中(不更新或忘记更新分支A)。 你在分支A中做了一些改变,并将A合并到B。
在这一点上,合并A到B报告“已经更新”,但分支是不同的,因为分支B有来自主的更新,而分支A没有。
其他回答
这种情况发生在我身上,因为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>
如果将分支A合并到分支B报告“Already up to date”,则反过来并不总是正确的。只有当分支B是分支A的后代时才成立,否则 分支B可以有A中没有的变更。
例子:
在master上创建分支A和B 您在master中做了一些更改,并只将这些更改合并到分支B中(不更新或忘记更新分支A)。 你在分支A中做了一些改变,并将A合并到B。
在这一点上,合并A到B报告“已经更新”,但分支是不同的,因为分支B有来自主的更新,而分支A没有。
下面是从另一个分支获得更改的方法,而不考虑合并历史(注意:这会清除工作树,所以git在尝试之前会隐藏或提交更改)
// stash changes to ensure you don't lose any edits
git checkout your-branch-that-won't-simply-merge
git stash
git checkout branch-with-changes -- .
——。参数将检出其他分支的所有文件,同时仍检出到同一分支。然后您可以按照自己的意愿添加和提交。
我还将它与 Git add -p 这将使你能够在“大块头”中进行任何变化。它会询问y/n您是否想要执行任何更改过的行块,这意味着您可以在下次提交时保留不想要的更改。
这是我找到的原始答案的链接,去点赞吧。: https://stackoverflow.com/a/15536640/8272035
89年问题 通过提供当前路径,.:
Git签出other-branch-name——。
此操作类似于在不签出文件的情况下将HEAD切换到另一个分支,但只是从“另一个方向”切换。
正如@김민준提到的,这将覆盖任何未提交的更改。如果需要的话,记得先把它们藏起来或提交到某个地方。
我也有同样的问题。我在遥控器上做了修改,它仍然显示“已经更新”。重新克隆存储库为我解决了这个问题。
这很傻,但可能会发生。假设你的分支名称前缀是一个问题引用(例如#91-fix-html-markup),如果你这样合并:
$ git merge #91-fix-html-markup
它不会像预期的那样工作,因为#之后的所有内容都被忽略,因为#开始一个内联注释。
在这种情况下,你可以重命名分支,省略#或使用单引号环绕分支名称:git merge '#91-fix-html-markup'。