Показывает, какие файлы были изменены между двумя ревизиями
-
03-07-2019 - |
Вопрос
Я хочу объединить две ветви, которые были разделены на некоторое время, и хотел узнать, какие файлы были изменены.
Наткнулся на эту ссылку: 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
в официальная документация.
Другие советы
Попробуй
$ git diff --stat --color master..branchName
Это даст вам больше информации о каждом изменении, сохраняя при этом то же количество строк.
Вы также можете перевернуть ветви, чтобы получить еще более четкое представление о разнице, если бы вы объединили их другим способом:
$ git diff --stat --color branchName..master
Также имейте в виду, что 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
отделитесь и начните все сначала.
Если кто-то пытается сгенерировать файл diff из двух ветвей :
git diff master..otherbranch > myDiffFile.diff
Существует также метод, основанный на графическом интерфейсе.
Вы можете использовать гитк.
Беги:
$ gitk --all
Щелкните правой кнопкой мыши на фиксации ветки и выберите Отметьте этот коммит во всплывающем меню.
- Щелкните правой кнопкой мыши на фиксации другой ветви и выберите Отличить это -> отмеченный коммит или Разница с пометкой commit -> это.
Затем на правой нижней панели появится список измененных файлов, а на левой нижней панели - сведения о различиях.
Еще один вариант, использующий meld в данном случае:
git difftool -d master otherbranch
Это позволяет не только видеть различия между файлами, но и предоставляет простой способ указать на конкретный файл и щелкнуть по нему.
Обратите внимание, что git позволяет легко просто опробовать слияние и отказаться от любых проблем, если вам не нравится результат.Это может быть проще, чем заранее искать потенциальные проблемы.
И если вы ищете изменения только среди определенных файлов, то:
git diff branch1 branch2 -- myfile1.js myfile2.js
branch1 является необязательным, и ваша текущая ветка (ветка, в которой вы находитесь) будет учитываться по умолчанию, если branch1 не указан.например, g:
git diff master -- controller/index.js
При совместной работе или над несколькими функциями одновременно часто бывает, что восходящий поток или даже ваш мастер содержит работу, которая не включена в вашу ветку, и будет неправильно отображаться в базовых различиях.
Если ваш Восходящий поток, возможно, переместился, вы должны сделать это:
git fetch
git diff origin/master...
Простое использование git diff master может включать или не включать соответствующие изменения.
Если вы используете ИДЕЯ IntelliJ, вы также можете сравнить любую ветвь с вашей текущей рабочей ветвью.Видишь http://www.jetbrains.com/idea/webhelp/merging-deleting-and-comparing-branches.html#d288093e3827 для получения дополнительной информации.Это доступно в бесплатная версия также.
Допустим, есть две ветви
- A (Ветка, над которой вы работаете)
- B (Другая ветвь, с которой вы хотите сравнить)
Находясь в ветке А, вы можете ввести
git diff --color B
тогда это даст вам результат
Важным моментом в этом является
Текст, выделенный зеленым цветом, находится внутри, присутствует в ветке A
Текст, выделенный красным, присутствует в ветке B
Здесь есть много ответов, но я хотел добавить кое-что, что я обычно использую.ЕСЛИ вы находитесь в одной из ветвей, которые вы хотели бы сравнить, я обычно делаю одно из следующих действий.Ради этого ответа мы скажем, что мы находимся в нашей вторичной ветви.В зависимости от того, какой вид вам нужен в данный момент, будет зависеть, какой вы выберете, но в большинстве случаев я использую второй вариант из двух.Первый вариант может быть удобен, если вы пытаетесь вернуться к исходной копии - в любом случае, оба варианта выполнят свою работу!
Это позволит сравнить master с веткой, в которой мы находимся (которая является вторичной), и исходным кодом будут добавленные строки, а новый код будет считаться удаленными строками
git diff ..master
или
Это также позволит сравнить master с веткой, в которой мы находимся (которая является вторичной), и исходным кодом будут старые строки, а новым кодом будут новые строки
git diff master..
Если вам нравится графический интерфейс и вы используете Windows, вот простой способ.
- Скачать WinMerge
- Проверьте две ветви в разных папках
- Сравните папку за папкой, используя WinMerge.Вы также можете легко вносить изменения, если одна из ветвей является той, над которой вы работаете.
git diff revision_n revision_m
если revision_n
и revision_m
являются последовательными фиксациями, то он выводит то же самое, что и
git show revision_m
Для людей, которые ищут решение с графическим интерфейсом, Гит - Кола имеет очень приятный "просмотрщик различий в ветвях (Разница -> Ветви..).
Вы также можете использовать визуальная разница.
Например, если вы используете Исходное Дерево, вы можете просто выберите любые две фиксации в режиме просмотра журнала.
(Лично я в большинстве случаев предпочитаю использовать для этого графический интерфейс, и я публикую это для тех, кто, возможно, не знаком с опциями графического интерфейса.)
Вы также можете легко сравнить ветви для измененных файлов, используя, например Черепаший укус.Просто нажмите на Просмотр ссылок и выберите ветви, которые вы хотите сравнить.
Например, если вы сравните ваш филиал с мастер в результате вы получите список файлов, которые будут изменены в мастер если вы решите объединиться ваш-филиал в мастер.
Помните, что у вас будет другой результат, если вы сравните мастер с ваш-филиал и ваш-филиал с мастер.