방금 간단한 스크립트를 만들고 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
A는 이전에 사용한 적이 git pull
없는 경우 로컬 변경 사항을 덮어쓰지 않습니다 git add
. 이 경우에도 데이터를 복구할 수 있습니다.
당기기 전에 발행하는 경우 git add
:
mkgithub blub
cp test.sh blub/
cd blub/
git add test.sh
git pull
당기면 삭제됩니다 test.sh
. 로컬 저장소에 커밋이 없는 경우에만 이 작업을 수행합니다. 커밋을 추가한 후에는 제거되지 않습니다 test.sh
(git은 이를 무시하거나 병합 충돌을 보고합니다).
파일은 손실되지 않습니다. Git 저장소에는 여전히 매달려 있는 blob으로 존재합니다.
파일을 복구하려면:
$ 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
제거되었으므로 대답은 '예'인 것 같습니다.