В чем разница между double-dot ".."и тройная точка" ... " в диапазонах фиксации Git?
некоторые команды Git принимают диапазоны фиксации, и один допустимый синтаксис заключается в разделении двух имен фиксации двумя точками .., а другой синтаксис использует три точки ....
каковы различия между ними?
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. Вlogcase, он показывает все коммиты, которые находятся в B, но не в A.
использование диапазонов фиксации с git Log
когда вы используете диапазоны фиксации, такие как
..и...Сgit log, разница между ними заключается в том, что для ветвей A и Bgit log A..Bпокажет все коммиты, которые B имеет, что A не имеет, а
git log A...Bпокажет и коммиты, что есть и что б не иметь, и совершает, что б, что нет, или другими словами,он будет отфильтровывать все коммиты, которые разделяют A и B, таким образом, показывая только коммиты, которые они не долю.
визуализация с диаграммами Венна и деревьями фиксации
вот визуальное представление
git log A..B. Коммиты, которые содержит ветвь B, которая не существует в A, - это то, что возвращается диапазоном фиксации и выделяется красным цветом на диаграмме Венна и обведено синим цветом в фиксации дерево:
это диаграммы для
git log A...B. Обратите внимание, что коммиты, которые shared обе ветви не возвращаются команды:
создание диапазона фиксации с тремя точками
...Более Полезнымвы можете сделать диапазон фиксации с тремя точками
...более полезно в команде журнала с помощью--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