Чи є спосіб побачити, які файли змінилися у гілці?
Чи є спосіб побачити, які файли змінилися у гілці?
Відповіді:
Альтернатива відповіді від @Marco Ponti та уникнення оформлення замовлення:
git diff --name-only <notMainDev> $(git merge-base <notMainDev> <mainDev>)
Якщо ваша конкретна оболонка не розуміє конструкцію $ (), використовуйте замість цього зворотні клітинки.
git diff --name-only <some-other-branch>
покаже, які файли відрізняються між вашою поточною гілкою та <some-other-branch>
. Отже, це по суті та сама команда, але зауважте, що ви можете використовувати це для пошуку файлів, які відрізняються між будь-якими двома гілками, навіть якщо вони не пов'язані віддалено. Чи корисне це порівняння чи ні, залежить від топології ваших гілок ... Крім того, зауважте, що <some-other-branch>
насправді може бути взагалі будь-яка комісія або що-небудь, що відповідає одному (теги тощо).
<notMainDev>
і <MY_CURRENT_CO_BRANCH>
останнім часом мав спільного предка, і порівняти <notMainDev>
з цим предком. Вам потрібно буде вказати своє поточне ім’я філії, хоча, як git merge-base
очікується, два аргументи - принаймні в поточній версії немає ярлика.
git branch | grep '\*' | awk '{print $2}'
яка отримає фіксацію для гілки між <notMainDev> і моєю поточною гілкою. Потім я можу зробити мерзотник дифф --name тільки <notMainDev> $ (мерзотник злиття бази <notMainDev> git branch | grep '\*' | awk '{print $2}'
)
Все, що вам потрібно зробити, це:
git checkout <notMainDev>
git diff --name-only <mainDev>
Це покаже вам лише імена файлів, які відрізняються між двома гілками.
<mainDev>
оскільки гілки розбіглися, хоча. Ви можете git diff --name-only <sha-of-branch-point>
замість цього використати або побачити альтернативну відповідь, яку я опублікував, що дозволяє уникнути оформлення каси.
notMainDev
це буде в курсі основних завдань mainDev ... Мені зазвичай здається корисним бачити ці відмінності.
<sha-of-branch-point>
зgit rev-parse <branch-name>
вражений цього не було сказано досі!
git diff master...branch
Тому дивіться зміни лише на branch
Щоб перевірити поточне використання філії
git diff master...
Завдяки jqr
Це коротка рука для
git diff $(git merge-base master branch) branch
тому основа злиття (найновіша спільна комісія між гілками) та вістря гілки
Також використання origin / master замість просто master допоможе у випадку, якщо ваш місцевий майстер датується
git diff --name-only master..
якщо ви просто хочете назвати файли, які відрізняються між двома гілками.
Я не можу повірити, що існує так багато способів зробити це. Я використовую те, що змінилося, як хтось публікував раніше, лише з такими аргументами:
git whatchanged --name-only --pretty="" origin..HEAD
Тут просто перелічені імена файлів, і лише ті, що змінилися на поточній гілці.
Мені дуже сподобалась відповідь @ twalberg, але мені не хотілося весь час вводити поточну назву гілки. Тому я використовую це:
git diff --name-only $(git merge-base master HEAD)
git diff master... --name-only
коли бігав по цільовій гілці і отримував той самий результат. Чи можете ви бути настільки люб'язними, щоб надати будь-який відгук про те, що між вашою відповіддю та командою, яку я надав, добре проти поганої?
git diff master.. --name-only
(зауважте, що всього 2 точки замість 3). Щоб зрозуміти, що означають точки, дивіться цю відповідь
git diff --name-only master...branch-name
з яким ми хочемо порівняти.
Що робити, якщо це може бути так просто?
git changed
Якщо ви готові припустити, що головна гілка називається "master", і що ви створюєте інші гілки від master, ви можете додати цей псевдонім у свій ~/.gitconfig
файл, щоб зробити це так просто:
cbranch = !"git branch | grep '*' | cut -f2 -d' '"
changed = !"git diff --name-only $(git cbranch) $(git merge-base $(git cbranch) master)"
Ці припущення працюватимуть для більшості людей у більшості ситуацій, але ви повинні знати, що ви їх робите.
Також потрібно використовувати оболонку, яка підтримує $()
. Це дуже ймовірно, що ваша оболонка підтримує це .
git show --stat origin/branch_name
Це дасть вам список файлів, які були додані чи змінені у цій гілці.
Чомусь ніхто не згадував git-tree
. див https://stackoverflow.com/a/424142/1657819
git-tree
є кращим, оскільки це сантехнічна команда; мав бути програмним (і, імовірно, швидшим)
(якщо базова гілка є master
)
git diff-tree --no-commit-id --name-only -r master..branch-name
Однак це покаже всі файли, на які вплинуло відділення, якщо ви хочете бачити лише явно змінені файли, ви можете використовувати --diff-filter
:
git diff-tree --no-commit-id --name-only -r master..branch-name --diff-filter=M
Також можна використовувати --name-status
замість того, --name-only
щоб побачити статус файлів ( A
/ M
/ D
тощо)
rubocop --fail-level error $(git diff-tree --no-commit-id --name-only -r origin/master..HEAD --diff-filter=M)
Прийнята відповідь - git diff --name-only <notMainDev> $(git merge-base <notMainDev> <mainDev>)
- дуже близька, але я помітив, що вона отримала неправильний статус для видалення. Я додав файл у гілці, і все ж ця команда (використовуючи --name-status
) надала файлу я видалив статус "А", а файл я додав статус "D".
Мені довелося скористатися цією командою:
git diff --name-only $(git merge-base <notMainDev> <mainDev>)
Наступний пакетний файл заснований на відповіді Twalberg, але він буде працювати в Windows:
@ECHO OFF
C: :: <== OR USE A DIFFERENT DRIVE
CD \path\to\where\git\files\are :: <== CHANGE TO THE ACTUAL PATH
SET /p b="Enter full path of an ALREADY MERGED branch to compare with origin/master: "
bash --login -i -c "git diff --name-only %b% $(git merge-base %b1% origin/drop2/master)"
PAUSE
Вищенаведене передбачає, що головна гілка є початком / головним і що git bash був включений під час встановлення Git (і його розташування знаходиться в середовищі шляху). Мені фактично потрібно було показати фактичні відмінності за допомогою налаштованого інструменту diff (kdiff3), який замінив наступну команду bash вище:
bash --login -i -c "git difftool --dir-diff %b% $(git merge-base %b1% origin/drop2/master)"