重置——在远程reflog中硬git远程分支到SHA,但不在本地repo中
有没有办法将远程分支指针重置为您知道在远程reflog中但在本地repo中没有的SHA 我非常熟悉重置(软/混合/硬)在本地回购上的工作方式,但这对我没有帮助 这是我正在努力解决的情况。我已经有一段时间没有抓取了,远程主机已经用本地还没有的合并进行了更新 我搞砸了,做了一个重置——在远程reflog中硬git远程分支到SHA,但不在本地repo中,git,github,branch,reset,Git,Github,Branch,Reset,有没有办法将远程分支指针重置为您知道在远程reflog中但在本地repo中没有的SHA 我非常熟悉重置(软/混合/硬)在本地回购上的工作方式,但这对我没有帮助 这是我正在努力解决的情况。我已经有一段时间没有抓取了,远程主机已经用本地还没有的合并进行了更新 我搞砸了,做了一个git-push--force,意思是只更新远程功能分支,但忘记了一个参数,结果强制功能分支和master进行本地的修订 这意味着master现在缺少自上次获取以来发生的合并提交。我们正在使用github,所以我收到一封电子邮
git-push--force
,意思是只更新远程功能分支,但忘记了一个参数,结果强制功能分支和master进行本地的修订
这意味着master现在缺少自上次获取以来发生的合并提交。我们正在使用github,所以我收到一封电子邮件,告诉我master之前所在的SHA。我还可以转到url,看到提交仍然存在(还没有垃圾收集)
我可以通过重做我丢失的合并并再次推出它来“修复”它(这最终改变了SHA,因为它是一个不同的提交者和时间)。这不是最优的,如果我在主服务器上丢失了多个合并提交,情况可能会更糟
我本想做的只是重置--hard
远程主分支到它应该位于的SHA。在没有SSH访问repo的情况下,有没有办法做到这一点
这是在github上的,因此我无法直接访问repo,因此无法通过ssh直接重置它。我认为您无法直接访问/重置github上的任何内容,而无需询问他们。Ie不允许他们查看您的GitHub回购的reflog。
通过创建新分支或将其重置为现有分支,他们将能够使丢失的SHA1可见 实际上,回购所有者可以查询GitHub事件API
见“”
确认、提及(和)作为理由: 这是故意的。
也就是说,当您意外地推送机密数据时,您可以倒回引用 在服务器上。
即使这些对象仍然存在于服务器上(直到它们被垃圾收集),也没有人能够获取您的秘密内容,即使它们碰巧知道SHA1 在他的评论中确认如下: 我做了更多的测试,发现克隆行为因使用的协议而异
- 通过SSH(可能是通过git协议)进行克隆的行为如您所述;i、 e.不可访问的提交不会传输到克隆。
现在我也用HTTPS(使用GitHub本身)对其进行了测试。而且看起来不太好;克隆不会获取无法访问的对象 - 但是,在本地克隆时,所有提交(无论是否无法访问)都会被传输
.git/objects/
目录下的文件是硬链接的,以尽可能节省空间。git克隆--无硬链接file:///Users/yourUser/your/full/repo/path repo clone name
不会传输无法访问的提交)您是否尝试过将GitHub repo克隆到新的本地存储库?我相信克隆可能包含“丢失”的对象。然后,您将在新克隆的repo中拥有“丢失”的对象。您可以在本地执行重置,然后将固定引用推回GitHub。您是否尝试过git push--force origin:master?
这应该将源代码上的master设置为指向您提供的任何SHA,不需要任何问题。您确定本地文件上没有提交哈希吗?你试过检查吗?是的,我确定。我试着检查了它,也检查了reflog,只是做了一个
git日志
,我没有。Github允许您通过点击按钮在服务器上进行合并(其他人也确实点击了按钮),但是如果在Github上完成合并后没有人执行git fetch
,那么Github的reflog是唯一一个在您做了像我这样愚蠢的事情时提交的。谢谢Dan,不幸的是,这不起作用。您无法获取任何不是由分支或标记指向的提交(或其祖先)指向的内容。我的理解是,这是git的一个“安全特性”,因此,如果您意外地提交了一些敏感的内容(如密码),您可以将其从历史记录中删除,而某些人即使找到了SHA也无法检索到它。我希望github有一个解决方案,它不涉及联系人类,但听起来好像没有。@Ted:在我做的一个快速测试中,克隆存储库检索到了任何分支或引用都无法访问的对象。我不相信在封面下获取和克隆是完全相同的操作。你试过了吗?@Ted:我做了更多的测试,发现克隆行为因使用的协议而异。通过SSH(可能是通过git协议)进行克隆的行为如您所述;i、 e.不可访问的提交不会传输到克隆。但是,在本地克隆时,所有提交(无论是否无法访问)都会被传输。我不确定是否通过HTTP进行克隆,因为我不能很容易地测试它。@TedNaleid:现在我也用HTTPS(使用GitHub本身)进行了测试。而且看起来不太好;克隆不会获取无法访问的对象。事实上,GitHub支持人员的手动干预似乎是唯一的解决方案。我已经在我的答案中加入了你的测试,以提高可视性。谢谢,这正是我害怕的。您不能这样做,原因与您相同。本地克隆“工作”以保留的原因是因为本地文件系统上的硬链接实际上没有被复制。如果使用git clone克隆clean,则无硬链接file:///Users/yourUser/your/full/repo/path repo clone name
您正在复制远程cl的行为