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