Это вообще невозможно. Git записывает только единственный идентификатор фиксации (SHA-1), на который указывает ссылочное имя (например, ветка или тег). История этого commit определяется исключительно родительскими идентификаторами этого коммита, которые не записывают имена ветвей. Когда вы нажимаете на удаленный компьютер, ваша операция «push» отправляет SHA-1 комманды, которую вы нажимаете (плюс больше SHA-1 для любых других связанных объектов-деревьев и файлов, родительских коммитов и т. Д. Плюс содержимое всех эти объекты по мере необходимости на основе того, что отсутствует на пульте дистанционного управления), и просит пульт установить его ветку, чтобы указать на новый SHA-1.
Другими словами, вы говорите пульту: «здесь, совершите 1234567 и установите метку ветки ddd
= 1234567».Он может сказать вам «сделать то, что мне нужно пять других коммитов», один из которых вы обозначили как bbb
, но если вы не сообщите удалённому «о, как установили ярлык bbb
на эту другую фиксацию», то он выиграл У этой информации нет.
Это немного преувеличения: Git также запись, в reflog, каждый SHA-1, который хранится в метке, в том числе отраслевых этикеток. Таким образом, можно вернуться к истории лейбла, чтобы «выяснить, с чего это началось». Есть два ограничения на это: reflogs являются чисто локальными, никогда не передаются приложением или push; и reflogs истекает, как правило, через 90 дней в этих случаях (хотя это настраивается и возникают дополнительные сложности). Поэтому, пока мы говорим, что есть шаг на шаг или пропустить более 3 месяцев, невозможно сказать.
Это напоминает мне http://stackoverflow.com/a/23149200/6309;) +1 – VonC
@VonC: Я думал об этом (или подобном) и отмечал как дуп, но не совсем обойти его, а также работать над другими вещами в других окнах ... :-) – torek
Мне на самом деле нравятся эти «близкие друг к другу», так как объяснение чего-то снова иногда приносит новые идеи. – VonC