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

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

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

如果我这样做:

git checkout master
git diff test

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

git merge test

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

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

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


当前回答

“已经是最新的”消息意味着您试图合并的分支的所有更改都已经合并到您当前所在的分支。更具体地说,它意味着您试图合并的分支是当前分支的父分支。恭喜你,这是你做过的最简单的合并。:)

使用gitk查看您的存储库。“test”分支的标签应该在“master”分支标签的下方。

您的分支相对于其父分支是最新的。根据合并,自上次合并以来父节点中没有新的变化。这并不意味着分支是相同的,因为您可以在工作分支中进行大量更改,而且听起来确实如此。

编辑10/12/2019:

根据Charles Drake对这个答案的评论,解决这个问题的一个解决方案是:

git checkout master
git reset --hard test

这又回到了“测试”层面。

然后做:

git push --force origin master

为了迫使中央回购的变化。

其他回答

“已经是最新的”消息意味着您试图合并的分支的所有更改都已经合并到您当前所在的分支。更具体地说,它意味着您试图合并的分支是当前分支的父分支。恭喜你,这是你做过的最简单的合并。:)

使用gitk查看您的存储库。“test”分支的标签应该在“master”分支标签的下方。

您的分支相对于其父分支是最新的。根据合并,自上次合并以来父节点中没有新的变化。这并不意味着分支是相同的,因为您可以在工作分支中进行大量更改,而且听起来确实如此。

编辑10/12/2019:

根据Charles Drake对这个答案的评论,解决这个问题的一个解决方案是:

git checkout master
git reset --hard test

这又回到了“测试”层面。

然后做:

git push --force origin master

为了迫使中央回购的变化。

我在当前分支中提交了更改,然后来自Origin分支的合并工作正常。

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

下面是从另一个分支获得更改的方法,而不考虑合并历史(注意:这会清除工作树,所以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切换到另一个分支,但只是从“另一个方向”切换。

正如@김민준提到的,这将覆盖任何未提交的更改。如果需要的话,记得先把它们藏起来或提交到某个地方。

嗨,我已经创建了一个git别名,我称之为git remerge,这有助于解决问题。

它首先将git merge <FEATURE-BRANCH-NAME>。 然后将强制重新计算分支之间不同文件的所有冲突。

你可以在这里使用它!

如果你有任何建议,或者你想为这个项目做出贡献,欢迎你!