2017-09-19 4 views
2

私はしばしばgit statusを実行し、それらのファイルの特定のdiffを表示したいとします。だから、後:git diff <someMagic(2)>git diff path/to/modified/file2に減少するであろうように、gitコマンドでgitステータス出力のn番目の修正ファイルをdiffする

Changes not staged for commit: 
    (use "git add <file>..." to update what will be committed) 
    (use "git checkout -- <file>..." to discard changes in working directory) 

    modified: path/to/modified/file1 
    modified: path/to/modified/file1 

それは、git diff n番目の変更されたファイルに、gitの持つ可能性、またはフォールバックbashのようです。

私の主な質問は、これがgit内に存在するかどうか、またbashコマンドを使用しない場合です。

+2

ないが、 'gitのステータス--porcelain'と'尾+ $ 1を用いた構築するのは簡単| -1 "または" sed -n -e '$ 1 {p; q;}' 'となります。 – torek

答えて

0

オートメーションがあなたの目標でない場合は、私はgit add -iがあなたのケースに合っていると言います。

git add -iのドキュメントをご覧ください。それを使用する方法は、それを呼び出した後、変更されたファイルの数を渡すことです

#!/bin/bash 
git diff $(git status | grep modified | sed 's/^.*: //' | head -n "$1" | tail -n 1) 

:スクリプトを探しているなら、私は正確に何をしたいん何かをやった

あなたはdiffをしたい:<script_name> NNは "n番目の修正されたファイル"の番号です。

(例えば、あなたの例を使用して、私は<script>.sh 2呼び出す場合、それは、このような差分呼び出します。git diff path/to/modified/file2)をGitリポジトリ内の

+1

hmm、私はステージングのことを考える前にファイルを比較したいです。私はちょうど変更されたファイルのパスを 'git diff ...'にコピーするのが面倒です。 –

+0

gitステータスの出力構造が分かっていると仮定すると、おそらく、n番目の修正された行を選択し、 'modified:'ビットをスプライスするsedコマンドを作ってしまう可能性があります;) –

+0

@AlexBollbachマッチする答えを編集しましたあなたの意図。私はそれがあなたの問題を解決すると信じています。それがあなたに合っているかどうかチェックして教えてくれますか? –

関連する問題