git status
просто не делает этого. Он запускает внутренний эквивалент git diff --name-status --cached
(для сравнения HEAD
с индексом для отчета по changes staged for commit
) и внутренний эквивалент git diff --name-status
(для сравнения индекса с рабочим деревом и отчета по changes not staged for commit
). Флаг --name-status
заставляет внутренний diff выйти и перейти к следующему файлу , как только он узнает, что файлы являются или не отличаются , без фактического выяснения того, чторазличия есть. Следовательно, git status
просто не может рассказать вам как различаются два файла.
Чтобы получить то, что вы хотите, вам нужно запустить git diff
самостоятельно,вместо того, чтобы git status
запустить git diff --name-status
для вас. Таким образом, вы можете установить свои собственные флаги.
Я пробовал git diff --stat
, но, похоже, показывает общее количество удаленных / локальных изменений ...
Там неттакая вещь, как «удаленные / локальные изменения».
Git хранит файлы . Каждый коммит имеет полный и полный снимок каждого файла. Вы можете сравнить два коммита, что говорит Git сравнивать файлы в снимках. Извлекая, скажем, dir/file1
из снимка A и dir/file1
из снимка B, git diff
теперь может вычислить разницу между этими двумя файлами и сообщить набор инструкций, с помощью которых a/dir/file1
можетможет быть изменено на b/dir/file1
.
Подсчет этих инструкций дает вам --stat
версию этой разницы.
Команда git diff
не ограничивается просмотром только при двух коммитах: он также может сравнивать один коммит с вашим индексом, или один коммит с вашим рабочим деревом, или ваш индекс с вашим рабочим деревом. Так как git status
работает, запустив two git diff
s, вы можете получить то, что you хочет, запустив two git diff
s. Скажите первому, чтобы он сравнивал фиксацию HEAD
с индексом, как git status
указывает, что первый сравнивает HEAD
с индексом. Скажите вашему второму git diff
, чтобы сравнивать индекс с рабочим деревом, как git status
говорит второму разнице сравнивать индекс с рабочим деревом.