2016-10-14 11 views
1

コミット中の各ファイルのファイル内容を表示するにはどうすればよいですか?Git - コミットの各ファイルのファイル内容を表示するにはどうすればいいですか?

たとえば、コミットに20個のファイルが変更されたとします。今は、ファイルごとにgit show *commit*:*file_path*を20回使用しています。

この情報をすべて1つのgitコマンドで取得する方法はありますか?

+0

変更されたファイルの* *または変更されたファイルのリスト*? –

+0

変更されたファイルの内容。私はすでに 'git diff --name-only commit'を使って変更されたファイルのリストを取得しています。 – ab2231ss

答えて

1

最も簡単な方法は、コミットをチェックアウトしてから、それらのファイルを見て(他のファイルは無視する)ことです。あなたがgit worktree add使用して、例えば、異なる作業ツリーにチェックアウトすることができますことに注意してください(Gitのバージョン2.5以降で利用可能に、ほとんどの2.6.xのように信頼性の高い、しかし、最高のは、おそらく2.8+になります):

$ git worktree add /tmp/tmpbranch HEAD~3 
Preparing /tmp/tmpbranch (identifier tmpbranch) 
HEAD is now at ... 
$ ... work with files in /tmp/tmpbranch ... 

ますあなたが持っているものを見ることができます。

$ git worktree list 
/home/torek/[path] d22d10a [master] 
/tmp/tmpbranch  b6fc8a3 (detached HEAD) 

と、次のようにクリーンアップ:あなたはどこにでも新しい作業ツリーを配置することができますが、私は現在の仕事のうちのどこかにそれを置くでしょう

$ rm -rf /tmp/tmpbranch 
$ git worktree prune 

注意~are私自身の混乱を避けるために(これは/ tmpのように)

(私はそれがないと、GitはHEADが新しいブランチ名tmpbranchの下にコミットチェックアウトしているだろう。commit-と支店名を与える。このtmpbranchと呼ばれますが、コミット指定子としてHEAD~3を使用すると、それが外れなった原因あなたがデタッチされたHEADを取得するために--detachを追加しない限り、新しい作業ツリーのそのブランチをチェックアウトします。未処理のコミットハッシュを使用すると、毎回デタッチされたHEADが得られます)。

+0

ありがとう、私はこのような何かをしなければならないと心配していた。 – ab2231ss

+0

まあ、シェルスクリプトループを使うこともできます: 'for path in p1 p2 p3 ... pN; gitは$ commitを実行します:$ path>/tmp/dir/$ path;完了しました。 'git show'の主な欠点は、フィルターを介してファイルを実行しないことです(これは主なプラス側です)。私はちょうど簡単な一時的な作業ツリーが*より簡単だと思う。 – torek

0

コミットを対話的にリベースして、それらをスカッシュすることができます。次に、その1つのコミットハッシュについてgit showを実行します。たとえば、次のように設定できます。

git rebase -i HEAD~20 
# your terminal will display either nano editor or vim. The format will be as such 
# pick *commit_hash* *commit_message* 
# pick *commit_hash* *commit_message* 
# pick *commit_hash* *commit_message* 
# pick *commit_hash* *commit_message* 

#change all of your 'pick' to 's' (s means squash). Start from the bottom and go up 
#Save your changes on which ever editor you are using. Git will prompt you to name your squash commit 
# Then just do git show *commit_hash* 

+0

次に、git reflog – gkalikapersaud

+0

を見て変更を元に戻すことができます。これは良い考えです。私はそんなことは考えていませんでした。やってみます。ありがとう。 – ab2231ss

+0

質問があれば教えてください – gkalikapersaud

関連する問題