git操作错误导致文件丢失

前提:我有两个项目文件夹:分别对应的是我工作的两个状态(原始版和最新版),他们的区别是:最新版比原始版多了很多新文件(不重要),最新版对原始版的文件进行了修改和更新(重点)。在不停的更新和回退中我感觉很麻烦,想学一下git来管理代码。并且没有备份!
问题:我已经用git提交了原始版,然后我想新建一个分支提交最新版,然后我把原始版中的.git复制到最新版中,从而来新建分支并提交。而后发现,提交了新增的文件,但是在项目中相对于原始版的同名文件,是原始版的,我试图找到我最新版相对于原始版的同名文件,我发现回滚会回滚到原始版,我意识到问题出在我复制了原始版中的.git文件。现在我还能找回最新版中相对于原始版的同名文件吗,感觉希望渺茫。
假设原始版和最新版中都有一个a文件,现在就是最新版中的a没了,想找到最新版的a

如果是用Idea工具的话,右键文件有个Local History,,这个是本地修改过的历史记录,里面有你本地改过所有的记录

参考gpt:
结合自己分析给你如下建议:
当你把原始版中的.git复制到最新版中时,你实际上是覆盖了最新版中的.git文件夹,导致你之前在最新版中做的所有修改和提交都被丢失了。这是一个非常危险的操作,应该尽量避免。
要恢复你的最新版中相对于原始版的同名文件,你可以尝试以下几种方法:
方法一:如果你在复制.git文件夹之前,已经在最新版中提交过一次或多次,那么你可以使用git reflog命令来查看你的提交历史,并找到你想要恢复的提交的哈希值。然后你可以使用git reset --hard命令来回滚到那个提交,从而恢复你的最新版文件。具体的步骤如下:
在最新版的文件夹中,打开命令行窗口,输入以下命令:
git reflog # 查看提交历史
git reset --hard # 回滚到指定的提交,其中是你想要恢复的提交的哈希值
方法二:如果你在复制.git文件夹之前,没有在最新版中提交过任何内容,那么你可以使用数据恢复软件来尝试恢复被覆盖的文件。这种方法不一定能成功,也可能会损坏文件的内容,需要谨慎使用。具体的步骤如下:
在有网络的机器上,下载并安装一个数据恢复软件,如Recuva、EaseUS Data Recovery Wizard等。
将最新版的文件夹拷贝到一个外部存储设备上,如U盘、移动硬盘等。
运行数据恢复软件,选择外部存储设备作为扫描目标,并开始扫描。
在扫描结果中,查找并勾选你想要恢复的文件,并选择一个恢复目录。
点击恢复按钮,等待恢复完成。

你最好是先把新代码保留一份,然后对你提交的版本进行回退即可,回退版本就是你提交的版本。
然后就回退到了原始版本,然后你新增个分支,属于你的分支。再把你保留的代码复制更新到你的分支中即可。虽然麻烦点,但是是良药啊~~

使用git log命令查看提交历史记录,特别是最新版的提交记录。尝试找到最新版中丢失的文件的最后一次提交,并使用git checkout命令来恢复该文件。

【以下回答由 GPT 生成】

你的情况是将原始版的.git文件夹复制到了最新版中,这样会导致最新版的文件覆盖了原始版的文件,因此最新版的特定文件可能丢失。

如果你只是复制了.git文件夹而没有执行git commit命令,那么你可以尝试以下步骤来找回最新版中丢失的文件:

  1. 首先确认当前文件夹是否处于Git仓库状态。在命令行中进入最新版文件夹的路径,然后执行git status命令。如果输出类似于fatal: not a git repository的错误信息,说明当前文件夹不是一个Git仓库,而是原始版文件夹,无法找回最新版文件。

  2. 如果当前文件夹是一个Git仓库,你可以使用git reflog命令来查看仓库的提交历史,包括回滚操作。执行git reflog命令,会显示类似于以下的信息:

b7a552d HEAD@{0}: commit: Latest changes 25fae9e HEAD@{1}: commit: Previous changes 1e2af13 HEAD@{2}: commit: Initial version

这里的每一行表示一个提交操作和对应的提交哈希值。查找和最新版相关的提交操作,如果发现类似于"Latest changes"的提交操作,记录它的提交哈希值。

  1. 使用git cherry-pick命令来尝试恢复最新版中丢失的文件。执行以下命令将特定提交的更改应用到当前分支中:

bash git cherry-pick <commit-hash>

<commit-hash>替换为前一步中记录的最新版相关提交的哈希值。

如果该提交中包含了你丢失的文件,那么它们应该会被恢复到当前分支中。

如果上述步骤不能找回丢失的文件,很遗憾地说,由于你复制了原始版的.git文件夹,覆盖了最新版的文件,恢复最新版中特定文件的可能性非常小。在这种情况下,最好的方法是从备份中恢复丢失的文件,或者尽量查看你工作的其他地方是否存在文件的副本。

对于以后的工作,建议你按照以下步骤使用Git来管理代码:

  1. 在原始版文件夹中执行git init命令,将其初始化为一个Git仓库。

  2. 使用git add命令将原始版中的所有文件添加到暂存区。

  3. 执行git commit命令来提交原始版的修改。

  4. 使用git branch命令创建一个新的分支,用于提交最新版的修改。例如,执行git branch latest来创建一个名为"latest"的分支。

  5. 从原始版文件夹中切换到最新版文件夹。

  6. 在最新版文件夹中执行git init命令,将其初始化为一个新的Git仓库。

  7. 使用git remote add命令将原始版文件夹配置为最新版文件夹的远程仓库。例如,执行git remote add origin /path/to/original/repo,将原始版文件夹设置为"origin"远程仓库。

  8. 执行git pull origin master命令从原始版文件夹中拉取代码到最新版文件夹。

  9. 执行git checkout latest命令切换到"latest"分支。

  10. 将最新版的修改提交到"latest"分支中,使用git addgit commit命令。

  11. 如果需要切换回原始版的代码,执行git checkout master命令。

通过这样的步骤,你可以更好地管理两个状态的代码,并且在不同分支中保存代码的不同版本。务必确保在进行任何代码操作之前进行适当的备份,以防止数据丢失。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^