Відповіді:
Це залежить від того, використовуєте ви log
команду чи diff
команду. У log
випадку, це в man git-rev-parse
документації:
Щоб виключити доступ, який можна отримати з комісії, використовується префікс ^ нотація. Наприклад, ^ r1 r2 означає, що здійснює доступ з r2, але виключає ті, досяжні з r1.
Ця операція набору з’являється настільки часто, що для неї є скорочення. Якщо у вас є два комітети r1 і r2 (названі відповідно до синтаксису, поясненого в СПЕЦІФІКУВАННІ РЕЦІЗІЙ вище), ви можете попросити комітети, доступні з r2, за винятком тих, які є доступними з r1, за допомогою "^ r1 r2", і це може бути записано як "r1..r2".
Подібне позначення "r1 ... r2" називається симетричною різницею r1 і r2 і визначається як "r1 r2 - not $ (git merge-base --all r1 r2)". Це набір комітетів, які доступні або з одного з r1, або r2, але не з обох.
Це в основному означає, що ви отримаєте всі коміти, які знаходяться в будь-якій з двох гілок, але не в обох.
У diff
випадку, це в man git-diff
документації:
git diff [--options] <commit>...<commit> [--] [<path>...] This form is to view the changes on the branch containing and up to the second <commit>, starting at a common ancestor of both <commit>. "git diff A...B" is equivalent to "git diff $(git-merge-base A B) B". You can omit any one of <commit>, which has the same effect as using HEAD instead.
Що трохи нечітко. В основному це означає, що він показує лише відмінності в цій гілці порівняно з іншою гілкою: вона шукає останню спільну команду з першим комітетом, який ви їй дали, а потім відрізняє другий комітет від цього. Це простий спосіб зрозуміти, які зміни вносяться в цій галузі, порівняно з цією галуззю, не помічаючи зміни лише у цій галузі.
The ..
Трохи простіше: У git-diff
разі, це те ж саме , як git diff A B
і просто диференціали А проти В. В log
разі, він показує всі коммітов , які знаходяться в B , але не в А.
..
та ...
точно поміняється на журнал і різняться: чи log A..B
є зміни від бази злиття до B, що це diff A...B
робить
git diff
.
A...B
== A..B + B..A
?
git log
цього абсолютно так
Коли ви використовуєте діапазони фіксування, як ..
і ...
з git log
, різниця між ними полягає в тому, що для гілок A і B,
git log A..B
покаже вам все коммітов , що B має , що А не має , в той час як
git log A...B
покаже вам і ті зобов’язання, які має A, і B, і B, і B, які A не мають, або іншими словами, він відфільтрує всі зобов’язання, які поділяють і A, і B, таким чином показуючи лише ті зобов'язання, які вони не поділяють .
Ось наочне зображення git log A..B
. Коміти, які містить гілка B, які не існують в A, - це те, що повертається діапазоном фіксації, і виділяється червоним кольором на діаграмі Венна, і обводиться синім кольором у дереві комірок:
Це діаграми для git log A...B
. Зауважте, що коміти, якими поділяються обидві гілки, не повертаються командою:
...
більш кориснимВи можете зробити діапазон трійчастої фіксації ...
більш корисним у команді журналу, скориставшись --left-right
опцією, щоб показати, які коміти належать до тієї гілки:
$ git log --oneline --decorate --left-right --graph master...origin/master
< 1794bee (HEAD, master) Derp some more
> 6e6ce69 (origin/master, origin/HEAD) Add hello.txt
У наведеному вище висновку ви побачите, до яких належать master
префікси <
, а до origin/master
них належать префікси >
.
Колись я можу додати своє власне пояснення того, як працюють діапазони фіксації git diff
, але наразі ви можете перевірити, які відмінності між подвійною крапкою ".." і потрійною точкою "..." в Git diff commit діапазони? .