11

コンピューター上にgitリポジトリを作成し、サーバーにプッシュしました。次に、リポジトリのコンテンツとマージする必要がある別のコンピュータのフォルダに移動しました。

これが私が実行した正確なステップです(私はそれを再現しました):最初のリポジトリで:

git init
git remote add origin *repo adress*
git remote update
echo "abc" > a
git add a
git commit -a -m "Intial commit"
git push --set-upstream origin master

2番目のもの(ファイルが削除されるもの):

git init
echo "def" > b
git add b
git remote add origin *repo adress*
git remote update
git pull origin master

私が予想したことは、gitがそれらのファイルをプルし、ローカルファイルをコミットして元に戻すことができるということでした。しかし、代わりに私のローカルファイルはなくなりました。gitは本当に警告なしにローカルファイルを削除しただけですか(強制オプションなどは使用しませんでした)?

それらを取り戻す可能性はありますか、それとも追跡されていないファイルを削除するだけの意図された予想される動作ですか?

ちょうどgit status言うの出力:

# On branch master
nothing to commit, working directory clean

テストリポジトリを使用してこれらの手順を再現したところ、次のようになりました。ファイル "a"はリポジトリ番号2にプルされますが、ファイル "b"はなくなりません(aのみが'ls'で表示されます)。

4

1 に答える 1

3

さて、私は別の奇妙なことを見つけます。

の助けを借りgit pullて、次のような文があります:

「デフォルトモードでは、gitpullはgitfetchの省略形であり、その後にgitmergeFETCH_HEADが続きます。」

したがって、上記の代わりにを使用$git fetchします。それでは、驚くべきことに、 ファイルbはまだそこにあります。$git merge FETCH_HEADgit pull origin master

だから、私は本当に何をしているのかわかりませんgit pull origin master

また、私はで説明を見ました

http://git.661346.n2.nabble.com/pulling-the-root-commit-overwrites-untracked-files-without-warning-1-7-2-3-td5658622.html

つまり、「git mergeは、有効なHEADがないことを検出したため、ハードリセットを実行します。これにより、すでに存在するファイルが明らかに上書きされます。」

しかし、私はこれを本当に疑っています。なぜなら、私は$git merge FETCH_HEADうまく使うことができるからです。

失われたファイルを見つけたい場合は、Gitが@ellothethによって提供されたコミットされていない変更をプルするのを見ることができます

于 2012-12-20T10:40:38.737 に答える