Git, как сбросить origin / master на фиксацию?

Я сбрасываю локальный мастер на фиксацию этой командой:

git reset --hard e3f1e37

когда я вхожу , терминал говорит:

# On branch master
# Your branch is behind 'origin/master' by 7 commits, and can be fast-forwarded.

#   (use "git pull" to update your local branch)
#
nothing to commit, working directory clean

так как я хочу сбросить origin / header, я проверяю origin / master:

$ git checkout origin/master
Note: checking out 'origin/master'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b new_branch_name

HEAD is now at 2aef1de... master problem fixed for master. its okay now.

и сбросьте заголовок этой командой:

$ git reset --hard e3f1e37
HEAD is now at e3f1e37 development version code incremented for new build.

затем я попытался добавить фиксацию в origin / header, что мне не удалось.

$ git commit -m "Reverting to the state of the project at e3f1e37"
# HEAD detached from origin/master
nothing to commit, working directory clean

наконец, я оформляю заказ на мой местный мастер.

$ git checkout master
Switched to branch 'master'
Your branch is behind 'origin/master' by 7 commits, and can be fast-forwarded.
  (use "git pull" to update your local branch)

поскольку я сбрасываю голову origin/master, я ожидаю, что local и origin должны быть в том же направлении, но, как вы видите, git говорит, что мой local/master находится за origin / master на 7 коммитов.

как я могу исправить эту проблему? То, что я ищу, - это глава local/master и origin/master для той же фиксации. Следующее изображение показывает, что я сделал. Спасибо.

enter image description here

3 ответов


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

что вам нужно сделать, чтобы обновить пульт дистанционного управления, чтобы заставить ваши локальные изменения master:

git checkout master
git reset --hard e3f1e37
git push --force origin master
# Then to prove it (it won't print any diff)
git diff master..origin/master

решение найдено здесь помог нам обновить master до предыдущей фиксации, которая уже была нажата:

git checkout master
git reset --hard e3f1e37
git push --force origin e3f1e37:master

ключевым отличием от принятого ответа является хэш фиксации "e3f1e37:" перед master в команде push.


поскольку у меня была аналогичная ситуация, я подумал, что поделюсь своей ситуацией и как эти ответы помогли мне (спасибо всем).

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

ужас!), как я могу местные ветви развития.

поэтому я не проверял мастер локально, потому что я уже был после фиксации. Хозяин не изменился. Мне даже не нужно было перезагружать-жестко, моя текущая фиксация была в порядке.

Я просто заставил нажать на origin, даже без указывая, какую фиксацию я хотел заставить мастера, так как в этом случае это то, что голова. Проверено git diff master..origin/master Так что не было никаких различий, и все. Все исправлено. Спасибо! (Я знаю, я новичок git, пожалуйста, простите!).

поэтому, если вы уже в порядке с вашей главной веткой локально, просто:

git push --force origin master
git diff master..origin/master