Git卡在主分支 | 合并

8
有两个远程分支,`origin` 用于拉取更改,而 `harmeet` 则是生产环境。
我尝试了 `git reset --hard` 命令,但只要我拉取最新更改后,状态就会恢复到 `master | MERGING`,然后我就无法将最新的代码推送到 `harmeet`,因为 Git 会告诉我一切都是最新的。我不确定出了什么问题。
请参考以下图片: Git Status

5
git merge --abort(https://git-scm.com/docs/git-merge#_description) - Holger Just
那样可以消除合并,但是我如何将最新的代码推送到它上面而不从源头拉取呢?一旦我拉取,合并就会再次出现。 - AspiringCanadian
2
它返回是因为您有冲突(您更改了与远程正在拉取的相同文件),您需要解决这些冲突。 - Paul
谢谢,是的,那就是情况。 - AspiringCanadian
可能还需要提交更改。请查看 git status。(显然,这不是你的情况) - Christoph
我在本地主分支上有相同的文本(master|MERGING)。我试图合并两个不同的分支(_both_包含仅属于该分支的提交)。我在测试存储库中进行了此操作,以查看如果合并它们会发生什么。当我尝试时,出现了一种奇怪的 vim-外观提示,要求我输入有关合并的其他信息,但它不允许我输入。我关闭了 bash 窗口,试图中止,但重新打开后,(master|MERGING)标记被显示。就像它卡在合并中一样... - Nate T
2个回答

12

@Holger的评论所述,您可以执行git merge --abort以中止合并。 但是,您可能不想这样做。 合并发生是因为远程(origin)有您本地没有的更改。 您的历史记录可能如下所示:

*--*--A--B--C [master, harmeet/master]
       \
        D--E [origin/master]

(请注意,master == harmeet/master。我一会儿会讲到这个。)

有三种解决方案:合并(Merge)、变基(Rebase)或强制更新(Force Update)。

合并(Merge)

最简单的解决方法是完成合并。要做到这一点,请在编辑器中解决任何冲突,使用git add .进行暂存,然后使用git commit进行提交。然后您的历史记录将如下所示:

*--*--A--B---C [harmeet/master]
       \      \
        \      F [master]
         \    /
          D--E [origin/master]

然后你可以使用git push origin master来更新origin,使用git push harmeet master来更新harmeet

变基

如果你想保持线性历史记录,请中止合并,然后执行:

git pull --rebase

如果有任何冲突,请解决它们并继续执行git rebase --continue

你的历史记录将会如下:

*--*--A--B--C [harmeet/master]
       \
        D--E [origin/master]
            \
             B'--C' [master]

您可以使用以下方式更新origin

git push origin master

使用以下命令强制更新harmeet

git push --force-with-lease harmeet master

你的最终历史记录将会是:

*--*--A--D--E--B'--C' [master, origin/master, harmeet/master]

强制更新

如果真的不想要来自origin的更改,可以执行以下操作:

git push --force-with-lease origin master

你的历史记录将会像这样:

*--*--A--B--C [master, harmeet/master, origin/master]

如果 Git 告诉你 harmeet/master 是最新的,则它与你本地的 master 在同一个提交上,除非自你上次抓取以来,有人已经推送到了 harmeet/master
如果你的目标是获取从 origin(提交 DE)到 harmeet 的更改,则需要像上面描述的那样进行变基或合并,然后推送。

2
我不得不使用-f push,因为我们的流程设置方式是,在对'harmeet'进行更改后,不允许向'origin'提交。所以我执行了git add .,然后强制推送到'harmeet',接着执行了git pull origin master,最后将最新的代码推送到'harmeet'。非常好的答案,为我解决了一些额外的问题。 - AspiringCanadian

3

我在我的同事的电脑上发现了一个问题:master | MERGING 状态的出现是因为开发人员在合并提交时没有输入描述信息。

此时,您只需要发送一个提交并按以下方式描述:

git commit -m 'merge commit'

其他答案主要集中在回滚上,但是如果你需要前进,你可以使用这个解决方案。


我使用Webstorm IDE,已经不习惯使用git终端了ueheuheueuh。就这样,谢谢! - Code Drop

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接