Подтвердить что ты не робот

Как я могу сделать старшую команду HEAD в Git?

Я все еще пытаюсь узнать (основные?) тонкости Git и сумел попасть в беду. Я понял, что я допустил некоторые ошибки в HEAD, проверил старшую фиксацию и начал кодирование оттуда. Когда я пытаюсь нажать, мне говорят, что моя текущая фиксация позади, и мне нужно объединиться с HEAD. Git рекомендует "git pull". Однако HEAD имеет код, который я хочу игнорировать. Как решить эту проблему? Большое спасибо за помощь.

Flowchart:

-------- HEAD (bad) ---------------------- + (behind conflict, requires
     \                                    /   merge with HEAD, which is
      \------- Current commit (good) ----/    bad and needs to be ignored)
4b9b3361

Ответ 1

Если ваш репозиторий не используется другими людьми, вы можете безопасно выполнить git push -f, чтобы перезаписать удаленную ветвь.

Ответ 2

Вот что вы можете сделать:

git checkout <branch-to-modify-head>
git reset --hard <commit-hash-id-to-put-as-head>
git push -f

Если вы не нажмете push, git выкинет эту ошибку: обновления были отклонены, потому что конец вашей текущей ветки отстает.

Обратите внимание, что это повлияет на вашу историю git, так что другой способ сделать это - вернуть все, что вы не хотите. Таким образом, вы сохраняете свою историю:

git revert commit-id

Приветствия

Ответ 3

Как я это делаю:

git reset --hard <commit-SHA>
git push origin HEAD:<name-of-remote-branch>

Это способ git рекомендует и делает git push -f может быть проблематичным для всех остальных в команде разработчиков

Ответ 4

ANeves прав, "git push -f" работает только потому, что вы были единственным человеком, использующим репозиторий. Это не приемлемое решение для большинства людей.

Здесь ваша текущая история фиксации:

---A-B < HEAD (bad)
    \
     C < my_branch (good)

У вас есть необходимые решения: Как мне переписать, а не "слить" , ветку на другую ветку в Git?

Чтобы вернуться,

git checkout my_branch
git merge -s ours HEAD

Это остановит все изменения в ветке HEAD и даст вам следующее:

--A-B-D < HEAD, my_branch (both good)
   \ /
    C

D фактически совпадает с C в этом случае, у него просто разные родители.

Ответ 5

Я немного опоздал на вечеринку - мне пришлось сделать:

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

Ответ 6

Единственное, что сработало для меня:

git checkout <OLD_COMMIT>
git branch temp
git checkout temp
git branch -f master temp
git checkout master
git branch -d temp

Ответ 7

Для тех из нас, кто работает с защищенными ветвями, push -f не вариант.

Вместо:

Checkout HEAD
diff {hash of desired commit to use as new HEAD} > myChange.patch
git apply 
commit 
push

Если у вас есть изменения, которые вы хотели бы объединить с новой версией HEAD, например OP, я бы сначала сделал их резервные копии, исправил бы удаленное репо, а затем применил изменения.

Это также сохраняет вашу историю репо.