2017-09-19 27 views
2

的第n次修改的文件我經常跑git status,然後希望看到這些文件中的一個具體的diff。所以經過:混帳命令diff的一個git狀態輸出

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,或作爲備用的bash,以git diff第n個修改的文件,這樣git diff <someMagic(2)>將減少到git diff path/to/modified/file2

我的主要問題是,如果這存在於git中,並且如果不幫助bash命令。

+2

沒有在Git的,但很容易使用'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> N,其中ñ是「第n修改後的文件」的數量。

(例如,使用你的例子,如果我叫<script>.sh 2它會調用此類DIFF:git diff path/to/modified/file2

+1

嗯,我想比較文件之前,我甚至想到分期的事情。我只是發現將更改後的文件路徑複製到'git diff ...'是很乏味的。 –

+0

假設的git的狀態輸出結構是已知的,一個(不是我)大概可以製作一個sed命令用於拍攝第n修改線和拼接出來的'修改:'位;) –

+0

@AlexBollbach我已經編輯我的答案匹配你的意圖。我相信它解決了你的問題,你能檢查並告訴我它是否適合你嗎? –