我们在我的公司使用Git和Stash,看起来有人删除了所有分支但是掌握了。
有人可以告诉我如何追踪哪些用户这样做了吗?另外,如何恢复数据(如果可以恢复)?
答案 0 :(得分:1)
this question about how to do this for one branch中的git fsck
方法在这里可能还不够,因为对于多个已删除的分支,可能存在一些问题,哪些提交与哪些分支有关。但如果事实证明回答很容易,那么这样做可能是最快的:
git fsck --no-reflogs \
| awk '$2 == "commit" {print $3}' \
| xargs git show -s
如果Stash产品没有保留足够的日志,那么如果它实际上使用git或者实际上使用git的reflogs的东西,你可以使用它们至少恢复删除的refs。
git删除明确删除的分支的reflog,包括推送的显式删除;那些现在已经从您受损的仓库和明确推迟删除的任何人的回购中消失了。
但遥控器从你的回购中做了简单的提取并不能解释为删除他们的分支跟踪你的引用的请求 - 没有明确的删除请求的提取并不是一个明确的删除请求的请求没有显式删除请求的推送是。为此,必须明确询问fetch(使用--prune
)来修剪不再位于远程的分支。
所以没有进行任何明确清理的回购非常肯定仍然会为缺失的分支设置远程跟踪分支,您可以查看其日志中的最新事务。最简单的自动化方法是
git for-each-ref refs/remotes/$remote --format='git reflog -1 %(refname)' \
# | sh -x
自初始提取以来,该输出中没有重新登录的分支机构尚未更改。
现在你可以回到你损坏的仓库了,如果有任何问题,那么其他仓库的哪些提交记住最新的分支,请
git log --graph --decorate --oneline $each $candidate $commit
帮助您找到它。
git branch $branch $therightcommit
恢复它。
也许有人会知道使用Stash(或git)更简单的方法,如果没有,这可能值得一试。
答案 1 :(得分:0)
要恢复:使用git reflog
查找SHA1,然后使用git checkout <sha>
。
要追踪:使用git log
查看所有提交日志 - http://git-scm.com/docs/git-log