git pullは初期化後に追跡されていないファイルを削除しますか?

git pullは初期化後に追跡されていないファイルを削除しますか?

私は単純なスクリプトを作成し、GitHubに新しいリポジトリを作成しました。ローカルリポジトリを初期化してスクリプトをリポジトリに移動した後、pullGitHubリポジトリ(1つのファイルのみを含む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動作します。

おすすめ記事