我怎样才能找到一个在git中删除了我所有分支的用户

我怎样才能找到一个在git中删除了我所有分支的用户,git,git-log,bitbucket-server,Git,Git Log,Bitbucket Server,我们在我的公司使用Git和Stash,看起来有人删除了除master之外的所有分支 有人能告诉我如何追踪哪些用户做了这件事吗?另外,如何恢复数据(如果可以恢复)?恢复:使用git reflog查找SHA1,然后使用git checkout 跟踪:使用git log查看所有通信日志-中的git fsck方法在这里可能不够,因为对于多个已删除的分支,可能存在一些问题,即哪些提交与哪些分支一起进行。但如果答案很简单,那么这样做可能是最快的: git fsck --no-reflogs \ | awk

我们在我的公司使用Git和Stash,看起来有人删除了除master之外的所有分支


有人能告诉我如何追踪哪些用户做了这件事吗?另外,如何恢复数据(如果可以恢复)?

恢复:使用
git reflog
查找SHA1,然后使用
git checkout


跟踪:使用
git log
查看所有通信日志-

中的
git fsck
方法在这里可能不够,因为对于多个已删除的分支,可能存在一些问题,即哪些提交与哪些分支一起进行。但如果答案很简单,那么这样做可能是最快的:

git fsck --no-reflogs \
| awk '$2 == "commit" {print $3}' \
| xargs git show -s

如果隐藏产品没有保存足够的日志,那么如果它确实使用git或在引擎盖下实现git的reflogs的东西,那么您至少可以使用这些来恢复删除的refs

git移除显式删除的分支的重登录,包括推式显式删除;现在,你的受损回购协议和明确推动删除的人的回购协议中已经没有了这些内容

但是从您的repo执行普通抓取的远程操作不会将其解释为删除跟踪您的ref的分支的请求——没有明确的删除请求的抓取不是明确的删除请求,就像没有明确的删除请求的推送一样。为此,必须显式地请求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)做这件事的更简单的方法,如果没有,这可能值得一试