2012-01-25 18 views
3

私はgit cleangit resetについて読んだことがありますが、私は彼らが私の必要とすることはしないと思います。私はgit pullを試しましたが、問題を解決しませんでした(結果はAlready up-to-date.ローカルのgitリポジトリには、削除されたファイル、リモートファイル、「ステージングされていません」があります。

私のリモートリポジトリはgithubです。

旧式のPCから私のすべてのレールプロジェクトを新しいMacにコピーしました。新しいMacには、動作するレール開発環境もあります。

他のすべてはうまく動いていましたが、何とかして、多くのdb/migrationファイルがローカルにありません。 (いいえアイデアは、なぜ...他に何が不足していない。)

Iディレクトリにcdと私は同じことを見git status実行すると:とにかく

# On branch master 
# Changes not staged for commit: 
# (use "git add/rm <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
# deleted: db/migrate/20110330064532_init_user_guids.rb 
# deleted: db/migrate/20110330065055_init_master_report_key.rb 
# deleted: db/migrate/20110331001956_create_recurly_accts.rb 

は、私が引っ張ってくるコマンドを探していますリモート(起点)からローカルへの欠落している(ステージングされていない+削除された)すべてのファイルを、sqliteデータベースなどのローカルに追跡されていないファイルを削除することなく削除します。

削除が「unstaged」なので、ローカルgitリポジトリからそれらを復元するgitコマンドですか?

(私は...私は交換する必要があるものだけで不足しているファイルを他のunstaged変更がないことを追加する必要があります。)

答えて

6

場合にのみ、変更が欠落しているファイルである場合は、git reset --hard HEADを使用すれば、すべてを元の状態に戻すことができます。ただし、でない場合は、はすべての未追跡ファイルを削除します(そのためにはgit cleanが必要です)。したがって、実行しても安全です。失われたファイルは復元されますが、追跡されていないデータベースは残しておいてください。

+0

すばらしい説明、ありがとう。私を混乱させたものは、git checkout(ファイルごとのファイル)を使用していると書かれたドキュメントがたくさんありました。しかし、このケースでは、それらをすべて置き換える方法があるように思われました(他に変更が加えられていない場合)。ありがとう! – jpwynn

+1

@jpwynn 'git checkout'はインデックスから、または特定のリビジョンから個々のファイルやフォルダをチェックアウトできます。したがって、 'git checkout'の同等物は実際には' git checkout - .'であり、現在のディレクトリ全体をインデックスからチェックアウトします。 –

3

試してみてください。

git checkout db/migrate/20110330064532_init_user_guids.rb 

など

1

ステータスは、ファイルがリポジトリにあるが作業コピーにはないことを伝えています。リポジトリは、マシン上にもあります。 git statusさんはあなたがコミットしたいかもしれない変更としてrm db/migrate/...をやったと思っています(ファイルを編集した場合と同じです)。これらの変更を元に戻すには、git checkout db/migrate/...を使用して、ローカルリポジトリから変更されていない(この場合は削除されない)コピーを取得します。他の保留中の変更がない場合は、git reset --hardでその質量を行うことができます。

暗い魔法によってそれらのオブジェクトも欠落していない限り、リモートのレポからこれらのファイルを表すオブジェクトを取得する必要はありません。その場合は、簡単なgit fetchがローカルリポジトリにオブジェクトを持ち込み、上記のように作業コピーを回復できます。

関連する問題