Показывать, какие файлы изменились между двумя версиями

Я хочу объединить две ветки, которые были разделены на некоторое время и хотели узнать, какие файлы были изменены.

Перешел по этой ссылке: http://linux.yyz.us/git-howto.html, что было весьма полезно.

Инструменты для сравнения ветвей, с которыми я столкнулся, следующие:

  • git diff master..branch
  • git log master..branch
  • git shortlog master..branch

Интересно, есть ли что-то вроде "git status master..branch", чтобы видеть только те файлы, которые отличаются между двумя ветвями.

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

  • git diff master..branch | grep "^diff"

Интересно, есть ли что-то, что я пропустил...

Ответ 1

Чтобы сравнить текущую ветку с master веткой:

$ git diff --name-status master

Чтобы сравнить любые две ветки:

$ git diff --name-status firstbranch..yourBranchName

Читайте о git diff в официальной документации.

Ответ 2

Try

$ git diff --stat --color master..branchName

Это даст вам больше информации о каждом изменении, в то же время используя то же количество строк.

Вы также можете перевернуть ветки, чтобы получить еще более четкое представление о различии, если вы должны были слить другой путь:

$ git diff --stat --color branchName..master

Ответ 3

Также имейте в виду, что git имеет дешевое и легкое разветвление. Если я думаю, что слияние может быть проблематичным, я создаю ветвь для слияния. Поэтому, если master имеет изменения, которые я хочу объединить, а ba - это моя ветка, которая нуждается в коде от мастера, я могу сделать следующее:

git checkout ba
git checkout -b ba-merge
git merge master
.... review new code and fix conflicts....
git commit
git checkout ba
git merge ba-merge
git branch -d ba-merge
git merge master

Конечный результат заключается в том, что мне нужно попробовать слияние на откидной ветке, прежде чем прикручивать свою ветку. Если я соберусь самостоятельно, я могу просто удалить ветвь ba-merge и начать все заново.

Ответ 4

Если кто-то пытается создать файл diff из двух ветвей:

git diff master..otherbranch > myDiffFile.diff

Ответ 5

Существует также метод на основе графического интерфейса.

Вы можете использовать gitk.

  • Run:

    $ gitk --all
    
  • Щелкните правой кнопкой мыши фиксацию ветки и выберите Отметить эту фиксацию во всплывающем меню.

  • Щелкните правой кнопкой мыши на фиксации другой ветки и выберите Diff this → отмеченный фиксатор или Diff, отмеченный commit → this.

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

Ответ 6

Еще один вариант, используя meld в этом случае:

git difftool -d master otherbranch

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

Ответ 7

Обратите внимание, что git позволяет просто попробовать слияние и вернуться от любых проблем, если вам не нравится результат. Это может быть проще, чем поиск потенциальных проблем заранее.

Ответ 8

И если вы ищете изменения только для определенных файлов, то:

git diff branch1 branch2 -- myfile1.js myfile2.js

branch1 не является обязательным, и ваша текущая ветка (ветка, в которой вы находитесь) будет рассмотрена по умолчанию, если branch1 не предоставлен. например:

git diff master -- controller/index.js

Ответ 9

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

Если ваш Upstream, возможно, переместился, вы должны сделать это:

git fetch
git diff origin/master...

Просто используя git мастер diff может включать или не включать соответствующие изменения.

Ответ 11

Есть две ветки, скажем,

  • A (Филиал, над которым вы работаете)
  • B (еще одна ветка, с которой вы хотите сравнить)

Находясь в ветке А вы можете набрать

git diff --color B

тогда это даст вам вывод

enter image description here

Важный момент по этому поводу

  1. Текст внутри зеленого цвета присутствует внутри ветки A

  2. Текст красного цвета присутствует в ветки B

Ответ 12

Здесь много ответов, но я хотел добавить что-то, что я обычно использую. ЕСЛИ вы находитесь в одной из ветвей, которые вы хотели бы сравнить, я обычно делаю одно из следующего. Ради этого ответа мы скажем, что мы находимся в нашей вторичной отрасли. В зависимости от того, какой вид вам нужен в то время, будет зависеть от того, что вы выберете, но большую часть времени я использую второй вариант этих двух. Первый вариант может быть полезен, если вы пытаетесь вернуться к исходной копии - в любом случае, оба выполняются!

Это будет сравнивать мастер с веткой, в которой мы находимся (которая является вторичной), а исходный код будет добавленными строками, а новый код будет считаться удаляемыми строками

git diff ..master

ИЛИ

Это также сравнит мастер с веткой, в которой мы находимся (что является вторичной), а исходным кодом будут старые строки, а новым кодом будут новые строки

git diff master..

Ответ 13

Просто добавьте дополнительную информацию в ответ JasonSmith:

Я проверил свою ветку с помощью этой команды:

$ git clone -b branchName http://repository_url

Однако предлагаемая команда git diff не срабатывала:

$ git diff --name-status master..branchName
fatal: ambiguous argument 'master..branchName': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

Я исследовал ветки, следующие за этой веткой:

$ git branch
* branchName
$ git branch -a
* branchName
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
  remotes/origin/branchName

У меня не было ветки master локально, поэтому я сравнил с remotes/origin/master:

$ git diff --name-status remotes/origin/master..push
. . .
. . .
. . .

Дополнительная информация о remotes/origin/master в этой теме.

Ответ 14

git diff revision_n revision_m

если revision_n и revision_m являются последовательными коммитами, то он выводит так же, как git show revision_m

Ответ 15

Для людей, которые ищут решение с графическим интерфейсом, в Git Cola есть очень приятный "Branch Diff Viewer (Diff → Branches..)".

Ответ 16

Вы также можете использовать визуальную разницу.

Например, если вы используете Sourcetree, вы можете просто выбрать любые две фиксации в представлении журнала.

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

Ответ 17

Если вам нравится графический интерфейс и вы используете Windows, вот простой способ.

  1. Скачать WinMerge
  2. Проверьте две ветки в разных папках
  3. Выполните сравнение папок с папками с помощью WinMerge. Вы также можете легко внести изменения, если вы работаете с одной из веток.

Ответ 18

Вы также можете легко сравнить ветки для измененных файлов, используя, например, TortoiseGit. Просто нажмите Обзор ссылок и выберите ветки, которые вы хотите сравнить.

Например, если вы сравниваете свою ветку с мастером, вы получите в виде списка файлов, которые будут изменены в master, если вы решите объединить свою ветвь в master.

Помните, что у вас будет другой результат, если вы сравните мастер с вашей веткой и вашей веткой с мастером.