Ответ 1
Чтобы сравнить текущую ветку с master
веткой:
$ git diff --name-status master
Чтобы сравнить любые две ветки:
$ git diff --name-status firstbranch..yourBranchName
Читайте о git diff
в официальной документации.
Я хочу объединить две ветки, которые были разделены на некоторое время и хотели узнать, какие файлы были изменены.
Перешел по этой ссылке: 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"
Интересно, есть ли что-то, что я пропустил...
Чтобы сравнить текущую ветку с master
веткой:
$ git diff --name-status master
Чтобы сравнить любые две ветки:
$ git diff --name-status firstbranch..yourBranchName
Читайте о git diff
в официальной документации.
Try
$ git diff --stat --color master..branchName
Это даст вам больше информации о каждом изменении, в то же время используя то же количество строк.
Вы также можете перевернуть ветки, чтобы получить еще более четкое представление о различии, если вы должны были слить другой путь:
$ git diff --stat --color branchName..master
Также имейте в виду, что 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
и начать все заново.
Если кто-то пытается создать файл diff из двух ветвей:
git diff master..otherbranch > myDiffFile.diff
Существует также метод на основе графического интерфейса.
Вы можете использовать gitk.
Run:
$ gitk --all
Щелкните правой кнопкой мыши фиксацию ветки и выберите Отметить эту фиксацию во всплывающем меню.
Затем в правой нижней панели появится список измененных файлов, а в левой нижней панели будет отображаться информация.
Еще один вариант, используя meld в этом случае:
git difftool -d master otherbranch
Это позволяет не только видеть различия между файлами, но также обеспечивает простой способ указать и щелкнуть по определенному файлу.
Обратите внимание, что git позволяет просто попробовать слияние и вернуться от любых проблем, если вам не нравится результат. Это может быть проще, чем поиск потенциальных проблем заранее.
И если вы ищете изменения только для определенных файлов, то:
git diff branch1 branch2 -- myfile1.js myfile2.js
branch1 не является обязательным, и ваша текущая ветка (ветка, в которой вы находитесь) будет рассмотрена по умолчанию, если branch1 не предоставлен. например:
git diff master -- controller/index.js
При совместной работе или при одновременном использовании нескольких функций обычно бывает, что восходящий или даже ваш мастер содержит работу, которая не включена в вашу ветку, и будет неправильно отображаться в базовых различиях.
Если ваш Upstream, возможно, переместился, вы должны сделать это:
git fetch
git diff origin/master...
Просто используя git мастер diff может включать или не включать соответствующие изменения.
Если вы используете IntelliJ IDEA, вы также можете сравнить любую ветку с вашей текущей рабочей ветвью. Подробнее см. http://www.jetbrains.com/idea/webhelp/merging-deleting-and-comparing-branches.html#d288093e3827. Это доступно в бесплатной версии.
Есть две ветки, скажем,
Находясь в ветке А вы можете набрать
git diff --color B
тогда это даст вам вывод
Важный момент по этому поводу
Текст внутри зеленого цвета присутствует внутри ветки A
Текст красного цвета присутствует в ветки B
Здесь много ответов, но я хотел добавить что-то, что я обычно использую. ЕСЛИ вы находитесь в одной из ветвей, которые вы хотели бы сравнить, я обычно делаю одно из следующего. Ради этого ответа мы скажем, что мы находимся в нашей вторичной отрасли. В зависимости от того, какой вид вам нужен в то время, будет зависеть от того, что вы выберете, но большую часть времени я использую второй вариант этих двух. Первый вариант может быть полезен, если вы пытаетесь вернуться к исходной копии - в любом случае, оба выполняются!
Это будет сравнивать мастер с веткой, в которой мы находимся (которая является вторичной), а исходный код будет добавленными строками, а новый код будет считаться удаляемыми строками
git diff ..master
ИЛИ
Это также сравнит мастер с веткой, в которой мы находимся (что является вторичной), а исходным кодом будут старые строки, а новым кодом будут новые строки
git diff master..
Просто добавьте дополнительную информацию в ответ 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
в этой теме.
git diff revision_n revision_m
если revision_n
и revision_m
являются последовательными коммитами, то он выводит так же, как git show revision_m
Для людей, которые ищут решение с графическим интерфейсом, в Git Cola есть очень приятный "Branch Diff Viewer (Diff → Branches..)".
Вы также можете использовать визуальную разницу.
Например, если вы используете Sourcetree, вы можете просто выбрать любые две фиксации в представлении журнала.
(Я лично предпочитаю использовать GUI в большинстве случаев для этого, и я публикую это для тех, кто может быть не знаком с параметрами GUI.)
Если вам нравится графический интерфейс и вы используете Windows, вот простой способ.
Вы также можете легко сравнить ветки для измененных файлов, используя, например, TortoiseGit. Просто нажмите Обзор ссылок и выберите ветки, которые вы хотите сравнить.
Например, если вы сравниваете свою ветку с мастером, вы получите в виде списка файлов, которые будут изменены в master, если вы решите объединить свою ветвь в master.
Помните, что у вас будет другой результат, если вы сравните мастер с вашей веткой и вашей веткой с мастером.