Когда ветка откололась от мастера? - PullRequest
0 голосов
/ 22 января 2019

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

git checkout -b newbranch

Есть ли команда git, которая скажет вам точную метку времени, когда newbranch был разветвленот мастера?

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Не совсем. Это не то, что гадкие треки На самом деле, он даже не отслеживает тот факт, что newbranch был специально разветвлен «от master». (Кроме того, я предлагаю не использовать "fork" для ссылки на отношения между ветками, поскольку "fork" имеет особое значение для git-репозиториев и проектов OSS в целом.)

Как предполагает RomainValeri, при определенных обстоятельствах вы могли бы посмотреть метки времени файловой системы для метаданных, связанных с веткой; но они не гарантируют ничего. Иногда упомянутый файл либо не существует, либо создается в то время, которое не имеет отношения к созданию ветки. И даже если он действительно существует и действительно отражает правильную временную метку, это не будет иметь большого значения; потому что «создание ветки» означает только то, что была создана новая ссылка. Это не значит, что он (или когда-либо был) извлечен, или что-то сказано о том, какие ссылки будут содержать новые коммиты.

Самый простой способ визуализировать, как обстоят дела сейчас, это получить график фиксации, который показывает позиции веток и других ссылок. Вы можете использовать что-то вроде git log --graph --all --full-history. (Опция --full-history, вероятно, не нужна, но поскольку дело в том, что мы не совсем уверены в том, что происходит, это даст наиболее правдоподобную картину.) Или вы можете обнаружить, что графический интерфейс облегчает чтение; Я часто использую gitk --all --full-history, когда мне нужно посмотреть на «большую картинку».

Имейте в виду, что коммиты до того, как ветка была создана, будут по умолчанию показаны. То есть, если у вас есть

A -- B -- C <--(master)
      \
       D <--(newbranch)

тогда журнал D по умолчанию включает в себя A, B и D, так как это полная история кода, существующего в newbranch. Если вы видите C, это говорит о том, что вы вообще не используете newbranch (а приведенный выше график не тот, который у вас действительно в этом случае).

Остальное может быть касательным, но на всякий случай ...

Причина, по которой A и B включены по умолчанию, заключается в том, что git снова не знает / не заботится, какая ветка была создана из какой другой ветки, или что-то подобное. На приведенном выше рисунке newbranch мог быть исходной веткой, а master мог быть разветвлен от нее в B; для мерзавца это то же самое, что newbranch, разветвляющийся от master в B. Или D мог быть создан в отдельном состоянии HEAD, а newbranch мог быть создан после сохранения факта D. Или может случиться много других вещей.

Если вы хотите видеть просто коммитов, которые были добавлены в newbranch, вы можете сказать что-то вроде git log master..newbranch (сообщая журналу исключить любые коммиты, которые являются частью истории master) .

0 голосов
/ 22 января 2019

Когда вы создали свою новую ветку newbranch, git пишет файл (содержащий SHA-1 коммита, на который он указывает) здесь: .git/refs/heads/newbranch.Может быть, проверить его время создания?

(Конечно, это будет решение только для локального репо, где возникла ветвь, а не из другого репо.)

...