2016-11-21 57 views
1

如果我做git diff,我会得到所有未分档文件的当前更改。git diff只是第一个文件(所有未分类的更改)

有没有简单的方法来自动执行git diff只是第一个列出的文件(使用内置标志)?

我想出的最好的是:

function git_diff_first_unstaged_file() { 
    if [[ $(git diff --name-only) ]]; then 
     git diff $(git diff --name-only | sed -n '1 p') 
    else 
     echo "gdf: There are currently no unstaged changes." 
    fi 
} 
alias gdf='git_diff_first_unstaged_file' 

我想知道如果有一个git diff标志我刷了,会做这对我来说。

+1

没有标志。你的方法和任何方法一样好(或多或少:你可以通过运行'git diff --name-only | sed -n 1p'来使它更高效一些,将输出保存在一个变量中,然后运行只有存在名称时,才会在该保存的名称上使用“git diff”)。 – torek

+1

我想我可以做'git diff $(git diff --name-only | sed -n 1p)',但if语句很好。无论如何,谢谢你确认我对旗帜潜力的理解:) – Nico

+0

我必须问...你为什么要这样做? – Schwern

回答

1

除了git diff --name-only之外,您还有git ls-files --modified会列出您未分档的文件(与| sed -1p一起使用以获得第一个文件)。

不要忘了,如果你想开始的第一个文件分期差异,你必须只需输入选项:

git add -p 

你会看到,将能够选择性地添加的diff为先文件(然后第二,在这一点上,你可以输入q退出交互式分期会议)

+0

哇!这太棒了,我不知道这个互动会话是否存在。谢谢! – Nico

0

继在评论中建议,可以以下面的别名添加到~/.gitconfig(项目配置)到先与作比较未分级跟踪文件:

[alias] 
    gdf = "! git diff $(git diff --name-only | sed -n 1p)" 

如果你想与第i个未分级一个diff跟踪文件:

[alias] 
    gdi= "!f() { git diff $(git diff --name-only | sed -n $1p); }; f" 

git gdi 3将呈现不分级的变化差异第三文件(如果少于3个文件,则为最后一个文件)。

相关问题