В чем разница между double-dot ".."и тройная точка" ... " в диапазонах фиксации Git?



некоторые команды Git принимают диапазоны фиксации, и один допустимый синтаксис заключается в разделении двух имен фиксации двумя точками .., а другой синтаксис использует три точки ....



каковы различия между ними?

595   2  

2 ответов:

это зависит от того, используете ли вы или . В log случае, это man git-rev-parse документы:

для исключения коммитов, доступных из коммита, используется префикс ^ нотация. Например, ^r1 r2 означает коммиты, доступные из r2, но исключают те, которые доступны из r1.

эта операция набора появляется так часто что для этого есть стенография. Когда у вас есть два коммита r1 и r2 (названные в соответствии с синтаксисом объяснено в Указав ревизии выше), вы можете задать для коммиты, которые достижимы из r2 исключая те, которые являются достижимый из r1 по "^r1 r2 " и он можно записать как " r1..r2".

аналогичная нотация " r1...Р2" является называется симметричной разностью r1 и r2 и определяется как " r1 r2 --нет $(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 и просто различает A против B. В log case, он показывает все коммиты, которые находятся в B, но не в A.

использование диапазонов фиксации с git Log

когда вы используете диапазоны фиксации, такие как .. и ... С git log, разница между ними заключается в том, что для ветвей A и B

git log A..B

покажет все коммиты, которые B имеет, что A не имеет, а

git log A...B

покажет и коммиты, что есть и что б не иметь, и совершает, что б, что нет, или другими словами,он будет отфильтровывать все коммиты, которые разделяют A и B, таким образом, показывая только коммиты, которые они не долю.

визуализация с диаграммами Венна и деревьями фиксации

вот визуальное представление git log A..B. Коммиты, которые содержит ветвь B, которая не существует в A, - это то, что возвращается диапазоном фиксации и выделяется красным цветом на диаграмме Венна и обведено синим цветом в фиксации дерево:

"git log A..B" diagramTree 1

это диаграммы для git log A...B. Обратите внимание, что коммиты, которые shared обе ветви не возвращаются команды:

"git log A...B" diagramTree 2

создание диапазона фиксации с тремя точками ... Более Полезным

вы можете сделать диапазон фиксации с тремя точками ... более полезно в команде журнала с помощью --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, но для Теперь, вы, возможно, захотите, чтобы проверить каковы различия между двойной точки ".."и тройная точка "..." в git диапазоны фиксации diff?.

См. Также

Comments

    Ничего не найдено.