Git 合并到与已删除分支同名的分支后缺少提交
将功能分支合并到与该功能分支所来自的现已删除的分支同名的分支后,我们缺少一些提交 更清楚一点,以下是事件的顺序:Git 合并到与已删除分支同名的分支后缺少提交,git,Git,将功能分支合并到与该功能分支所来自的现已删除的分支同名的分支后,我们缺少一些提交 更清楚一点,以下是事件的顺序: 我们有一个根回购和一个从根分支的生产支持 我从生产支持分支到创建功能分支 随着时间的推移,功能分支中的工作已经完成 有人删除了生产支持分支,并使用根目录下的相同名称重新创建了一个新分支 我把新的生产支持部门拉到了当地 然后,我将功能分支合并到生产支持中 完成合并后,我在生产支持中丢失了Feature Branch中存在的提交 编辑:合并后,我缺少产品支持中功能分支的一些但不是全部提交
- 旧Prod分支的hash=AAAA
- 新产品分支具有hash=BBBB!=AAAA
- 首先将该功能合并到Prod中,然后进行更改,将Prod分支替换为newProdBranch
reflog
命令。它将向您显示存储库中任何分支的任何提示的所有“最新”更新。Git通常会记住旧条目一段时间。即使他们被抛弃/删除/丢失,他们仍然可能坐在那里。简单运行
git reflog
在进行合并的本地工作目录上。它将向您显示一些提交,最重要的是,它们的散列。如果您不知道丢失提交的哈希值,现在您可以学习它们了 如果reflog没有它们,我不知道该怎么办。我记得我读到有另一种低级机制可以让你丢失散列,但我不记得那是什么,对不起 假设您现在拥有丢失提交的哈希: 请明确查看:
git checkout a76sa7..THE_HASH_HERE
即使提交是“丢失的”,如果只有git repo还没有被“删减/GC”掉,提交也会被抓取,当前提示会指向它。现在从它创建一个分支,只是为了标记它并防止被修剪/GCed,例如:
git branch temp_restoring_commit
新分支temp\u restoring\u commit
将标记提交,以便于参考。从现在起,你可以认为承诺是“恢复的和安全的”,除非你移除分支,否则它不会蒸发。(当然,reflog可能还能再次帮助您)
现在,您可以尝试:
- 将提交合并到其他地方(将更改复制/移植到另一个分支)
- 重新设置提交的基址(将丢失的提交连接到正确的分支)
- 将其推送到远程回购,以便其他人可以为您清理:)
- 等等
- 旧Prod分支的hash=AAAA
- 新产品分支具有hash=BBBB!=AAAA
- 首先将该功能合并到Prod中,然后进行更改,将Prod分支替换为newProdBranch
..- o - o - o - o - o - o <-- root
\
o - C - P <-- production_support
\
o - o <-- feature
..- o - o - o - o - o - o <-- root
\
o - C - P [no label - abandoned]
\
o - o <-- feature
o <-- production_support
/
..- o - o - o - o - o - o <-- root
\
o - C
\
o - o <-- feature
$ git checkout production_support && git merge feature
o - M <-- production_support
/ /
..- o - o - o - o - o - o <-------- root
\ |
o - C |
\ /
o - o <---- feature
$ git fsck
...
dangling commit de7c26f2b124f0038ab0ed03da9cb47647fc9867
...
$ git log de7c26f2b124f0038ab0ed03da9cb47647fc9867
$ id_for_c=... # find SHA-1 for commit C, put that in here
$ for id in $(cat /tmp/candidates); do
> [ $(git rev-parse ${id}^) = $id_for_c ] && echo "likely match: ${id}"
> done
..- * - * - B - * - * - * <-------- root
\ \
\ O <---- production_support
\
* - * - T <---- feature
$ git checkout production_support; git merge feature
..- * - * - B - * - * - * <-------- root
\ \
\ O - M <-- production_support
\ /
* - * - T <---- feature