Питання Показано, які файли змінено між двома переглядами


Я хочу об'єднати дві гілки, які були розлучені на деякий час і хотіли дізнатись, які файли були змінені.

Перейшли по цій посиланням: http://linux.yyz.us/git-howto.html що було досить корисним.

Інструменти для порівняння гілок, якими я зіштовхнувся, є:

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

Було цікаво, чи є щось на кшталт "git status master..franch", щоб побачити тільки ті файли, які відрізняються між цими двома гілками.

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

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

Було цікаво, чи є щось, про що я пропустив ...


1789
2018-05-05 00:47


походження


Як багато хто вважає, що заголовок цього питання вводить в оману? Фактично, це знаходження різниці файлів між двома гілками. Те, що я приїхав сюди шукав, було, як побачити відмінності файлів між двома переглядами в тій же галузі. Чи я єдиний? - Sandeepan Nath
@ SandeepanNath: з гітарою немає ніякої різниці. Ви завжди вказуєте на окремі зобов'язання. - Samuel O'Malley
@ SamuelO'Malley Я новачок в програмі git і розглядаю загадкову стратегію розгалуження, в якій всі гілки, нарешті, об'єднані з майстром, і в кінцевому підсумку майстер розгорнуто. Тепер, розглядаючи подію розгортання, де виробництво вже є майстром, але за версією (за однією версією, якщо останнє розгортання відбулося після останнього об'єднання майстра), я хотів би побачити відмінності між цими двома переглядами, щоб з'ясувати, що було б розгорнуто. Я б не хотів подивитися на галузь, яка була об'єднана останнім часом. Виправте мене, якщо я помиляюсь. - Sandeepan Nath
@SandeepanNath: замість того, щоб використовувати назви гілок, ви можете взяти відповіді наведені нижче і просто вказати ідентифікатори філій. Або навіть називайте копії своїми іменами тегів, якщо ви створюєте теги під час розгортання. - Samuel O'Malley
@SandeepanNath Ви не можете порівняти 2 філії, ви повинні вказати ревізію. Таким чином, порівнюючи 2 філії, порівнюється 2 ревізії. - Bastien Vandamme


Відповіді:


Щоб порівняти поточну гілку з master

$ git diff --name-status master

Щоб порівняти будь-яку пару гілок

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

Це має робити те, що вам потрібно, якщо я вас правильно зрозумів.


2187
2018-05-05 01:04



+1, іноді - тільки для імені - це зручно - Pat Notz
@ user446936 - ви можете побачити, що означають букви на сторінці git status man @ kernel.org/pub/software/scm/git/docs/git-status.html - зокрема, M == модифікований, D == видалено - James Manning
git diff master..blabla -- дає мені fatal: bad revision 'master..blabla'. git diff master blabla -- дає мені fatal: bad revision 'master'. Будь-яка ідея, що не так? UPDATE: у цього репо немає гілки під ім'ям master, doh! - akostadinov
git diff --name-status your_branch...master виводить зміни, які відбулися на майстері, оскільки ваша_гарту була створена з нього - Radu
Ось посилання на інші параметри при використанні git diff. git-scm.com/docs/git-diff - akvallejos


Спробуй

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

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

Ви також можете перевернути гілки, щоб отримати ще більш чітке уявлення про різницю, якщо б ви зблизили інший шлях:

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

354
2018-02-09 19:38



Якщо у вас є (настійно рекомендується, imho), колір GIT ввімкнено (config --global color.ui true), ви можете пропустити --color. (У мене є lks - лінивий синдром клавіатури.) - Art Swri
Я з тобою на колір! BTW я мав намір сказати git config --global color.ui true - бути повним. - Art Swri
Не працює, кидає помилки: fatal: ambiguous argument 'master..branchName': unknown revision or path not in the working tree. - Tomáš Zato
@ TomášZato вибачте, але вам потрібно поміняти назву branchName з назвою вашої гілки. - Gerry


Також майте на увазі, що 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 гілку і почати знову.


145
2017-10-11 01:22



Чудово. Я так і не думав про розгалуження. Я думаю, що це слід розглядати як частину "найкращих практик" при злитті. - egelev
Коли ви об'єднуєте ба-магр назад у ба, чи немає потенціалу для того, щоб знову виправити конфлікти? - Josef.B
Ні, ви вже вирішили їх. - Eric Anderson
@ Ерік Андерсон. Правильно, це графік. SVN палицями, як камедь під шкільною стільницею. Дякую. - Josef.B


Якщо хтось намагається згенерувати файл diff з двох гілок:

git diff master..otherbranch > myDiffFile.diff

45
2018-04-03 14:01



Це особливо зручно, особливо з великими гілками, що мають багато відмінностей. - vandsh


Зауважте, що gіt полегшує спробу злиття та відставання від будь-яких проблем, якщо вам не подобається результат. Це може бути простіше, ніж шукати потенційні проблеми заздалегідь.


30
2018-05-05 00:59



Давид, це хороший момент, хоча було б приємно просто знати, що відбувається до рук ... - johannix


Також існує графічний інтерфейс.

Ви можете використовувати гітк.

  1. Виконати:

    $ gitk --all
    
  2. Клацніть правою кнопкою миші на фіксації гілки і виберіть Позначте це зобов'язання у спливаючому меню.

  3. Клацніть правою кнопкою миші на фіксації іншої гілки і виберіть Відрізнити це -> позначено фікс або Відрізняються позначкою commit -> this.

Потім з'явиться список змінених файлів у правій нижній панелі та деталі порівняння на лівій нижній панелі.


29
2018-06-14 06:01



@Orwellophile Я завантажую a відео щоб показати, як це зробити. Я сподіваюсь, це допоможе вам. - Shawn Xie
Вау, саме для мене, я почуваюсь особливим. Я наклав закладку на delicious.com для довідкової та додаткової google-foo. - Orwellophile


Ще один варіант, використовуючи meld в цьому випадку:

git difftool -d master otherbranch

Це дозволяє не тільки бачити різницю між файлами, але також забезпечує простий спосіб вказування та натискання певного файлу.


26
2018-04-24 13:23



Може, хочете встановити як стандартний difftool: git config --global diff.tool meld - bwv549
Це моя улюблена, тому що вона буде використовувати будь-який difftool, який ви налаштовуєте. - Josiah
Не підтримується в OSX. :-( - Mike S.
@ MikeS будь ласка, перевірте цю відповідь stackoverflow.com/a/12815806/151918 він містить інструкції для OSX. Це працює для мене, принаймні, сподіваюся, це допоможе. - rsilva4


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

Якщо ваша Upstream може переїхати, вам слід зробити це:

git fetch
git diff origin/master...

Просто за допомогою git diff master може містити або не включати відповідні зміни.


14
2018-03-24 03:21





І якщо ви шукаєте зміни лише у деяких файлах, то:

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

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

git diff master -- controller/index.js

10
2018-05-16 13:13





Якщо ви використовуєте IntelliJ IDEA, ви також можете порівняти будь-яку галузь із поточною робочою галуззю. Побачити http://www.jetbrains.com/idea/webhelp/merging-deleting-and-comparing-branches.html#d288093e3827 для отримання додаткової інформації. Це доступно в безкоштовне видання так само.


9
2018-06-06 07:17





Можна сказати дві гілки

  • A (філія, на якій ви працюєте)
  • B (інша гілка, з якою ви хочете порівняти)

Будучи у галузі A, ви можете ввести

git diff --color B

то це дасть вам вихід з

enter image description here

Важливий момент про це є

  1. Текст у зеленому кольорі знаходиться всередині філії А

  2. Текст червоним є у відділення В.


4
2017-10-04 11:56