git pull은 초기화 후에 추적되지 않은 파일을 삭제합니까?

git pull은 초기화 후에 추적되지 않은 파일을 삭제합니까?

방금 간단한 스크립트를 만들고 GitHub에 새 저장소를 만들었습니다. 로컬 저장소를 초기화하고 스크립트를 저장소로 이동한 후 pullGitHub 저장소(파일 하나만 포함 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제거되었으므로 대답은 '예'인 것 같습니다.

관련 정보