【问题标题】:Detached Heads, Delete Pushed Merge, Etc分离头,删除推送合并等
【发布时间】:2019-03-15 21:10:36
【问题描述】:

我正在尝试修复一个不正常的 git 存储库。这就是问题所在。

  • 在没有分支的情况下创建了一个分离的头,并对其进行了提交,认为它是主节点
  • 本应在不同分支上进行的更改已更改为真正的 master
  • 分离的头部被合并到master中

需要完成的事情:

  1. 删除合并。我试图对 master 上的先前提交进行硬重置,但它最终将分离头的提交压缩到 master 分支中。
  2. 如果可能,将分离的头部及其提交的主分支设为主分支
  3. 将头部分离到单独的分支后,在 master 中进行所有提交

在下图中,蓝色是主人,红色是分离的头。

这是第二张图片供参考。

【问题讨论】:

  • “硬还原”是指git reset --hard吗?
  • 是的。在合并之前,我去了主提交,然后运行了 git reset --hard。我的想法是我可以推动它,移除合并,但这会导致各种疯狂。

标签: git github git-merge git-revert


【解决方案1】:

只要没有其他人克隆您的存储库,您就应该能够做到这一点。

从当前的master创建一个分支:

git branch <branch name> <commit hash for last commit on master before the merge>

使 master 成为分离的头分支

git checkout master
git reset --hard <commit hash of last detached head commit before merge>

现在在本地,您应该处于您想要的状态,但是本地 master 与您的远程 master 具有不同的历史记录。您可能只是强制推送它以忽略远程主机

git push -f

但是,像 gitlab 和 github 这样的服务会默认阻止你这样做。

如果其他人拥有存储库的本地克隆,这将给他们带来问题,如果您能够与受影响的每个人进行交流,那么制作新的克隆将是最简单的解决方法。

【讨论】:

  • 更好:git push -f origin master newbranch,这样你就不用依赖push.default了。
猜你喜欢
  • 2015-05-13
  • 2022-11-16
  • 1970-01-01
  • 2021-04-20
  • 2019-04-24
  • 2015-08-06
  • 2021-10-15
  • 2016-06-14
  • 1970-01-01
相关资源
最近更新 更多