我刚刚制作了一个简单的脚本,并在 GitHub 上为其创建了一个新的存储库。初始化本地存储库,将脚本移动到存储库并pull
访问 GitHub 存储库(仅包含一个README.md
文件)后,脚本消失了。这是正常行为吗?有什么方法可以恢复该文件吗?
以下是执行的命令:
$ mkgithub ~/dev/cr2meta2jpg
Initialized empty Git repository in /home/username/dev/cr2meta2jpg/.git/
$ mv test.sh ~/dev/cr2meta2jpg/cr2meta2jpg.sh
$ cd ~/dev/cr2meta2jpg/
$ ls
cr2meta2jpg.sh
$ git pull
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From github.com:l0b0/cr2meta2jpg
* [new branch] master -> origin/master
$ ls
README.md
答案1
Agit pull
不会覆盖本地更改,除非您git add
之前使用过。即使在这种情况下,您仍然可以恢复数据。
当您在git add
拉取之前发出时:
mkgithub blub
cp test.sh blub/
cd blub/
git add test.sh
git pull
拉动就会删除test.sh
。仅当您在本地存储库中没有提交时,它才会执行此操作。添加提交后,这不会删除test.sh
(git 要么忽略它,要么报告合并冲突)
文件没有丢失。它仍然作为一个悬空 blob 存在于 Git 存储库中。
要恢复文件:
$ git fsck
Checking object directories: 100% (256/256), done.
Checking objects: 100% (401/401), done.
dangling blob 541060d8292ff808c9715265d063f1bae220da7c
$ git show 541060d8292ff808c9715265d063f1bae220da7 > test.sh
只要您git gc --prune=now
事后未发出此命令,此操作就有效。
答案2
我尝试使用 github 远程创建一个新的存储库:
$ mkgithub ~/dev/cr2meta2jpg
Initialized empty Git repository in /home/username/dev/cr2meta2jpg/.git/
我将一个文件粘贴在文件夹中但没有跟踪它:
$ mv test.sh ~/dev/cr2meta2jpg/cr2meta2jpg.sh
$ cd ~/dev/cr2meta2jpg/
$ ls
cr2meta2jpg.sh
然后尝试从github上拉取:
$ git pull
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From github.com:l0b0/cr2meta2jpg
* [new branch] master -> origin/master
$ ls
README.md
cr2meta2jpg.sh
已被删除,所以看起来答案是肯定的。