Ветка из предыдущего коммита с использованием Git

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

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

Ответ 1

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

git branch branchname <sha1-of-commit>

Или с помощью символической ссылки:

git branch branchname HEAD~3

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

git checkout -b branchname <sha1-of-commit or HEAD~3>

Ответ 2

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

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

Ответ 3

Магия может быть выполнена с помощью git reset.

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

    git checkout -b your_new_branch

  • Вернитесь к своей предыдущей рабочей ветке (предположим, что она мастер)

    git checkout master

  • Удалите последние х фиксации, сохраните мастер чистой

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

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

Ответ 4

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

git checkout <sha1-of-commit>

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

git checkout -b <branch_name>

Ответ 5

git checkout -b <branch-name> <sha1-of-commit>

Ответ 6

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

  • Найти конкретную фиксацию из вашей ветки
  • Рядом с идентификатором SHA нажмите "Обзор репо на этом этапе истории"
  • Здесь вы можете создать новую ветку из этой фиксации введите описание изображения здесь

Ответ 7

Просто запустите:

git checkout -b branch-name <commit>

Например:

git checkout -b import/january-2019 1d0fa4fa9ea961182114b63976482e634a8067b8

Команда checkout с параметром -b создаст новую ветку и переключит вас на нее

Ответ 8

Для этого в Eclipse:

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

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

Ответ 9

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

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

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

Ответ 10

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

И сделано.

Ответ 11

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

  • Нажмите фиксацию
  • В правой верхней части экрана нажмите "Отметить эту фиксацию"
  • Затем вы можете создать новую ветку из только что созданного тега.

Ответ 12

Вы можете создать ветвь, используя хэш этого коммита,

git branch branchname <sha1 of the commit>

Ответ 13

Вот что я сделал:

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 ветки.

Ответ 14

Перейти к конкретному коммиту из 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.

Ответ 15

Select Commit

Для пользователей Git GUI вы можете визуализировать всю историю (при необходимости), а затем щелкнуть правой кнопкой мыши на коммите, с которого вы хотите разветкиться, и ввести имя ветки.

Enter Branch name

Visualize all the history

Ответ 16

Сделать принятый ответ в Visual Studio 2015 & 2017:

Click in alterations

Нажмите на изменения (красная стрелка выше)

Click Actions to View History

Нажмите "Действия" (красная стрелка вверху) и выберите "Просмотреть историю" в раскрывающемся меню

.Откроется новая вкладка:

History tab

И вы должны щелкнуть правой кнопкой мыши предыдущий коммит, к которому вы хотите вернуть свой код: right click the previous commit

Выберите, чтобы оформить заказ на новую ветку и вуаля!

Ниже, хотя это и не часть вопроса OP, но я делаю и то, и другое, и этот шаг для меня, по крайней мере, для меня: если вы хотите вернуться к предыдущему коммиту без извлечения новой ветки, НЕ выбирайте revert (!?); Вам следует выбрать переопределение --mixed или --hard:

right click the previous commit and redefine

Ответ 17

если вы используете исходное дерево, которое довольно просто.

  • Щелкните правой кнопкой мыши на коммите, откуда вам нужно создать новую ветку
  • Нажмите на "ветку"
  • Введите имя новой ветки в появившемся диалоговом окне и нажмите "создать ветку"

Ответ 18

Это создает ветку одной командой:

git push origin <sha1-of-commit>:refs/heads/<branch-name>

Я предпочитаю этот способ лучше, чем опубликованные выше, потому что он сразу создает ветвь (после этого не требуется дополнительная команда push).

Ответ 19

Если вы ищете решение на основе командной строки, вы можете проигнорировать мой ответ. Я собираюсь предложить вам использовать GitKraken. Это неординарный клиент Git UI. Это показывает дерево Git на главной странице. Вы можете просто посмотреть на них и узнать, что происходит с проектом. Просто выберите определенный коммит, щелкните его правой кнопкой мыши и выберите опцию "Создать ветку здесь". Это даст вам текстовое поле для ввода названия ветки. Введите название ветки, выберите "ОК" и все готово. Это действительно очень прост в использовании.