Есть ли способ увидеть, какие файлы были изменены в ветке?
Получить все файлы, которые были изменены в ветки 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