git - 当正在 merge 的分支已经 merge 并恢复时,如何强制 merge 提交?

标签 git

在我们的存储库中,我们遵循基于 git-flow 的工作流程。我们有一个已完成的发布(安装在生产环境中),因此发布分支已 merge 到主分支中。

    B---C---D---E [release/1]
   /             \
  A---------------F [master]

  E - head of the release branch
  F - merge of release/1 into master

生产中出现问题,所以将软件移回了之前的版本。我们的部署过程会保留备份,因此这是独立于源代码控制完成的。此时,master 分支与生产中的软件不匹配,因此我们还原了将发布 merge 到 master 的提交。这使 master 的负责人和部署在生产环境中的软件保持同步。

    B---C---D---E
   /             \
  A---------------F---G [master]

  G - revert of release, effectively bring master back to A

发现发行版不是问题所在,因此我们将该软件重新安装到生产环境中。为此,我们在与旧发布分支相同的提交上创建了一个新发布分支。

    B---C---D---E [release/2]
   /             \
  A---------------F---G [master]

但是,当我们关闭发布分支时,Git 并没有创建 merge 提交,因为发布分支的头部指向 master 历史记录中的一组提交(通过原始 merge )。

    B---C---D---E-------+
   /             \       \
  A---------------F---G---H

  H - merge of release/2 into master (this is what we want!!)

但是,由于还原,该版本中的实际更改现在丢失了。我如何强制 Git 第二次 merge 发布分支的头部?

最佳答案

如您所述,git 不执行 merge ,因为它看到那些提交已经在分支的历史记录中。还原是阻碍。

我以前打过这个。您需要做的是先还原还原。这将删除删除提交的提交。 :-)

git revert G

然后您可能想要重新 merge 只是为了拾取之后发生的任何事情。

关于git - 当正在 merge 的分支已经 merge 并恢复时,如何强制 merge 提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25727670/

相关文章:

ios - Xcode 在某些文件中找不到 Swift 桥接头文件

git - 在 Git 中查看权限更改

git - 安装 git 的替代源。 brew 安装 git; kernel.org 停机维护

git - git merge 后丢失文件

git - 从 IDEA 中的多个 Git 提交创建补丁?

git - 有没有办法判断某个时间点的代码在 Git 存储库中仍然存在多少?

git - 删除 Git 中单个文件的版本历史记录

git - 如何找到删除了某些代码的 Git 提交?

git - git archive 可以包含 .git 项目所在的目录吗?

git - 您如何仅存储已添加的文件?