【发布时间】:2015-02-01 16:07:06
【问题描述】:
我不明白发生了什么。我将分支 master 合并到我最近经常做的功能分支中,并且不知何故,合并提交现在存在于两个分支中,并且两个分支在该提交之后处于相同状态。我还没有找到任何关于这是如何发生的信息(或者它实际上可以完成)。我一直在 Windows 上使用 git-gui(但在其他机器上使用 git 命令行,所以我了解基本的 git 命令)。 git-gui 和 GitLab 在历史图表中都将这个提交显示为将两个分支相互合并。任何线索这是怎么发生的?我不想再发生什么,我应该摆脱 git-gui 吗?
然后,由于不幸的是这个提交被推送到远程,我仍然想做一个重置 --hard,因为如果我做一个还原,那么当我将来再次将 master 合并到 feature 时,我得到了一切在功能分支中作为冲突,因为它在主恢复中全部撤消。关于如何最好地进行的任何 cmet 或建议?
编辑:我以为我理解合并的含义,但从答案中我现在更加困惑。如果我创建了一个包含很多新内容的功能分支,并且我想“导入”一些在 master 中进行的更改,但保持 master 不变,这不是这样做的吗?
git checkout feature
git merge master
master A ------------ E <-- last master commit
\ \ (try to merge into feature)
feature B -- C -- D -- F <-- feature now contains "E" edits?
但我得到的是:
master A ------------ E F <-- master now contains all of feature stuff (B, C, D).
\ \ |
feature B -- C -- D --- F <-- feature now contains "E" edits.
Edit2:如果根据 jszakmeister 的回答,这是因为执行了 2 个合并操作,其中一个是快进操作,是否有任何方法可以恢复有关该快进合并的信息,比如是谁在什么时候做的?如果提交信息说“merge master into feature”,我猜这意味着它是先朝那个方向完成的,然后有人快进将 feature 合并到 master 中,对吧?
谢谢!
【问题讨论】:
-
我的理解是,您只需要将
master重置为合并提交之前的提交(通常将master和feature之前的提交作为父提交)。git reset --hard提交到那个提交(可能是HEAD~1,现在不太确定)同时在主分支上应该这样做。 -
这并不是特别不寻常,也没有什么可担心的。您可以通过明确告诉合并您不想进行快进合并来避免它。
-
那么要强制推送,您需要拥有 repo 的权限。
-
@njzk2 谢谢,这就是我想“解决”这个问题的原因。