Ответы:
Вы можете создать ветку через хеш:
git branch branchname <sha1-of-commit>
Или с помощью символической ссылки:
git branch branchname HEAD~3
Чтобы оформить ветку при ее создании, используйте
git checkout -b branchname <sha1-of-commit or HEAD~3>
git push origin BRANCH_NAME
<sha1-of-commit>
прогона, git checkout -b <name-of-branch> <sha1-of-commit>
но если ветка уже существуетgit checkout -B <name-of-branch> <sha1-of-commit>
Для этого на github.com:
Волшебство может быть сделано путем сброса git .
Создайте новую ветку и переключитесь на нее (чтобы все ваши последние коммиты хранились здесь)
git checkout -b your_new_branch
Вернитесь к своей предыдущей рабочей ветке (предположите, что это мастер)
git checkout master
Удалите последние х коммиты, держите мастера в чистоте
git reset --hard HEAD~x # in your case, x = 3
С этого момента все последние x коммиты находятся только в новой ветке, а не в вашей предыдущей рабочей ветке (master).
git reset --hard
не очень хорошая идея, если вы уже выдвинули коммит на источник ...
git push --force
если вы уже нажали на ветку раньше
Если вы не уверены, с какого коммита вы хотите разветвляться заранее, вы можете проверить коммиты и изучить их код (см. Источник, компиляция, тестирование)
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 будет следующим:
Просто запустите:
git checkout -b branch-name <commit>
Например :
git checkout -b import/january-2019 1d0fa4fa9ea961182114b63976482e634a8067b8
Команда checkout
с параметром -b
создаст новую ветку и переключит вас на нее
git fetch
& git branch
команду на папке вашего проекта с помощью терминала, затем проверьте, существует ли ветвь функции, если это так, то да, конечно, вы не сможете создать ветку из удаленных ветвей, вы также можете отменить удаление ветки в случае, если ветка ушла
Большой связанный вопрос: Как, черт возьми, вы можете понять это, используя --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.
Мы куда-то добираемся!
Теперь сфокусируйтесь на этой строчке гобледека:
git branch [--set-upstream | --track | --no-track] [-l] [-f] <branchname> [<start-point>]
Конденсировать это к этому:
git branch <branchname> [<start-point>]
И сделано.
Для этого в Eclipse:
Это создаст для вас местный филиал. Затем, когда вы отправляете изменения, ваша ветвь будет отправлена на удаленный сервер.
Вы можете сделать это в Stash.
Я смог сделать это так:
git branch new_branch_name `git log -n 1 --skip 3 --format=%H`
Где вы должны ввести значение пропуска. 0 - последний, 1 - предыдущий, 2 - коммит до этого и т. Д.
HEAD~1
(где 1 указывает 1 коммит обратно)?
Это создает ветку одной командой:
git push origin <sha1-of-commit>:refs/heads/<branch-name>
Я предпочитаю этот способ лучше, чем опубликованные выше, потому что он сразу создает ветку (не требует дополнительной команды push потом).
Используя Sourcetree | Самый простой способ.
Вот что я сделал:
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 log --abbrev-commit --pretty=oneline
может быть сокращено доgit log --oneline
Для пользователей Git GUI вы можете визуализировать всю историю (при необходимости), а затем щелкнуть правой кнопкой мыши на коммите, с которого вы хотите разветвиться, и ввести имя ветки.
Чтобы сделать принятый ответ в Visual Studio 2015 & 2017:
Нажмите на изменения (красная стрелка выше)
Нажмите «Действия» (красная стрелка вверху) и выберите «Просмотреть историю» в меню DropDown.
И новая вкладка откроется:
И вы должны щелкнуть правой кнопкой мыши предыдущий коммит, к которому вы хотите вернуть свой код:
Выберите, чтобы оформить заказ на новую ветку и вуаля!
Ниже, хотя это и не часть вопроса OP, но я делаю и то, и другое, и этот шаг для меня, по крайней мере, для меня: если вы хотите вернуться к предыдущему коммиту, без проверки новой ветки, НЕ выбирайте revert (! ?); Вы должны выбрать переопределить --mixed или --hard:
если вы используете исходное дерево, это довольно просто.
Если вы ищете решение на основе командной строки, вы можете проигнорировать мой ответ. Я собираюсь предложить вам использовать GitKraken . Это необычный пользовательский интерфейс Git. Это показывает дерево Git на главной странице. Вы можете просто посмотреть на них и узнать, что происходит с проектом. Просто выберите определенный коммит, щелкните его правой кнопкой мыши и выберите опцию «Создать ветку здесь». Это даст вам текстовое поле для ввода названия филиала. Введите название филиала, выберите «ОК» и все готово. Это действительно очень легко использовать.