2016-11-21 2 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 

Вы увидите и сможете выборочно добавлять различия для первого файл (а затем второй, в какой момент вы можете ввести Q для выхода из интерактивного сеанса постановка)

+0

Ничего себе! Это фантастика, я не знал, что этот интерактивный сеанс существует. Спасибо! – Nico

0

Следуя рекомендации в комментариях, можно добавить следующий псевдоним ~/.gitconfig (проектной конфигурации) для того, чтобы сделайте разницу только с . unstaged но отслеживается файла:

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

Если вы хотите сделать диф с я-ем unstaged но гусеничного файла:

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

git gdi 3 покажет диф из unstaged изменений третий файл (или последний файл, если файлов меньше 3).

Смежные вопросы