Показывает, какие файлы были изменены между двумя ревизиями - PullRequest
1958 голосов
/ 05 мая 2009

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

Наткнулся на эту ссылку: 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"

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

Ответы [ 16 ]

2404 голосов
/ 05 мая 2009

Для сравнения текущей ветви с master веткой:

$ git diff --name-status master

Для сравнения любых двух веток:

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

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

379 голосов
/ 09 февраля 2011

Попробуйте

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

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

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

$ git diff --stat --color branchName..master
151 голосов
/ 11 октября 2012

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

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 и начать все сначала.

53 голосов
/ 03 апреля 2013

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

git diff master..otherbranch > myDiffFile.diff
35 голосов
/ 14 июня 2013

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

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

  1. Пробег:

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

  3. Щелкните правой кнопкой мыши на коммите другой ветви и выберите Различить это -> отмеченный коммит или Различить отмеченный коммит -> этот

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

32 голосов
/ 24 апреля 2014

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

git difftool -d master otherbranch

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

29 голосов
/ 05 мая 2009

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

15 голосов
/ 16 мая 2016

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

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

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

git diff master -- controller/index.js
14 голосов
/ 24 марта 2015

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

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

git fetch
git diff origin/master...

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

9 голосов
/ 06 июня 2013

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

...