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

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

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

如果我这样做:

git checkout master
git diff test

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

git merge test

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

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

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


当前回答

我有一种重新合并它的方法,我的场景是我需要合并一个发布分支。

条件:发布分支代码是金的。意思是master是不正确的而release分支是正确的。

现象:将发布版本合并到主版本时,主版本中不正确的部件没有与发布版本中的部件一起更新。

以下是步骤,免责声明:我对git的了解有限,一定有更好的方法来实现它。

checkout release branch, do a pull. [Commit #A] merge latest master to release [Commit #B] (incorrect file will write to release branch) do a reverse commit of the [Commit #B] BUT keep it in stage (if the reserve commit is committed as [Commit #C] then do a soft reset to Commit #B) (this essentially reverse the incorrect files) edit the files, check whether these are correct, discard the unwanted ones (if there is any) stash the changes in step 4 [Stash{X}] reset release back to Commit #A (same as remote) merge latest master to release again [Commit #D] (diff hash should be the same but commit hash is different than b) Apply stash {x} Commit and merge to master.

编辑:第9步可以发生在本地,只是看看预期的部分是否已应用,如果你碰巧不得不使用一个公关在远程。

其他回答

确保先签出想要合并的分支,然后拉出它(这样您的本地版本与远程版本匹配)。

然后签出到你想要合并的分支,你的git合并应该可以工作。

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

$ git merge #91-fix-html-markup

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

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

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

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

你可以在这里使用它!

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

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

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

合并总是在当前HEAD和一个或多个提交之间(通常是分支头或标签), 索引文件必须匹配HEAD提交的树(即上次提交的内容)。 换句话说,git diff——cached HEAD必须报告没有变化。 合并后的提交已经包含在HEAD中。这是最简单的情况,称为“Already - updated”。

这应该意味着测试中的提交已经合并到master中,但由于其他提交是在master上完成的,git diff test仍然会给出一些差异。