Git нажмите мастер фатальный: вы в настоящее время не находитесь на ветке
Мастер - это сказать, что совершить # 10. Тем не менее, я понял, что я что-то сломал по пути, который не был пойман испытаниями.
В итоге я решил совершить # 5, а затем медленно переделал dev из каждой фиксации и постоянно настраивал ее, чтобы убедиться, что она не вызвала ошибку. Теперь я по существу вернулся к фиксации # 10, но с рядом изменений, которые предотвращают появление ошибки.
Теперь я хочу создать commit # 11, используя мои изменения. Но когда я пытаюсь добиться мастерства, я получаю
fatal: You are not currently on a branch.
To push the history leading to the current (detached HEAD)
state now, use
git push master HEAD:<name-of-remote-branch>
Что и следовало ожидать. Но как мне получить это, чтобы подтолкнуть к моей удаленной ветке?
Я попробовал git push origin HEAD:master
, но потом получил следующее:
! [rejected] HEAD -> master (non-fast-forward)
error: failed to push some refs to 'https://github.com/tomhammond/sample.git'
hint: Updates were rejected because a pushed branch tip is behind its remote
hint: counterpart. Check out this branch and integrate the remote changes
hint: (e.g. 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
Когда я делаю a git status
, я вижу HEAD detached from 4a74ac3
Ответы
Ответ 1
Но когда я пытаюсь нажать на мастер, я получаю
fatal: You are not currently on a branch.
To push the history leading to the current (detached HEAD)
Что следует ожидать
Работа в отдельном состоянии не ожидается, если вы не намерены делать это, и я сомневаюсь в этом. Вместо того, чтобы проверять фиксацию # 5, вы должны либо вернуть ветвь master
к этой фиксации, либо сделать git rebase
в интерактивном режиме, где вы можете перефразировать коммиты, как хотите.
Если вы уверены, что версия master
в отключенном состоянии - это то, что вы действительно хотите сохранить, то вы можете обойти ошибку non-fast-forward
, принудительно нажав ветвь на пульт:
git push origin HEAD:master --force
Однако, если вы принудительно нажмете, вы рискуете вызвать проблемы для всех других пользователей, у которых эта ветка проверена. Менее рискованным решением было бы создать временную ветвь от отсоединенной HEAD, а затем объединить эту ветвь в master
:
git branch temp-branch
git checkout master
git merge temp-branch
git push origin master
Ответ 2
git push
позволит вам только переслать пульт. Это означает, что фиксация, которую вы пытаетесь нажать, должна быть потомком удаленной ветки. Поскольку вы отредактировали предыдущие фиксации после 5, у вас нет потомства, но больше двоюродного брата. Вы можете дать git push --force
, если вы хотите перезаписать ветвь, но если другие люди внесли свои собственные изменения поверх текущего мастера, они больше не смогут вытащить ветку. Кроме того, если кто-то еще нажимает на мастера, прежде чем вы это сделаете, их изменения будут потеряны. Как правило, вы не хотите принудительно нажимать, если вы не единственный, использующий ветку.