分离头,删除推送合并等
Detached Heads, Delete Pushed Merge, Etc
我正在尝试修复一个失灵的 git 存储库。问题来了。
- 在没有分支的情况下创建了一个分离的 head,并认为它是 master
。
- 本应在不同分支上的更改是对真正的 master 进行的
- 分离的 head 被合并到 master
需要完成的事情:
- 删除合并。我试图对 master 上的先前提交进行硬重置,但它最终将分离的 head 的提交压缩到 master 分支中。
- 如果可能,使分离的头及其提交为主分支
- 在 head 分离一个单独的分支后,在 master 中进行所有提交
下图中,蓝色为master,红色为detached head。
这是第二张图片供参考。
只要没有其他人克隆过您的存储库,您应该能够做到这一点。
从当前主节点创建一个分支:
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>
现在在本地,你应该处于你想要的状态,但是本地主机与你的远程主机有不同的历史。您可能只是强制推送它以忽略远程主机
git push -f
但是,像 gitlab 和 github 这样的服务会默认阻止你这样做。
如果其他人拥有存储库的本地克隆,这会给他们带来问题,如果您能够与受影响的每个人进行交流,那么制作一个新的克隆将是最简单的解决方法。
我正在尝试修复一个失灵的 git 存储库。问题来了。
- 在没有分支的情况下创建了一个分离的 head,并认为它是 master 。
- 本应在不同分支上的更改是对真正的 master 进行的
- 分离的 head 被合并到 master
需要完成的事情:
- 删除合并。我试图对 master 上的先前提交进行硬重置,但它最终将分离的 head 的提交压缩到 master 分支中。
- 如果可能,使分离的头及其提交为主分支
- 在 head 分离一个单独的分支后,在 master 中进行所有提交
下图中,蓝色为master,红色为detached head。
这是第二张图片供参考。
只要没有其他人克隆过您的存储库,您应该能够做到这一点。
从当前主节点创建一个分支:
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>
现在在本地,你应该处于你想要的状态,但是本地主机与你的远程主机有不同的历史。您可能只是强制推送它以忽略远程主机
git push -f
但是,像 gitlab 和 github 这样的服务会默认阻止你这样做。
如果其他人拥有存储库的本地克隆,这会给他们带来问题,如果您能够与受影响的每个人进行交流,那么制作一个新的克隆将是最简单的解决方法。