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

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

Перешел по этой ссылке: 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"

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

1645
задан johannix 05 мая '09 в 3:47
источник поделиться
14 ответов

Try

$ git diff --name-status master..branchName

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

2010
ответ дан JasonSmith 05 мая '09 в 4:04
источник поделиться

Try

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

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

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

$ git diff --stat --color branchName..master
335
ответ дан Gerry 09 февр. '11 в 22:38
источник поделиться

Также имейте в виду, что 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 и начать все заново.

136
ответ дан Eric Anderson 11 окт. '12 в 4:22
источник поделиться

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

git diff master..otherbranch > myDiffFile.diff
36
ответ дан Paulino III 03 апр. '13 в 17:01
источник поделиться

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

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

  • Run:

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

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

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

28
ответ дан Yantao Xie 14 июня '13 в 9:01
источник поделиться

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

28
ответ дан David Plumpton 05 мая '09 в 3:59
источник поделиться

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

git difftool -d master otherbranch

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

24
ответ дан rsilva4 24 апр. '14 в 16:23
источник поделиться

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

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

git fetch
git diff origin/master...

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

11
ответ дан Alex Brown 24 марта '15 в 6:21
источник поделиться

Если вы используете IntelliJ IDEA, вы также можете сравнить любую ветку с вашей текущей рабочей ветвью. Подробнее см. http://www.jetbrains.com/idea/webhelp/merging-deleting-and-comparing-branches.html#d288093e3827. Это доступно в бесплатной версии.

7
ответ дан Wim Deblauwe 06 июня '13 в 10:17
источник поделиться

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

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

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

git diff master -- controller/index.js
7
ответ дан Mannu 16 мая '16 в 16: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 в этой теме.

2
ответ дан just a random guy 02 июня '16 в 16:40
источник поделиться

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

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

git diff ..master

ИЛИ

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

git diff master..
1
ответ дан Jase 01 июня '17 в 1:00
источник поделиться

Есть две ветки:

  • A (ветвь, на которой вы работаете)
  • B (Другая ветка, с которой вы хотите сравнить)

Находясь в ветки А, вы можете ввести

git diff --color B

то это даст вам результат

введите описание изображения здесь

Важным моментом здесь является

  • Текст в зеленом цвете присутствует внутри ветки A

  • Текст в красном присутствует в ветке B

0
ответ дан selftaught91 04 окт. '16 в 14:56
источник поделиться

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

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

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

-1
ответ дан Piotr 18 окт. '17 в 12:53
источник поделиться

Другие вопросы по меткам