Ветка из предыдущего коммита с использованием Git - PullRequest
1517 голосов
/ 12 мая 2010

Если у меня n коммитов, как мне перейти с n-3 коммита?

Я вижу хэш каждого коммита.

Ответы [ 15 ]

2142 голосов
/ 12 мая 2010

Вы можете создать ветку через хеш:

git branch branchname <sha1-of-commit>

Или используя символьную ссылку:

git branch branchname HEAD~3

Чтобы оформить ветку при ее создании, используйте

git checkout -b branchname <sha1-of-commit or HEAD~3>
220 голосов
/ 09 августа 2013

Для этого на github.com:

  1. Перейти к вашему проекту.
  2. Нажмите на «Коммиты».
  3. Нажмите <> («Просмотреть репозиторий на этом этапе истории») на коммите, с которого вы хотите выполнить ветвление.
  4. Нажмите на "tree: xxxxxx" вверху слева. Чуть ниже языковой статистики вы получите возможность «Найти или создать ветку» (просто введите имя новой ветки) Branch from previous commit
70 голосов
/ 03 августа 2015

Волшебство может быть сделано с помощью git reset .

  1. Создайте новую ветку и переключитесь на нее (чтобы все ваши последние коммиты хранились здесь)

    git checkout -b your_new_branch

  2. Переключиться обратно на предыдущую рабочую ветку (предположим, что это master)

    git checkout master

  3. Удалите последние x коммитов, содержите мастер в чистоте

    git reset --hard HEAD~x # in your case, x = 3

С этого момента все последние x коммиты находятся только в новой ветке, а не в вашей предыдущей рабочей ветке (master).

64 голосов
/ 10 февраля 2014

Если вы не уверены, с каким коммитом вы хотите разветвиться заранее, вы можете проверить коммиты и изучить их код (см. Источник, компиляция, тестирование) по

git checkout <sha1-of-commit>

как только вы найдете коммит, от которого вы хотите разветвиться, вы можете сделать это из коммита (то есть, не возвращаясь сначала к мастеру), просто создав ветку обычным способом:

git checkout -b <branch_name>
20 голосов
/ 11 июля 2017
git checkout -b <branch-name> <sha1-of-commit>
9 голосов
/ 14 января 2017

Быстрый способ сделать это на вашем репозитории Github будет следующим:

  • Найдите конкретный коммит из вашей ветки
  • Рядом с идентификатором SHA нажмите «Просмотреть репо на данном этапе истории»
  • Здесь вы можете создать новую ветку из этого коммита enter image description here
4 голосов
/ 18 января 2017

Вы можете сделать это в Stash.

  1. Нажмите на коммит
  2. В правой верхней части экрана нажмите «Пометить этот коммит»
  3. Затем вы можете создать новую ветку из тега, который вы только что создали.
4 голосов
/ 17 мая 2013

Для этого в Eclipse:

  • Перейти к перспективе "Git Repository Exploring".
  • Разверните "Теги" и выберите коммит, из которого вы хотите создать ветку.
  • Щелкните правой кнопкой мыши на коммите и выберите «Создать ветку».
  • Укажите название филиала.

Это создаст для вас местный филиал. Тогда всякий раз, когда вы отправляете свои изменения, ваша ветвь будет отправляться на удаленный сервер.

3 голосов
/ 19 июля 2016

Отличный вопрос: как, черт возьми, вы это выясняете, используя опцию --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.

Поиск в последующем тексте слова "commit". Мы находим это:

   <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>]

И готово.

3 голосов
/ 01 февраля 2013

Я смог сделать это так:

git branch new_branch_name `git log -n 1 --skip 3 --format=%H`

Где вы должны ввести значение пропуска. 0 - последний, 1 - предыдущий, 2 - коммит до этого и т. Д.

...