Как понять кроссовер Git log? - PullRequest
1 голос
/ 18 июня 2019

Может кто-нибудь сказать мне, что произошло между 0ab11dd и bd7278a? А также между 27ac7b7 и 95b2c48? Почему в этих коммитах кроссовер?

* xxxxxxx (HEAD -> f-1, origin/f-1) 
* xxxxxxx fix merge conflicts
*   13751d5 Merge branch 'master' into feature/DP-1
|\  
| *   f3efc9d (origin/master, origin/HEAD, master) Merge pull request #9 from fix
| |\  
| | * 83c0b15 (origin/fix) 
| |/  
| *   be24ce6 Merge pull request 
| |\  
| | *   0ab11dd merge
| | |\  
| | |/  
| |/|   
| * |   bd7278a Merge pull request 
| |\ \  
| | * | 14399e2 
| | | * xxxxxxx  
| | | * xxxxxxx 
| | | *   27ac7b7 merge
| | | |\  
| | |_|/  
| |/| |   
| | | * 95b2c48 (origin/f-3) 
| | | * xxxxxxx 

особенно это

| | |_|/  
| |/| |   

почему существует ветвь out, но нет коммита?

Ответы [ 2 ]

1 голос
/ 18 июня 2019

Это был бы комментарий, но там нет места, и его нужно отформатировать.

Раздел на данный момент:

| | | *   27ac7b7 merge
| | | |\  
| | |_|/  
| |/| |   
| | | * 95b2c48 (origin/f-3) 
| | | * xxxxxxx 

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

| | | * xxxxxxx 
| | |/
| | * yyyyyyy
| |/
| * zzzzzzz
|/
* sssssss

(но мы не можем догадаться, и это, вероятно, намного сложнее).

Имея достаточно дополнительного графа, мы можем сказать больше о коммите 27ac7b7. На данный момент все, что мы знаем, это то, что это слияние с двумя родителями, и первым родителем является 95b2c48 (который помечен origin/f-3). Мы не можем видеть здесь хэш-идентификатор второго родительского коммита, но после линии графика вы в конечном итоге получите второй родительский коммит.

(Первый коммит, о котором вы спросили - 0ab11dd - это коммит слияния с родителями xxxxxxx, результат следования по прямой-нисходящей линии к этому коммиту, и коммит bd7278a, результат следования по строке который изначально спускается вправо, затем сразу же переворачивается и пересекает вниз до bd7278a. git log --graph подчеркивает первые / не первые отношения родства путем вытягивания не-первых ссылок вправо. Некоторые методы рисования графиков, включая тот, который я обычно использую использовать, вообще не проводить различий. Когда и насколько полезно различие, это другая тема, но см. параметр --first-parent в git log.)

1 голос
/ 18 июня 2019

О "кроссоверах"

Это просто способ, которым графический инструмент представляет слияния: справа налево (тот, который слева, тот, кто "получает" слияние). Таким образом, когда последовательность коммитов (а не, скажем, ветвь, которая может здесь сбивать с толку) должна быть объединена с другой, которая в настоящее время графически представлена ​​справа, тогда инструмент рисует линию, которая, да, пересекает другие, чтобы сделать ее переход к коммиту слияния справа .

Так что это просто графическое соглашение.


О вертикальных линиях (после комментариев)

Ветви (необязательно, с --decorate) добавляются к графику при коммите, на который они в данный момент указывают, но не забывайте, что вашему дереву репо на самом деле не нужно ни одного из них. Эти серии коммитов - это тело вашего дерева, где "ветви" - это всего лишь подсказки, вот где метафора немного ломается ...


(Я допускаю, что это очень низкотехнологичное представление, ... но давайте также допустим, что информативные коммит-сообщения сделают вещи более понятными.)

...