3

ツリー内の特定のファイルのみをチェックアウトしたいのですが、ローカルで変更したため、マージを理解しようとする手間をかけたくないので、頻繁にチェックアウトします(何もマージしたくない-特定のファイルのgitバージョンが必要です) 。

では、たとえば、これらのファイルがディレクトリ構造に散在している「db-backup*」のチェックアウトを強制するにはどうすればよいでしょうか。

例えば

git-parent
  - dir1
    - db-backup1
  - dir2
    - db-backupA

ありがとう、

r。

4

3 に答える 3

8

あなたがやりたいことに応じて、いくつかの可能な解決策があります

  • 変更を破棄したい場合は、

    git checkout -f <paths>...
    
  • 後で使用するために変更を保存したいが、今のところ心配しない場合は、変更を隠してからチェックアウトを行うことができます。

    git stash
    git checkout <paths>...
    

    変更を復元するには、git stash pop(またはgit stash apply)を使用します。

  • ファイルのGitバージョンを単純に表示したい場合(そしておそらく一時ファイルに保存したい場合、または他の名前で保存したい場合)、次の目的git showで使用できます。

    git show <file>
    
  • 他の場所にあるディレクトリまたはファイルのサブセットをチェックアウトする場合は、git-archiveホームページの「例」セクションで説明されているように使用できます。git archive

    git archive --format=tar --prefix=subdir/ HEAD:subdir | 
        (cd /var/tmp/ && tar xf -)
    

    通常は違いはありませんが、インデックスからではなく、HEAD(最後のコミット)からのバージョンを使用することに注意してください。

    これを実現する別の方法は、の--tempオプションを使用することですgit checkout-indexが、これはハッカーと見なすことができます。

HTH

于 2010-09-25T08:59:53.680 に答える
0

git checkout <filename>ファイルに変更があったとしても、私にとっては問題なく動作します。エラーとして正確に何を取得し、どのコマンドを実行しようとしていますか?これはおそらく機能するはずです:

find . -name 'db-backup*' | xargs git checkout --
于 2010-09-25T00:10:03.603 に答える
0

Git 2.23以降(2019年8月)では、混乱を招くコマンドgit restoreの代わりに使用するのがベストプラクティスです。git checkout

pathspecと組み合わせると、HEADコンテンツを含む作業ツリーが復元されます(つまり、ステージング解除)

git restore -s@ :(glob)db-backup*
于 2020-01-11T23:02:17.057 に答える