Сделать толчок мерзкой из оторванной головы
Я нахожусь на отстраненной голове и внес некоторые изменения. Я хочу подтолкнуть эти изменения на эту отдельную голову с мерзавцем. Я не хочу, чтобы мои изменения перешли на ветку разработки и, конечно, не на ветку master. Я работаю над файлом с другим человеком.
Примеры веток
develop
master
*(HEAD detached at origin/49792_testMocha)
Как мне толкнуть в голову, не влияя на развитие или мастер?
7 ответов
Создать новую ветку, используя git checkout -b BRANCH_NAME
Затем нажмите новую ветку на удаленный: git push origin BRANCH_NAME
Если вы находитесь на отстраненной голове, и вы хотите подтолкнуть к удаленной ветви
git push origin HEAD:name-of-your-branch
в противном случае вы можете создать новую ветку и нажать на нее (она будет создана автоматически)
git branch new-branch-name
git push -u origin new-branch-name
В то время как все ответы здесь как бы отвечают на первоначальный вопрос (как сделать толчок от оторванной головы, не затрагивая другие ветви), все предлагают создать новую ветку.
Вот как перейти к новой удаленной ветви без создания новой локальной ветви.
Я даю тебе:
git checkout --detach # (or anything else that leaves you with a detached HEAD - guillotine anyone?)
[change stuff & commit]
git push origin HEAD:refs/heads/my-new-branch
замещать origin
с соответствующим удаленным именем (к которому у вас есть права на запись), и my-new-branch
с тем, что вы хотите, чтобы новая ветвь называлась.
Ваш коммит (ы) на HEAD
будет перенесен в новую ветку с именем my-new-branch
,
Тада!
Отсоединенная голова обычно означает, что ветка, в которую вы оформляете заказ, не имеет последней фиксации. Итак, в основном вам нужно настроить HEAD вашей текущей ветки на последнюю фиксацию.
Обычно это можно сделать двумя способами.
Если вы хотите использовать ту же ветку - вы можете использовать:
git push origin HEAD: <удаленная ветка>
Вы можете создать новую ветку, отправить свой код в эту ветку (это также потянет ваш отдельный код).
git checkout -b <имя-ветки> <базовая-ветка> git commit. git push
git checkout
git checkout <commit_id>
git checkout -b <new branch> <commit_id>
git checkout HEAD~X // x is the number of commits t go back
Это извлечет новую ветку, указывающую на желаемый коммит.
Эта команда вернется к данному коммиту.
На этом этапе вы можете создать ветку и начать работать с этого момента.
# Checkout a given commit.
# Doing so will result in a `detached HEAD` which mean that the `HEAD`
# is not pointing to the latest so you will need to checkout branch
#in order to be able to update the code.
git checkout <commit-id>
# create a new branch forked to the given commit
git checkout -b <branch name>
Примечание: создание ветки перед нажатием тем более рекомендуется, чтобы git 2.11 или менее использовался для segfault!
Это не будет иметь место с Git 2.12+ (1 квартал 2017 года)
Смотрите коммит b10731f (07 января 2017 г.) от Kyle Meyer ( kyleam
)
(Объединено Юнио С Хамано - gitster
- в коммите b85f79c, 18 января 2017 г.)
branch_get_push
: не сегрегировать, когда HEAD отсоединен"
git <cmd> @{push}
msgstr "на отдельном HEAD, используемом для segfault; оно было исправлено с ошибкой в сообщении.
Ошибка теперь будет:
HEAD does not point to a branch
С Git 2.12 или более, вы можете затем перенести ваш отделенный HEAD в удаленную ветвь, как показано в ответе Matt.
Создайте новую ветку для этого коммита и извлеките его: git checkout -b <branch-name> <commit-hash>
, Теперь вы можете перенести ваши изменения в новую ветку: git push origin <branch-name>
Если вам нужно очистить другую ветку от оставшихся коммитов, обязательно запустите git reset --hard <branch-name>
,
Вот статья, которая объясняет, как работает ветвление и отсоединенная головка.