Ответ 1
Альтернатива ответам @Marco Ponti и избежание проверки:
git diff --name-only <notMainDev> $(git merge-base <notMainDev> <mainDev>)
Если ваша конкретная оболочка не понимает конструкцию $(), вместо этого используйте обратные тики.
Есть ли способ увидеть, какие файлы были изменены в ветке?
Альтернатива ответам @Marco Ponti и избежание проверки:
git diff --name-only <notMainDev> $(git merge-base <notMainDev> <mainDev>)
Если ваша конкретная оболочка не понимает конструкцию $(), вместо этого используйте обратные тики.
Все, что вам нужно сделать, это следующее:
git checkout <notMainDev>
git diff --name-only <mainDev>
Это покажет вам только имена файлов, которые отличаются между двумя ветвями.
изумленный это пока не сказано!
git diff master...branch
Поэтому см. изменения только на branch
Чтобы проверить использование текущей ветки
git diff master...
Благодаря jqr
Это короткая рука для
git diff $(git merge-base master branch) branch
поэтому база слияния (последнее общее согласование между ветвями) и кончик ветки
Также использование origin/master вместо простого мастера поможет в случае, если ваш локальный хозяин датирован
Не могу поверить, что существует так много способов сделать это. Я использую whatchanged как ранее опубликованный, только со следующими аргументами:
git whatchanged --name-only --pretty="" origin..HEAD
Здесь перечислены имена файлов и только те, которые были изменены в текущей ветке.
Мне очень понравился ответ @twalberg, но я не хотел набирать текущее имя ветки все время. Поэтому я использую это:
git diff --name-only $(git merge-base master HEAD)
git whatchanged
кажется хорошей альтернативой.
Что делать, если это может быть так просто?
git changed
Если вы согласны с тем, что главная ветвь называется "master", и что вы создаете свои другие ветки с помощью мастера, вы можете добавить этот псевдоним в свой ~/.gitconfig
файл, чтобы сделать это так:
cbranch = !"git branch | grep '*' | cut -f2 -d' '"
changed = !"git diff --name-only $(git cbranch) $(git merge-base $(git cbranch) master)"
Эти предположения будут работать для большинства людей в большинстве ситуаций, но вы должны знать, что делаете их.
Кроме того, вы должны использовать оболочку, которая поддерживает $()
. Скорее всего, ваша оболочка поддерживает это.
git diff --name-only master...branch-name
с которым мы хотим сравнить.
git show --stat origin/branch_name
Это даст вам список файлов, которые были добавлены или изменены в этой ветке.
Принятый ответ - git diff --name-only <notMainDev> $(git merge-base <notMainDev> <mainDev>)
- очень близок, но я заметил, что он получил неправильный статус для удалений. Я добавил файл в ветку, и все же эта команда (используя --name-status
) дала файлу, который я удалил, статус "A", и файлу, который я добавил, статус "D".
Вместо этого мне пришлось использовать эту команду:
git diff --name-only $(git merge-base <notMainDev> <mainDev>)
Расширение того, что было @twalberg и @iconoclast, если вы используете CMD по какой-либо причине, вы можете использовать:
FOR /F "usebackq" %x IN (`"git branch | grep '*' | cut -f2 -d' '"`) DO FOR /F "usebackq" %y IN (`"git merge-base %x master"`) DO git diff --name-only %x %y
Следующий командный файл основан на ответе twalberg, но будет работать в Windows:
@ECHO OFF
C: :: <== OR USE A DIFFERENT DRIVE
CD \path\to\where\git\files\are :: <== CHANGE TO THE ACTUAL PATH
SET /p b="Enter full path of an ALREADY MERGED branch to compare with origin/master: "
bash --login -i -c "git diff --name-only %b% $(git merge-base %b1% origin/drop2/master)"
PAUSE
Вышеприведенное предполагает, что главная ветвь - начало/мастер и что git bash был включен, когда был установлен git (и его местоположение находится в среде пути). Мне действительно нужно было показать фактические различия с помощью настроенного инструмента diff (kdiff3), поэтому была заменена следующая команда bash выше:
bash --login -i -c "git difftool --dir-diff %b% $(git merge-base %b1% origin/drop2/master)"
Я использую grep, поэтому я получаю только строки с diff - git, которые являются файлами:
git diff branchA branchB | grep 'diff --git'
// OUTPUTS ALL FILES WITH CHANGES, SIMPLE HA :)
diff --git a/package-lock.json b/package-lock.json