Оскільки я вже створив ці зображення, я подумав, що варто застосувати їх в іншій відповіді, хоча опис різниці між ..
(крапка-крапка) та ...
(крапка-крапка) по суті такий же, як у відповіді Маноільдса .
Команда git diff
зазвичай¹ показує лише різницю станів дерева між рівно двома точками на графіку фіксації. В ..
і ...
умовних позначеннях в git diff
мають таке значення:
Іншими словами, git diff foo..bar
точно такий же, як git diff foo bar
; обидва покажуть вам різницю між кінчиками двох гілок foo
та bar
. З іншого боку, git diff foo...bar
покаже вам різницю між "базою злиття" двох гілок і верхівкою bar
. "База злиття", як правило, є останньою спільною дією між цими двома гілками, тому ця команда покаже вам зміни, які bar
була внесена вашою роботою , ігноруючи все, що було зроблено foo
в середній час.
Це все, що потрібно знати про позначення ..
та ...
позначення в git diff
. Однак ...
... загальний джерело плутанини тут є те , що ..
і ...
означає , тонко різні речі , коли використовується в команді , таких як git log
, що очікує набір коммітов як один або більше аргументів. (Ці команди в кінцевому підсумку використовуються git rev-list
для розбору списку комітетів з їх аргументів.)
Значення ..
і ...
для git log
можна зобразити графічно, як показано нижче:
Отже, git rev-list foo..bar
показує вам все на гілці, bar
що також не є на гілці foo
. З іншого боку, git rev-list foo...bar
показує вам усі зобов’язання, які є в обох foo
або bar
, але не в обох . Третя діаграма просто показує, що якщо ви перерахуєте дві гілки, ви отримаєте коміти, які є в одній або обох.
Ну, я вважаю, що все це трохи заплутано, і я думаю, що діаграми графіків фіксації допомагають :)
¹ Я кажу лише "типово", оскільки, наприклад, при вирішенні конфліктів злиття git diff
показує вам тристороннє злиття.
..
і...
в,git diff
а також їхнє значення вgit log
.