如何将 git 中的分支标记为未解决?

How to mark your branch unresolved in git?

背景

在我正在处理的存储库中,

有一个主要分支 master 和一个受保护的开发分支 stage

我们开发人员将我们所有的 MR 发送给 stage,然后管理员在适当的时候用 stage 更新 master

我做了什么

所以我在我的分支上,我们称它为 changesA。从2天开始,我一直在研究它,期间合并了一些分支后更新了stage分支。

今天,在用我的更改更新我的远程分支后,我从 stage 中获取了一个 pull -

git pull origin stage

有一些合并冲突,比方说在 10 个文件中。我解决了它们并推动了变化。所以现在我的远程分支更新了阶段。在我的提交历史中创建了一个新的合并提交,其中包含 152 个更改的文件(1587 个添加和 4543 个删除)。

我意识到我在解决这些冲突时犯了一些错误。所以我恢复了我的合并提交 using this method。我的提交历史记录中添加了一个新的还原提交,其中包含 152 个更改的文件(4543 个添加和 1587 个删除)。

我在我的分支上做了更多工作,并用这些更改更新了我的远程分支。

有什么问题

在这一点上,我预计我的分支会落后于我的拉动。而且我希望在恢复合并提交时我基本上没有解决的那 10 个文件中存在冲突。

但是当我 运行 相同的命令 git pull origin stage 时,它说我的分支已经是最新的阶段。我相信出于某种原因,我的分支已被标记为已解决并已更新阶段。

这里出了什么问题,我该如何解决同样的 10 个冲突?

我试过的方法(没用)

  1. 我尝试检查并更新我的本地舞台。
  2. git fetch 在我的分支上。
  3. 我通过 git checkout -b changesACopy 创建了我的分支的副本并尝试了 git pull origin stage。得到了同样的信息。
  4. 我删除了我所有的本地分支,检查了阶段并拉了一把。然后检查了我的分支并拉了一把。
  5. 我从阶段签出一个分支并对一个文件进行了更改,与我的分支产生合并冲突。将该分支合并到阶段。我希望有 11 个文件与我的分支有合并冲突,但只有一个。

有效方法

没有捷径可走。以下是我为解决此问题所采取的步骤 -

  1. git reset --hard HEAD~4 到我在退出阶段之前推送更改的地步。
  2. 再次
  3. git pull origin stage。这次我再次解决了这 10 个冲突。 (这次我做对了!)
  4. git cherry-pick <commit-hash> 我在还原后推送的最新更改。
  5. git push origin changesA --force。需要强制是因为我回到了历史,所以我的本地分支机构在我的遥控器后面并且 git 会在拉取之前拒绝任何推送。我独自在我的分支上工作,所以我知道如果我强制推送我不会覆盖任何更改。

完成!

感谢大家的帮助。我知道这个操作过程,但我想知道为什么 revert 没有像我预期的那样工作。接受的答案涵盖了这一点。

But when I run the same command git pull origin stage, it says that my branch is already up to date with stage.

确定:stage 之前已经合并到 branchA。
Ant 更改(还原提交、修复、...)在一个分支 A 之后完成,最后一次合并不会受到从阶段到分支 A 的新合并的影响。

  --s--s (stage)
        \  <= merge already done 
 --a--a--M--[revert]--[fixes]

如果你一个人在 branchA 上工作,最好的做法是 rebase branchA 在你想要集成 stage 的时候放在 stage 的顶部,强制推送 branchA,然后再做一个从 branchA 合并到 stage(简单的快进合并)

在您的情况下,将 branchA 重置为合并之前的状态会更容易,变基并解决相同的冲突,然后强制推送。