Ветвь буквально просто ссылка на один коммит. Все остальное, что вы думаете об этом, является персонификацией. Или древовидная. Если вы хотите, чтобы master ссылался на коммит C3, а ветвь с именем «dev» ссылалась на коммит C5, возможно, самое простое:
git branch dev
git reset ${HASH_OF_C3}
Первая команда создает ветвь в текущем заголовке (C5). Второй сбрасывает текущую ветку (master) для фиксации C3. После этих команд ваш рабочий каталог будет считаться грязным (содержимое всех файлов находится на коммите C5, но у вас в данный момент есть извлечение главной ветки, и оно на C3). Вы можете проверить dev (git checkout dev
) или очистить его (git reset --hard
). Вы также можете добавить опцию --hard
при первом сбросе. Вероятно, вы хотите получить ветку 'dev', поэтому, возможно, вы захотите:
git checkout -b dev # Create new branch at current commit
git branch -f master ${SHA_OF_C3} # Make master refer to C3