git拉取后,代码不见了,没有冲突覆盖,且,没有删除
重点提醒
- 当你的代码丢失时,不要惊慌,首先尝试使用本地的历史记录和远程仓库来找回代码。如果这些方法不起作用,你可以考虑其他的救援工具或寻求帮助。在日常开发中,及时进行备份和提交代码可以避免代码丢失的风险。
- 当你在使用Git进行版本控制时,有几种常见情况可能导致代码丢失,包括误删文件、错误地回滚版本、意外的硬盘故障等。但是,
不用担心,Git提供了多种方法来找回丢失的代码
。 - 如果你的Git代码丢失了,不要慌张。尝试以下方法,相信你能够找回你的代码。同时,为防止代码丢失,建议你定期备份你的Git仓库以及提交代码到远程仓库。这样即使出现问题,也能够快速恢复你的代码。
- git仓库中还是不要做
shift+del
这种操作 git reset --hard
要谨慎- 遇到问题
别慌
,耐心找方法
一、reflo命令
1.先执行命令,查看历史提交记录
打开后命令工具后,cd进入你的项目,即项目.git
所在文件夹
git reflog
操作后如下图:
D:\xxxxProject\xxxxShop\xxxxshop>git reflog
1b7d9c8 (HEAD -> master) HEAD@{0}: commit: 错误丢失备份
d08f7a8 HEAD@{1}: reset: moving to d08f7a8
d08f7a8 HEAD@{2}: reset: moving to d08f7a8
aa291b7 HEAD@{3}: reset: moving to aa291b7
a69f249 HEAD@{4}: reset: moving to a69f249
0762bd4 HEAD@{5}: reset: moving to 0762bd4
fa7ac8b (xxxxShop/master) HEAD@{6}: checkout: moving from master to master
fa7ac8b (xxxxShop/master) HEAD@{7}: pull --progress --no-edit --no-stat --recurse-submodules=no xxxxShop: Merge made by the 'ort' strategy.
671b2e9 HEAD@{8}: commit: 11
0762bd4 HEAD@{9}: checkout: moving from a69f249a590d789d163cb81eacfe30ea5114bd22 to master
a69f249 HEAD@{10}: checkout: moving from 0762bd41670f095ea6db689cb653fa8f5af52083 to a69f249a590d789d163cb81eacfe30ea5114bd22
0762bd4 HEAD@{11}: checkout: moving from master to 0762bd41670f095ea6db689cb653fa8f5af52083
0762bd4 HEAD@{12}: reset: moving to 0762bd41670f095ea6db689cb653fa8f5af52083
0762bd4 HEAD@{13}: reset: moving to 0762bd41670f095ea6db689cb653fa8f5af52083
0762bd4 HEAD@{14}: reset: moving to 0762bd41670f095ea6db689cb653fa8f5af52083
0762bd4 HEAD@{15}: revert: Revert "111"
a69f249 HEAD@{16}: cherry-pick: 111
ba000fe HEAD@{17}: reset: moving to ba000fe4c75eb2ef234a813fc34b99a1c8a76911
ba000fe HEAD@{18}: revert: Revert "111"
aa291b7 HEAD@{19}: reset: moving to aa291b75cbc9341b63a748c05288ff7094b15f3a
aa291b7 HEAD@{20}: reset: moving to HEAD
aa291b7 HEAD@{21}: commit: 111
d08f7a8 HEAD@{22}: commit: 1
e7d88a4 HEAD@{23}: commit: 修改xxID类型
如
d08f7a8 HEAD@{1}: reset: moving to d08f7a8
d08f7a8
即为ID
2.执行 恢复命令
git reset --hard 7f00873
不过,我之前遇到过,执行这个命令是解决了,代码连同文件一起找回的,不需要修改任何东西
这次,不行;我感觉应该是执行了git reset --hard
命令。下面内容我会提到。
二、 终极解决方案find命令
find .git/objects -type f | xargs ls -lt | sed 30q
1.打开git-bash.exe
注意:
windows没有find命令,在git bash执行即可
2.cd进入项目
打开后,cd,进入你的项目,即项目.git
所在文件夹
cd D:/xxxProject/xxxShop/
3.执行find命令
find .git/objects -type f | xargs ls -lt | sed 30q
结果如图
4. 执行生成文件名称
提取 object/
后面的值,第一个/
要去掉。
例如第一个是 :
-r--r--r-- 1 Administrator 197121 444 Aug 8 16:37 .git/objects/07/aa05580ccf9d431a1f403d7ebf6348d1e8d343
命令如下:
git show 07aa05580ccf9d431a1f403d7ebf6348d1e8d343>123.md
他就会在你的项目根目录里生成一个文件123.md
的文件,
和.git
文件夹同级;
如果你写的是123.txt
文件,也可以。
如下图:
打开这个文件,你就可以看到里面丢失的内容了。
然后,复制粘贴+修改文件和文件内容即可。
我感觉应该是执行了git reset --hard
命令
下面是我操作的截图
图1(迁出/分离)
图2(迁出/分离)
图3(重置-保修修改mixed、删除修改hard)
三、延伸阅读
情况一:已提交的代码丢失
可以尝试使用Git的reflog
命令来查看本地仓库的操作记录。这个命令会显示出你在本地仓库中的所有操作,包括切换分支、合并提交等操作。你可以在这个列表中找到你之前的提交版本,并使用git checkout
或git reset
命令来恢复到特定的提交版本。
如果你已经提交了代码,并且发现某个提交丢失了,可以按照以下步骤进行恢复:
-
首先,使用
git reflog
命令查看Git的引用日志,它记录了你的所有分支和HEAD的移动情况。 -
找到你丢失提交的哈希值,通常是一个较长的字符串,如
abc123
。 -
使用
git cherry-pick abc123
命令将丢失的提交应用到当前分支中。
1.本地恢复:
如果你的代码是最近提交的,并且还没有推送到远程仓库,那么你可以尝试使用Git的一些命令来找回丢失的代码。
- 查看Git的日志: 使用
git reflog
命令可以列出你的本地仓库的所有操作记录,包括提交、分支切换等。你可以通过查看日志来找回代码的提交ID。 - 回滚版本: 如果你知道你丢失代码的提交ID,你可以使用
git reset
命令来回滚到该提交ID,并将代码恢复到该版本。
2.远程恢复:
如果你将代码推送到了远程仓库,但本地的代码丢失了,你可以尝试使用以下命令来找回代码。
- 克隆远程仓库: 使用
git clone
命令可以将远程仓库克隆到本地,并获取最新的代码。 - 恢复远程分支: 如果你知道远程仓库中的分支名,可以使用
git checkout
命令切换到相应分支,并将代码恢复到该分支的最新提交。
3.查看本地备份:
查看本地备份:首先,检查一下你的本地备份。在你的本地电脑上,使用命令行进入你的Git仓库所在的文件夹,并执行git log
命令来查看Git的提交历史记录。在这个列表中,你可以找到提交ID(commit ID)和相应的提交消息。如果你找到了之前的提交,那么意味着你的代码并没有丢失,你可以用git checkout
命令恢复到特定的提交版本,或者使用git reset
命令来回滚到之前的提交。
4.检查远程仓库:
如果你在使用远程仓库(例如GitHub、GitLab等),可以打开相应仓库的网页界面,查看仓库的提交记录和文件变动情况。如果你的代码在远程仓库有备份,你可以使用git pull
命令将最新的代码拉取到本地。
情况二:未提交的代码丢失
如果你在未提交代码时发生了丢失,可以按照以下步骤进行恢复:
-
首先,使用
git fsck –lost-found
命令查找丢失的对象。这个命令将在.git/lost-found/other
目录下生成一些文件。 -
如果找到丢失的对象,可以使用
git show
命令来查看文件内容,并将其复制到正确的位置。
情况三:误删除的文件恢复
如果你不小心删除了一个Git仓库中的文件,可以按照以下步骤进行恢复:
-
使用
git reflog
命令查找删除文件的提交记录。 -
找到文件删除的提交哈希值,例如
abc123
。 -
使用
git show abc123:path/to/file
命令来查看文件的内容。 -
使用
git checkout abc123 — path/to/file
命令将文件恢复到指定提交的版本。
情况四:误合并的代码恢复
如果你在合并分支时遇到问题,导致代码丢失,可以按照以下步骤进行恢复:
-
使用
git reflog
命令查找合并的提交记录。 -
找到合并提交的哈希值,例如
abc123
。 -
使用
git revert -m 1 abc123
命令撤销合并提交,并还原到合并前的状态。
需要注意的是,以上方法只能在本地仓库中恢复代码。如果代码已经推送到远程仓库,可能需要与远程仓库进行同步。可以使用git pull
命令来拉取最新的代码,或者使用git push
命令将本地仓库的代码推送到远程仓库。
另外,为避免代码丢失,建议定期进行代码的提交和推送,以及备份关键代码。此外,可以使用Git提供的分支和标签功能,来更好地管理和保护你的代码。
使用Git的备份功能:
Git提供了一个称为“备份(stashing)”的功能,它可以将当前的更改暂存起来,以便你可以切换到其他分支或版本。如果你丢失了代码,但是之前使用过备份功能,你可以尝试使用以下命令来恢复代码:
- 暂存更改: 使用
git stash
命令将当前的更改暂存起来。 - 恢复更改: 使用
git stash apply
命令将之前暂存的更改应用到当前分支,从而恢复代码。
使用Git的文件恢复工具:
如果你无法通过以上方法找回代码,你可以尝试使用一些第三方的Git文件恢复工具,如Gitの救援、git-recover等。这些工具可以扫描你的Git仓库及其历史记录,并尝试恢复丢失的代码文件。
寻求帮助:
如果你尝试了以上方法仍然无法找回代码,你可以寻求Git社区或者其他开发者的帮助。将你的问题描述清楚,并提供尽可能多的细节,他们可能会给你提供进一步的建议或解决方案。
四、参考文章
-
https://blog.csdn.net/cplvfx/article/details/131333098
文章底部的:《执行拉取后本地代码丢失,恢复本地代码》