В конфликте GitHub для Windows ставит меня в состояние "перезагрузки", как идти оттуда?

Недавно я начал использовать GitHub для Windows.

У меня только конфликт. В командной строке я бы знал, как справиться с этим, но GitHub для Windows выбрал, чтобы поставить меня в состояние, в котором я не знаком:

C:\Users\w\Documents\GitHub\CmisSync [(6026d18...)|REBASE +0 ~1 -0 !1 | +0 ~0 -0 !1]> git status
# Not currently on any branch.
# You are currently rebasing.
#   (fix conflicts and then run "git rebase --continue")
#   (use "git rebase --skip" to skip this patch)
#   (use "git rebase --abort" to check out the original branch)
#
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
...

Я исправил конфликт, зафиксировал файлы, но когда я запустил git push, мне сказали:

fatal: You are not currently on a branch.
To push the history leading to the current (detached HEAD) state now, use

    git push origin HEAD:<name-of-remote-branch>

Каков рекомендуемый способ, чтобы мои слияния совершались с удаленным мастером?
Я сомневаюсь, что git push origin HEAD:master добьется этого.

Ответ 1

Как мы говорим с Саймоном Будриасом, если вы действительно не знаете, что вы делали во время переустановки, лучше всего начать с git rebase --abort. Как говорит глагол, он прерывает текущую rebase и оставляет вас с вашим репозиторием и рабочей копией в том же состоянии, что и до начала перезагрузки.

После этого вы должны сделать все, что вы сделали, что запустило процесс переустановки (я не думаю, что вы сказали, что это такое, но не думайте, что это действительно важно). Разумеется, перезагрузка начнется снова, и вот где ваш исходный вопрос начинает отвечать.

Как говорится в выводе статуса, у вас, похоже, есть конфликты. Вы должны их разрешить (я обычно использую git status --short plus git mergetool, чтобы разрешить их с помощью meld), а затем git add файлы. Когда статус в порядке (скажем, добавляется каждый файл, который должен быть совершен, без конфликтов), вы должны git rebase --continue вместо git commit.

Идея состоит в том, что git rebase применяет группу коммитов на вершине данного коммита. Я действительно не знаю, какие коммиты применяются в дополнение к чему, но важно иметь это в виду. Имейте в виду, что существует множество конфликтов, потому что коммиты применяются один за другим. Используйте git log, чтобы узнать, какое последнее применение было применено, и я думаю, что в вашем каталоге .git/ должен быть файл с сообщением фиксации комманды, который в настоящее время применяется.

Это ошибка новичка commmon (мы все были там:)), чтобы попытаться включить изменения в файлы во время разрешения конфликта, не зная (или забыв), что они будут применены последним фиксатором.

Итак, надеюсь, что после устранения некоторых конфликтов, добавления файлов и git rebase --continue их, вы должны прийти в счастливый функциональный репозиторий, и вы сможете git push оттуда.

Наконец, но не менее важно: в конце концов, переустановите материал, используйте git log, чтобы проверить, что вы не изменяете никакого публичного коммита. Скажем, что ваш новый филиал содержит удаленную фиксацию HEAD. Rebasing является мощным и очень опасным. Вы не хотите переустанавливать публичную фиксацию - возможно, это единственная боль, у которой вы не хотите столкнуться:)

Ответ 2

Сначала вам нужно закончить режим rebase, вызвав git rebase --continue после устранения конфликтов. Затем это должно вернуть вас обратно на ветку, которую вы тянули (в вашем случае мастер). Вы заметите, что это произойдет, когда в командной строке (posh- git плагин) будет отображаться master вместо rebase

Затем вы можете нажать git push origin master. Дополнительные параметры могут быть автозаполнены с помощью Git, но это зависит от ваших настроек.