Я делаю git bisect
и после достижения проблемного коммита теперь пытаюсь сделать шаг вперед / назад, чтобы убедиться, что я нахожусь в правильном положении.
Я знаю, HEAD^
как вернуться назад в истории, но есть ли еще один ярлык, который поможет мне двигаться вперед (к конкретному коммиту в будущем), например:
A - B - C(HEAD) - D - E - F
Я знаю , что моя цель F , и я хочу , чтобы перейти от C до D .
ПРИМЕЧАНИЕ: это не дубликат Git: как перемещаться между коммитами , мой вопрос немного отличается, и на него нет ответа.
git checkout -b new_branch HEAD~4
чтобы вернуться на 4 коммита из HEAD, как в stackoverflow.com/a/4940090/911945Ответы:
Я немного поэкспериментировал, и это, похоже, помогает перемещаться вперед ( редактировать : он хорошо работает только тогда, когда у вас есть линейная история без коммитов слияния):
где
towards
SHA1 фиксации или тега.Пояснение:
$()
означает: получить все коммиты между текущимHEAD
иtowards
фиксацией (исключаяHEAD
) и отсортировать их в порядке приоритета (как вgit log
по умолчанию - вместо хронологического порядка, который, как ни странно, по умолчаниюrev-list
), а затем взять последний (tail
), то есть тот, к которому мы хотим перейти.git checkout
для выполнения проверки.Вы можете определить функцию, доступную как псевдоним ожидания параметра в вашем
.profile
файле, чтобы перейти к конкретной фиксации:источник
git log
показывает коммиты в хронологическом порядке, по умолчанию так же, какrev-list
, за исключением случая использования--graph
флага.Все, что вам нужно для ясного, а не отсоединенного состояния головки, - это сброс, а не проверка.
источник
git reset "HEAD@{1}"
в определенных оболочках, таких как fish и powershell ...git reflog
также может быть полезно для поиска правильной фиксации.git reset HEAD
чтобы вернуться туда, где я был ... теперь я понятия не имею, в каком состоянии находится мой репозиторий, и все страшно. Что мне теперь делать?Я верю, что вы можете:
Сделать один коммит вперед во времени. Чтобы перейти к нескольким коммитам, используйте HEAD @ {2}, HEAD @ {3} и т. Д.
источник
Это то, что я использую для навигации взад и вперед.
переход к следующей фиксации
переход к предыдущей фиксации
источник
git checkout <current branch>
прикрепляется к последней фиксации.git checkout -b <new-branch-name>
из текущего коммита позволяет вносить изменения в новую ветку.git rebase -i
тоже работает. Кроме того , я назвал своюn()
функцию,nx()
чтобы избежать конфликта с диспетчером версий узлов "n". Обязательно проверьте псевдонимы!Скажем, F - это последний коммит
trunk
(вставьте здесь свое собственное имя ветки) ... вы можете ссылаться на него какtrunk~0
(или простоtrunk
), E какtrunk~1
, D какtrunk~2
и т. Д.Загляните в свой рефлог, чтобы узнать о других способах называть коммиты.
источник
F
, и что вы знаете, куда в истории этой ветки вы хотите перейти. Он не пытается двигаться вперед относительно HEAD, но менее далеко назад относительно туловища.trunk
и ваш токHEAD
идентичны, что не показано в вопросе, что, как я сказал, не является тем, что я предполагаю, и что очень маловероятно на полпути черезbisect
Обратный ход тривиален, так как вы движетесь вниз по дереву, и всегда есть один путь.
При перемещении вперед вы движетесь вверх по дереву, поэтому вам нужно четко указать, на какую ветку вы нацеливаетесь:
Использование:
git down
,git up <branch-name>
источник
HEAD^
обычно это разумное значение по умолчанию.Если вы хотите заглянуть вперед, вы можете проделать этот трюк, поскольку в Git нет строгой команды для этого.
пример
Список хэшей истории логов:
используя команду
git log --reverse C..
, на выходе вы увидите , B и A .источник
Возможно, не самый лучший способ, но вы можете использовать его
git log
для просмотра списка коммитов, а затем использоватьgit checkout [sha1 of D]
для перехода к D.источник
Я только что проверил это. скажем, например, вы находитесь в главной ветке Затем выполните:
Итак, голова отсоединяется, и вы можете попробовать еще раз, чтобы перейти к любой другой фиксации:
Когда вы закончите осматриваться, вы можете вернуться в исходное состояние, просто зайдя в эту ветку. В моем примере: главная ветка
Если вы не хотите переходить в исходное состояние и хотите, чтобы одна из коммитов была вашей головой и продолжала оттуда, вам нужно оттуда разветвляться. например, после "git checkout HEAD @ {4}" вы можете ввести
источник
В качестве обходного пути вы можете просто вернуться к HEAD с помощью
А затем перейдите к желаемой фиксации с помощью
источник
Если вы используете vs code, то история Git - отличный плагин, в котором вы можете эффективно видеть коммиты и проверять их содержимое в самом редакторе. проверьте ссылку
источник
где:
branchName
равно имени веткиcommitInOrder
равно фиксации в порядке от самой первой фиксации в выбранной ветке (так, 1 - самая первая фиксация, 2 - вторая фиксация в ветке и т. д.)источник