Получить все файлы, которые были изменены в ветки git

Есть ли способ увидеть, какие файлы были изменены в ветке?

Ответ 1

Альтернатива ответам @Marco Ponti и избежание проверки:

git diff --name-only <notMainDev> $(git merge-base <notMainDev> <mainDev>)

Если ваша конкретная оболочка не понимает конструкцию $(), вместо этого используйте обратные тики.

Ответ 2

Все, что вам нужно сделать, это следующее:

git checkout <notMainDev>
git diff --name-only <mainDev>

Это покажет вам только имена файлов, которые отличаются между двумя ветвями.

Ответ 3

изумленный это пока не сказано!

git diff master...branch

Поэтому см. изменения только на branch

Чтобы проверить использование текущей ветки

git diff master...

Благодаря jqr

Это короткая рука для

git diff $(git merge-base master branch) branch

поэтому база слияния (последнее общее согласование между ветвями) и кончик ветки

Также использование origin/master вместо простого мастера поможет в случае, если ваш локальный хозяин датирован

Ответ 4

Не могу поверить, что существует так много способов сделать это. Я использую whatchanged как ранее опубликованный, только со следующими аргументами:

git whatchanged --name-only --pretty="" origin..HEAD

Здесь перечислены имена файлов и только те, которые были изменены в текущей ветке.

Ответ 5

Мне очень понравился ответ @twalberg, но я не хотел набирать текущее имя ветки все время. Поэтому я использую это:

git diff --name-only $(git merge-base master HEAD)

Ответ 6

git whatchanged кажется хорошей альтернативой.

Ответ 7

Что делать, если это может быть так просто?

git changed

Если вы согласны с тем, что главная ветвь называется "master", и что вы создаете свои другие ветки с помощью мастера, вы можете добавить этот псевдоним в свой ~/.gitconfig файл, чтобы сделать это так:

cbranch = !"git branch | grep '*' | cut -f2 -d' '"
changed = !"git diff --name-only $(git cbranch) $(git merge-base $(git cbranch) master)"

Эти предположения будут работать для большинства людей в большинстве ситуаций, но вы должны знать, что делаете их.

Кроме того, вы должны использовать оболочку, которая поддерживает $(). Скорее всего, ваша оболочка поддерживает это.

Ответ 8

git diff --name-only master...branch-name

с которым мы хотим сравнить.

Ответ 9

git show --stat origin/branch_name

Это даст вам список файлов, которые были добавлены или изменены в этой ветке.

Ответ 10

Принятый ответ - git diff --name-only <notMainDev> $(git merge-base <notMainDev> <mainDev>) - очень близок, но я заметил, что он получил неправильный статус для удалений. Я добавил файл в ветку, и все же эта команда (используя --name-status) дала файлу, который я удалил, статус "A", и файлу, который я добавил, статус "D".

Вместо этого мне пришлось использовать эту команду:

git diff --name-only $(git merge-base <notMainDev> <mainDev>)

Ответ 11

Расширение того, что было @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

Ответ 12

Следующий командный файл основан на ответе 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)"

Ответ 13

Я использую 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