私は単純なスクリプトを作成し、GitHubに新しいリポジトリを作成しました。ローカルリポジトリを初期化してスクリプトをリポジトリに移動した後、pull
GitHubリポジトリ(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
動作します。
答え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
削除されたので、答えは「はい」のようです。