Если у меня есть 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 reset --hard
не очень хорошая идея, если вы уже git reset --hard
коммит в origin ...
Если вы не знаете, с какой фиксацией вы хотите вступить в ветку, вы можете проверить фиксацию и проверить свой код (см. источник, скомпилировать, проверить) на
git checkout <sha1-of-commit>
как только вы обнаружите, что фиксация, которую вы хотите разветкить, вы можете сделать это изнутри фиксации (т.е. не возвращаясь к первому мастеру), просто создав ветвь обычным способом:
git checkout -b <branch_name>
git checkout -b <branch-name> <sha1-of-commit>
git branch branchname <sha1-of-commit>
" (от принятого ответа)?
git checkout -b
для создания новой ветки.
Быстрый способ сделать это в вашем реестре Github будет следующим:
Вы можете сделать это в Stash.
Для этого в Eclipse:
Это создаст для вас локальный филиал. Затем, когда вы отправляете свои изменения, ваша ветвь будет отправлена на удаленный сервер.
Отличный вопрос: как вы это понимаете, используя параметр --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>]
И сделано.
Я смог сделать это так:
git branch new_branch_name 'git log -n 1 --skip 3 --format=%H'
Где вы должны ввести значение пропуска. 0 - последний, 1 - предыдущий, 2 - коммит до этого и т.д.
HEAD~1
(где 1 указывает 1 коммит обратно)?
Вот что я сделал:
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 branch branchname <sha1 of the commit>
Просто запустите:
git checkout -b branch-name <commit>
Например:
git checkout -b import/january-2019 1d0fa4fa9ea961182114b63976482e634a8067b8
Команда checkout
с параметром -b
создаст новую ветку и переключит вас на нее
Для пользователей Git GUI вы можете визуализировать всю историю (при необходимости), а затем щелкнуть правой кнопкой мыши на коммите, с которого вы хотите разветкиться, и ввести имя ветки.
Перейти к конкретному коммиту из 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 log --abbrev-commit --pretty=oneline
может быть сокращено до git log --oneline