коммиты git 1.7.1 появляются не по порядку - PullRequest
0 голосов
/ 18 февраля 2019

Следующий пост относится к устаревшей версии Git (версия 1.7.1 - по умолчанию в Centos 6), которая восходит к 2010 году. Хотя очевидным ответом будет простое обновление git (я предпочитаю этот курсдействия) Я только что присоединился к этому проекту, и руководитель группы обеспокоен стабильностью.Я подозреваю, что Git 1.7.1 ужасно сломан, и надеюсь оправдать его обновление.

Я только что сделал свой первый коммит в проекте, к которому я только что присоединился, и с удивлением обнаружил, что этот gitжурнал вставляет мои изменения перед недавними коммитами (SA) - с дополнительным усложнением, которое TortoiseGit приписывает изменениям, внесенным кем-то другим (MH).

git log --graph --oneline --decorate --pretty=format:"%cn committed %h on %cd"

Результат:

* SA committed 3d67c9dd4 on Mon Feb 18 12:42:24 2019 +0000      ## SECOND COMMIT
*   SA committed d6f0c4712 on Mon Feb 18 10:55:42 2019 +0000    ## FIRST PUSH (2 mins after FIRST COMMIT)
|\
| * MH committed c1ad3c336 on Thu Feb 14 17:07:01 2019 +0000
| * MH committed 7442f95dd on Thu Feb 14 15:03:46 2019 +0000
| * MH committed 417dc55e2 on Thu Feb 14 11:28:40 2019 +0000
| * MH committed 0eea851b1 on Thu Feb 14 11:27:01 2019 +0000
| * MH committed 72e0fa612 on Wed Feb 13 17:15:22 2019 +0000
| * MH committed 0e80cc9d6 on Wed Feb 13 17:06:50 2019 +0000
| * MH committed ac37fdf64 on Wed Feb 13 17:04:46 2019 +0000
| * MH committed cb1b84489 on Wed Feb 13 17:04:18 2019 +0000
| * MH committed f5026eee5 on Wed Feb 13 15:03:50 2019 +0000
| * MH committed 1ca37588f on Wed Feb 13 15:01:55 2019 +0000
| * MH committed cedcefd36 on Wed Feb 13 12:23:03 2019 +0000
| * MH committed 0bbd26524 on Wed Feb 13 08:39:33 2019 +0000
| *   MH committed db8b7672c on Thu Feb 7 17:41:56 2019 +0000
| |\
| | * MH committed fca13dfe3 on Thu Feb 7 17:36:05 2019 +0000
| | * MH committed 704e2f3ff on Thu Feb 7 17:35:30 2019 +0000
| * | MH committed 1b34e745c on Thu Feb 7 17:41:20 2019 +0000  #### out of place
| |/
| * MH committed f77456930 on Wed Feb 6 11:43:29 2019 +0000
| * MH committed eb9849449 on Tue Feb 5 17:52:17 2019 +0000
| * MH committed 889f94b00 on Tue Feb 5 15:45:19 2019 +0000
| * MH committed ae4505a10 on Tue Feb 5 13:47:42 2019 +0000
| * MH committed 561c703b6 on Tue Feb 5 13:47:07 2019 +0000
| * MH committed 43b4941f8 on Tue Feb 5 13:45:01 2019 +0000
* | SA committed 2336ac0c7 on Mon Feb 18 10:53:49 2019 +0000  ## FIRST COMMIT -- sandwiched BETWEEN earlier commits!!!
|/
* MH committed 87fcf83a2 on Mon Feb 4 11:25:38 2019 +0000
* MH committed ea096edd3 on Fri Feb 1 17:12:01 2019 +0000
* MH committed c51cd83d3 on Fri Feb 1 10:27:52 2019 +0000

Это известная проблема с git 1.7.1?

Обновление : я только что заметил, что коммиты, сделанные MH, также неуместныи то, что выглядит как ветви на дереве, является полной загадкой.Все изменения были внесены в одну и ту же ветку.

Обновление 2 Запутанные коммиты, по-видимому приписываемые мне (TortoiseGit на d6f0c4712), на самом деле - это "diff with parent 1" (что бы это ни былосредства).Мои фактические коммиты перечислены way ниже как "diff with parent 2".

1 Ответ

0 голосов
/ 19 февраля 2019

TL; DR

git log --date-order

или

git log --date-order --graph --oneline --decorate --pretty=format:"%cn committed %h on %cd"

Подробности

Мне удалось воспроизвести вашусценарий на компьютере CentOS 6 с Git 1.7.1.(У нас есть более поздняя версия Git, но версия 1.7.1 все еще там.)

Когда есть коммит слияния, Git (новый и старый), кажется, учитывает ветвь, которая была объединена вкак более «недавний», что имеет смысл, если вы думаете об этом следующим образом: я внес изменения в свою ветку, затем я влился в чужие изменения, так что это последнее, что произошло.

Простое решениедолжен предоставить --date-order до git log.

Дата заказа:

$ git log --date-order --graph --oneline --decorate --pretty=format:"%cn committed %h on %cd"
*   j committed c767018 on Tue Feb 19 06:40:26 2019 -0500
|\
* | j committed f0fe88c on Tue Feb 19 06:40:10 2019 -0500
| * j committed 29b783b on Tue Feb 19 06:39:55 2019 -0500
|/
*   j committed c592f81 on Tue Feb 19 06:34:38 2019 -0500

Не дата заказа:

$ git log --graph --oneline --decorate --pretty=format:"%cn committed %h on %cd"
*   j committed c767018 on Tue Feb 19 06:40:26 2019 -0500
|\
| * j committed 29b783b on Tue Feb 19 06:39:55 2019 -0500
* | j committed f0fe88c on Tue Feb 19 06:40:10 2019 -0500
|/
*   j committed c592f81 on Tue Feb 19 06:34:38 2019 -0500

Примечание о всех техпузыри слияния

В моем рабочем процессе я не люблю видеть все эти пузыри слияния в истории.Когда я объединяю ветку с функциями или ветку с ошибками, я хочу видеть это как слияние, но когда это просто меняется на master, который я еще не нажал, я стараюсь избегать этого.Ваша заметка в разделе «Обновление» предполагает, что вам это тоже не нравится, так что вот мое мнение о ней.

Когда вы делаете git pull и есть локальные коммиты, которые еще не были переданы, по умолчанию Git (старый и новый) объединит удаленные изменения в вашу локальную ветку, создав пузырек, подобный тому, который я воссоздал выше, и как показывает ваша история.

Чтобы избежать этого, используйте git pull --rebase вместо.предпочтительный рабочий процесс: используйте git fetch, затем проверьте различия между вашей локальной веткой и origin, добавив --all к вашей команде git log, затем git rebase origin, когда вы будете удовлетворены, все в порядке.

git fetch
git log --all --date-order --graph --oneline --decorate ...

или

git log master origin/master --date-order --graph  --online --decorate ...

затем

git rebase origin

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...