2016-11-21 45 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個文件,則爲最後一個文件)。

相關問題