Если у меня есть n коммитов, как я могу перейти с n-3 коммитов?
Я вижу хэш каждого коммита.
Если у меня есть n коммитов, как я могу перейти с n-3 коммитов?
Я вижу хэш каждого коммита.
Вы можете создать ветку через хеш:
git branch branchname <sha1-of-commit>
Или с помощью символической ссылки:
git branch branchname HEAD~3
Чтобы оформить ветку при ее создании, используйте
git checkout -b branchname <sha1-of-commit or HEAD~3>
Для этого на github.com:
Магия может быть выполнена с помощью git reset.
Создайте новую ветку и переключитесь на нее (так что все ваши последние коммиты хранятся здесь)
git checkout -b your_new_branch
Вернитесь к своей предыдущей рабочей ветке (предположим, что она мастер)
git checkout master
Удалите последние х фиксации, сохраните мастер чистой
git reset --hard HEAD~x # in your case, x = 3
С этого момента все последние коммиты x находятся только в новой ветке, а не в вашей предыдущей рабочей ветке (мастер).
Если вы не знаете, с какой фиксацией вы хотите вступить в ветку, вы можете проверить фиксацию и проверить свой код (см. источник, скомпилировать, проверить) на
git checkout <sha1-of-commit>
как только вы обнаружите, что фиксация, которую вы хотите разветкить, вы можете сделать это изнутри фиксации (т.е. не возвращаясь к первому мастеру), просто создав ветвь обычным способом:
git checkout -b <branch_name>
git checkout -b <branch-name> <sha1-of-commit>
Быстрый способ сделать это в вашем реестре Github будет следующим:
Просто запустите:
git checkout -b branch-name <commit>
Например:
git checkout -b import/january-2019 1d0fa4fa9ea961182114b63976482e634a8067b8
Команда checkout
с параметром -b
создаст новую ветку и переключит вас на нее
Для этого в Eclipse:
Это создаст для вас локальный филиал. Затем, когда вы отправляете свои изменения, ваша ветвь будет отправлена на удаленный сервер.
Я смог сделать это так:
git branch new_branch_name 'git log -n 1 --skip 3 --format=%H'
Где вы должны ввести значение пропуска. 0 - последний, 1 - предыдущий, 2 - коммит до этого и т.д.
Отличный вопрос: как вы это понимаете, используя параметр --help
для git? Попробуем это:
git branch --help
Мы видим этот вывод:
NAME
git-branch - List, create, or delete branches
SYNOPSIS
git branch [--color[=<when>] | --no-color] [-r | -a]
[--list] [-v [--abbrev=<length> | --no-abbrev]]
[--column[=<options>] | --no-column]
[(--merged | --no-merged | --contains) [<commit>]] [--sort=<key>]
[--points-at <object>] [<pattern>...]
git branch [--set-upstream | --track | --no-track] [-l] [-f] <branchname> [<start-point>]
git branch (--set-upstream-to=<upstream> | -u <upstream>) [<branchname>]
git branch --unset-upstream [<branchname>]
git branch (-m | -M) [<oldbranch>] <newbranch>
git branch (-d | -D) [-r] <branchname>...
git branch --edit-description [<branchname>]
Gobbledegook.
Искать в последующем тексте слово "совершить". Мы находим это:
<start-point>
The new branch head will point to this commit. It may be given as a branch name, a
commit-id, or a tag. If this option is omitted, the current HEAD will be used instead.
Мы где-то попадаем!
Теперь сосредоточьтесь на этой строке gobbledegook:
git branch [--set-upstream | --track | --no-track] [-l] [-f] <branchname> [<start-point>]
Сложите это на следующее:
git branch <branchname> [<start-point>]
И сделано.
Вы можете сделать это в Stash.
Вы можете создать ветвь, используя хэш этого коммита,
git branch branchname <sha1 of the commit>
Вот что я сделал:
C:\Users\[path]\build>git checkout -b responsivenavigation 8a75b001096536b3216022484af3026aa9c7bb5b
Switched to a new branch 'responsivenavigation'
C:\Users\jaimemontoya\Dropbox\CuponClub\androidapp\build>git branch
master
* responsivenavigation
В этом случае 8a75b001096536b3216022484af3026aa9c7bb5b
был и старый коммит принадлежал master
ветки.
Перейти к конкретному коммиту из git-репозитория
Иногда при работе с git-репозиторием вы хотите вернуться к определенной фиксации (ревизии), чтобы получить снимок вашего проекта в определенное время. Для этого вам понадобится хэш SHA-1 коммита, который вы легко найдете, проверив журнал командой:
git log --abbrev-commit --pretty=oneline
который даст вам компактный список всех коммитов и короткую версию хеша SHA-1.
Теперь, когда вы знаете хеш коммита, на который хотите перейти, вы можете использовать одну из следующих 2 команд:
git checkout HASH
или же
git reset --hard HASH
проверять, выписываться
git checkout <commit> <paths>
Говорит git заменить текущее состояние путей на их состояние в данном коммите. Пути могут быть файлами или каталогами.
Если ветка не указана, git принимает коммит HEAD.
git checkout <path> // restores path from your last commit. It is a 'filesystem-undo'.
Если путь не указан, git перемещает HEAD
к данному коммиту (тем самым изменяя коммит, над которым вы сидите и работаете).
git checkout branch //means switching branches.
сброс
git reset <commit> //re-sets the current pointer to the given commit.
Если вы находитесь на ветке (как правило, так и должно быть), HEAD
и эта ветка перемещаются для фиксации.
Если вы находитесь в отключенном состоянии HEAD
, git reset только перемещает HEAD
. Чтобы сбросить ветку, сначала проверьте это.
Если вы хотите узнать больше о разнице между git reset и git checkout, я бы порекомендовал прочитать официальный блог git.
Для пользователей Git GUI вы можете визуализировать всю историю (при необходимости), а затем щелкнуть правой кнопкой мыши на коммите, с которого вы хотите разветкиться, и ввести имя ветки.
Сделать принятый ответ в Visual Studio 2015 & 2017:
Нажмите на изменения (красная стрелка выше)
Нажмите "Действия" (красная стрелка вверху) и выберите "Просмотреть историю" в раскрывающемся меню
.Откроется новая вкладка:
И вы должны щелкнуть правой кнопкой мыши предыдущий коммит, к которому вы хотите вернуть свой код:
Выберите, чтобы оформить заказ на новую ветку и вуаля!
Ниже, хотя это и не часть вопроса OP, но я делаю и то, и другое, и этот шаг для меня, по крайней мере, для меня: если вы хотите вернуться к предыдущему коммиту без извлечения новой ветки, НЕ выбирайте revert (!?); Вам следует выбрать переопределение --mixed или --hard:
если вы используете исходное дерево, которое довольно просто.
Это создает ветку одной командой:
git push origin <sha1-of-commit>:refs/heads/<branch-name>
Я предпочитаю этот способ лучше, чем опубликованные выше, потому что он сразу создает ветвь (после этого не требуется дополнительная команда push).
Если вы ищете решение на основе командной строки, вы можете проигнорировать мой ответ. Я собираюсь предложить вам использовать GitKraken. Это неординарный клиент Git UI. Это показывает дерево Git на главной странице. Вы можете просто посмотреть на них и узнать, что происходит с проектом. Просто выберите определенный коммит, щелкните его правой кнопкой мыши и выберите опцию "Создать ветку здесь". Это даст вам текстовое поле для ввода названия ветки. Введите название ветки, выберите "ОК" и все готово. Это действительно очень прост в использовании.