如果Github Desktop和Rstudio相互作用破坏了repo,我如何恢复本地repo文件?

如果Github Desktop和Rstudio相互作用破坏了repo,我如何恢复本地repo文件?,git,github,version-control,rstudio,Git,Github,Version Control,Rstudio,我的问题在标题中;下面是帮助git专家回答我问题的详细信息。看来我的本地回购协议的两个分支机构已经“混为一谈”:一些文件出现在它们从未出现过的分支机构上;许多文件已完全消失。我的理论是,同时使用两个git连接的应用程序(Github桌面和Rstudio)导致了这个问题——解释如下 我有一个包含多个分支的git项目,让我们关注branch1和branch2。在branch2/Applications中,我有数千个文件branch1没有这样的应用程序文件夹。这是正常情况 为了准备一个超期的提交并同步

我的问题在标题中;下面是帮助git专家回答我问题的详细信息。看来我的本地回购协议的两个分支机构已经“混为一谈”:一些文件出现在它们从未出现过的分支机构上;许多文件已完全消失。我的理论是,同时使用两个git连接的应用程序(Github桌面和Rstudio)导致了这个问题——解释如下

我有一个包含多个分支的git项目,让我们关注
branch1
branch2
。在
branch2/Applications
中,我有数千个文件
branch1
没有这样的应用程序文件夹。这是正常情况

为了准备一个超期的提交并同步到远程,我在本地清理这个项目,主要是在
branch2
(通过修改
.gitignore
,并将一些文件移动到非git本地文件夹)。与此同时,我正在使用Github桌面在
branch1
branch2
之间来回切换,几次切换的速度是每30秒一次。位于my repo本地目录中的Rstudio项目(
.Rproj
)也已打开。注意,这个
.Rproj
branch1
上不存在,但是当我使用Github在
branch1
branch2
之间反复切换时,该文件保持打开状态

不可思议的是,
branch2
上的大文件夹(15000多个文件)
Applications
从文件系统中消失了。我关闭了Github和Rstudio,git进程在高CPU负载下在后台运行了几个小时。我扼杀了这个过程

目前令人困惑的情况是:

  • branch2/Applications
    完全缺失。为什么?我确实将它添加到了
    .gitignore
    ,但我的理解是它应该仍然出现在本地文件系统中
  • 虽然不应该这样做,但是现在存在
    branch1/Applications
    。但它只包含15000多个文件中的一小部分,这些文件应该在
    branch2/Applications
    上。为什么?
  • .Rproj
    文件也有“跳过的分支”。现在,当在Github中选择了
    branch1
    时,它会出现在文件系统中,尽管在今天的问题之前它是一个
    branch2
    文件
我的理论是,我在Github中的分支之间切换得太快(或是别的什么),这使得Rstudio的git监控无法“跟上”,本地回购协议不知何故被破坏了

Github和Rstudio是否可能相互作用破坏本地回购协议?如果是这样的话,您是否有关于如何继续尝试恢复大文件夹的指导?我不是git专家,但如果有人有想法,我可以研究命令。我不知道从哪里开始


仅供参考,这个大文件夹不会以最近的形式出现在远程回购上,因为它距离我上次推送已经很长时间了。因此,我认为我无法从那里恢复它。

以下是我最后恢复文件的步骤。(请注意,我实际上并不希望这些私有结果文件出现在公共git repo中,所以我需要做的就是将它们写到磁盘的某个地方。)我运行了
git log--raw--all
,找到了丢失文件的完整列表,其中每一行都有原始的完整文件路径,还有一个SHA。好极了然后我写了一个脚本,每行都包含如下内容

git cat-file -p [SHA] > "/full/path/file.ext"
这将文件类型恢复为其原始状态和子目录结构,包括基于文本的文件以及从
R
工作区保存的
pdf
tar.gz
、和
R
对象


谢谢大家的帮助。最后,可能造成这个错误的关键步骤是我中断了GITHUB桌面的Git进程,在我切换分支时对15000个文件进行了隐藏操作。我假设这导致git分支被交叉。

现在两个分支上的git状态显示了什么?@JohnZwinck on branch1(master),它是最新的“origin/master”。它列出了几个未跟踪的文件,包括大文件夹(同样,它甚至不应该在那里)。“提交时未添加任何内容,但存在未跟踪的文件。”在branch2上:使用“origin/branch2”和“未提交任何内容,工作目录清理”更新“大文件夹”的名称是什么?你是不是在任何一个分支上犯了罪?如果是这样,您能在任一分支的“git日志”中找到提交吗?大文件夹是
~/github/Applications
。它不在
主机的提交历史记录中
(branch1)。它从来没有被推到
branch2
——每次提交时,该文件夹总是作为本地跟踪文件夹放在Github桌面上,我都会取消选中它(我相信这意味着取消它们的状态?)。从今天开始,我有一个提交,在
branch2
上,我修改了
.gitignore
。添加到
.gitignore
的是
Applications/*#忽略目录中的所有内容。
@NiceStats由于您没有将
应用程序
提交到git repo中,您在本地repo中提交了哪些更改?在本地回购损坏之前,您是否将本地回购与远程回购同步?那么,
git reflog
显示了什么?