Сделать толчок мерзкой из оторванной головы

Я нахожусь на отстраненной голове и внес некоторые изменения. Я хочу подтолкнуть эти изменения на эту отдельную голову с мерзавцем. Я не хочу, чтобы мои изменения перешли на ветку разработки и, конечно, не на ветку 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 вашей текущей ветки на последнюю фиксацию.

Обычно это можно сделать двумя способами.

  1. Если вы хотите использовать ту же ветку - вы можете использовать:

    git push origin HEAD: <удаленная ветка>

  2. Вы можете создать новую ветку, отправить свой код в эту ветку (это также потянет ваш отдельный код).

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

Вот статья, которая объясняет, как работает ветвление и отсоединенная головка.

Другие вопросы по тегам