Git - Сделать локальный HEAD новым мастером
Я решил вернуться несколько коммитов, потому что путь, который я следил, был неправильным. Поэтому я проверил Added cordova to .gitignore
commit и внес некоторые изменения. Как показано ниже:
![enter image description here]()
Теперь, когда я нажимаю новые изменения, появляется сообщение об ошибке:
error: src refspec (detached from aad6423) does not match any.
Как я могу сказать git отменить предыдущие коммиты (в фиолетовом) и продолжить с моей локальной HEAD как master?
Ответы
Ответ 1
Даже если вам больше не нужна эта ветка, git действительно не любит переписывать историю или отбрасывать изменения. Просто верните и слейте.
git branch new_master # name current detached HEAD
git checkout master # switch back to master
git revert --no-edit HEAD~4..HEAD # create commits reverting back to where the history split
git merge new_master # merge
git branch -d new_master # don't need it anymore
Ответ 2
Сделайте HEAD новым локальным master
:
$ git checkout -B master
Внесите изменения:
$ git push -f
Ответ 3
Поскольку у вас есть расхождение, вам нужно уничтожить удаленный мастер и нажать локальную версию. В зависимости от безопасности на месте вы не сможете этого сделать. Это также имеет другие последствия, в зависимости от того, кто еще делает работу на основе мастера. Это нужно делать с особой осторожностью.
git push origin :master // deletes remote master
git push origin master // pushes local master to remote
Другой (возможно, лучший) подход состоял бы в том, чтобы вернуть коммиты для овладения и фиксации ревертов (которые сами совершают). Затем вишни выберите работу, которую вы сделали на своем местном. Во-первых, создайте новую ветку темы локально, чтобы сохранить свою работу.
git checkout -b <topic_branch_name> // create new branch to save local work
git checkout master
git reset --hard HEAD // sync local master to remote HEAD
git revert <last commit to master>
git revert <second-to-last commit to master>
...
git revert <Added cordova to .gitignore commit>
git push
git cherry-pick <commit hash from topic branch commit(s)>
Ответ 4
Итак, я бы сделал это за пару шагов:
git checkout -b new_master
чтобы получить хороший справочник о том, что вы хотите, чтобы новый мастер был.
git checkout master ; git checkout -b old_master
оставить ссылку на старого мастера на тот случай, если вы захотите вернуться или что-то позже; вы всегда можете удалить эту ветку позже, когда будете уверены.
git checkout master ; git reset --hard new_master
это сбросит заголовок ветки, в которой вы находитесь (master), к указанной ссылке (new_master).
git push -f origin
это сделает принудительное нажатие вашей новой главной ветки на удаленный. ОБРАТИТЕ ВНИМАНИЕ, что это плохая практика, если кто-то еще использует ваше удаленное репо, так как это потенциально может нарушить их выборки.
Ответ 5
Поскольку вы подталкивали изменения вверх по течению, лучший подход заключается в том, чтобы вернуть их с другой фиксацией. Конец, который отменяет изменения.
Удаление коммитов или веток из вышележащего уровня - это bad. Подробнее см. .