2012-02-19 12 views
12

ファイルをProjectからProject/srcに移動しました。 Gitは、私がProjectからファイルを削除し、Project/srcに新しいファイルを作成したという印象を受けています。作業ツリー内で移動された複数のファイルをチェックアウト

さらに、私はコミットしたいワーキングツリーに複数の変更を加えました。マイgit status


$ git status 
# On branch feature/cmake 
# Changes to be committed: 
# (use "git reset HEAD ..." to unstage) 
# 
# new file: .gitignore 
# new file: CMakeLists.txt 
# deleted: Wasa.xcodeproj/project.pbxproj 
# deleted: Wasa/Wasa.1 
# renamed: Wasa/main.cpp -> main.cpp 
# new file: src/CMakeLists.txt 
# Lots of new files listed here 
# 
# Changes not staged for commit: 
# (use "git add/rm ..." to update what will be committed) 
# (use "git checkout -- ..." to discard changes in working directory) 
# 
# modified: CMakeLists.txt 
# deleted: IODevice.h 
# Lots of deleted files listed here. 

私はソースファイルをunstageしたい - *.{cpp,h}。私は無段階にする方法を知っています(リンクhereなど)。私がにしたいのはのことをやって、git checkout <filename>の多くを入力しています。

私はチェックアウトしたくありませんHEAD、私は維持したいと思っている作業ツリーの変更の一部です。私は、次を与える、git checkout *.{cpp,h}をやってみました:


$ git checkout *.{cpp,h} 
zsh: no matches found: *.cpp 

ファイルが現在の作業ツリーに存在しないので*.{cpp,h}にファイルが一致しないため、私はそれらをチェックアウトすることはできません。

ファイルはすべてProject/srcです。おそらく、正規表現や何かを実行することができるls srcの出力はgit checkoutコマンドにパイプされていますが、gitが私自身のためにこれを行うことができるかどうか知りたいのですが。私はgitでこれを行うことができる方法はありますか?複数のファイルをチェックアウトするために

$ git checkout \*.{cpp,h} 

答えて

27
*エスケープ

。私はワイルドカードを実装したばかりで、うまくいきました。 特定のファイルについては、おそらく別のトリックが必要です。

私が使用:私のGitのバッシュで

git checkout -- *.*

を。私のワークスペース内のすべての変更されたファイルは、リポジトリ内のファイルに置き換えられました。

私はそれが助けてくれることを祈ります、ありがとう。

+0

ファイルがディレクトリに存在する場合、git(またはおそらくシェルでは、 '*。{cpp、h}'を受け入れ、それをすべての一致するファイルに展開します。私の問題は、私が*一致するファイルを持っていないということです。彼らは 'src/*。{cpp、h}'に移動しました。 'git checkout '、 'git checkout 'などと打ち間違えてファイルをチェックアウトしようとしています。 – simont

+0

あなたがシェルでは一致しません。試してみてください:-) – Irfy

+0

Heh。私の悪い;あなたが書いたものを完全に誤って読んでいます。それはうまくいく - ありがとう。 – simont

2

+0

問題は、受け入れられた答えで指摘されていることですが、 '*'はシェル(bash、zsh ...)によってすべての一致するファイルに展開されますあなたはそれらを移動/除去しました。この文脈では、 '\ *'はgitによって追跡されるファイルに 'git'によって展開されます。つまり' git add'がそれらに適用されています。ファイルが移動/削除されたとしても、 'git checkout \ *'は移動/削除をコミットするまでそれらのファイル名に展開されます。実際、 'file.end'の削除をコミットするには、' git commit file.end'を実行する必要がありますが、そのファイルはそこには存在しません(ただしgitにはあります)。 –

+0

それは本当です。 ありがとうジョナサン。ごめんなさい – Divesh

関連する問題