Я сбрасываю свой локальный мастер на коммит с помощью этой команды:
git reset --hard e3f1e37
когда я ввожу $ git status
команду, терминал говорит:
# 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)
Так как я перезагружаю голову источника / мастера, я ожидаю, что local и origin должны быть в одном направлении, но, как вы видите, git говорит, что мой local / master отстает от origin / master на 7 коммитов.
Как я могу исправить эту проблему? Я ищу главу local / master и origin / master, указывающую на один и тот же коммит. Следующее изображение показывает, что я сделал. Спасибо.
git
git-checkout
git-reset
Hesam
источник
источник
Ответы:
origin/xxx
ветви всегда указатель на удаленный. Вы не можете проверить их, так как они не указывают на ваш локальный репозиторий (вы только извлекаете коммит. Вот почему вы не увидите имя, записанное в маркере ветви интерфейса командной строки, только хеш коммита).Что нужно сделать, чтобы обновить пульт, - это принудительно отправить локальные изменения в master:
источник
remote: error: denying non-fast-forward refs/heads/master (you should pull first)
Найденное здесь решение помогло нам обновить master до предыдущей фиксации, которая уже была отправлена:
Ключевым отличием от принятого ответа является хеш коммита "e3f1e37:" перед мастером в команде push.
источник
remote: error: denying non-fast-forward refs/heads/master (you should pull first)
you should pull first
:)git config receive.denynonfastforwards false
но на самом деле я установил это вручную в своем локальном репозитории Git,/opt/git
который я создал, чтобы поиграть с идеями здесь. Я не уверен, как или если можно сделать это для bitbucket, github и т. Д. И @intuitivepixel, который не имеет смысла, поскольку он полностью изменяет то, что вы пытались достичь с помощью аппаратного сброса.Предполагая, что ваша ветка вызывается
master
как здесь, так и удаленно, и что ваш удаленный вызывается,origin
вы можете сделать:Однако вам следует избегать этого, если кто-то еще работает с вашим удаленным репозиторием и извлек ваши изменения. В этом случае было бы лучше отменить коммиты, которые вам не нужны, а затем нажать как обычно.
источник
Поскольку у меня была похожая ситуация, я подумала, что поделюсь своей ситуацией и как эти ответы помогли мне (спасибо всем).
Поэтому я решил работать локально, внося поправки в свой последний коммит каждый раз, когда я хотел сохранить свой прогресс в основной ветке (я знаю, я должен был разветвляться, фиксироваться на этом, продолжать нажимать и позже сливаться с мастером).
Однажды поздно вечером, в параноидальном страхе потерять свой прогресс из-за аппаратного сбоя или чего-то другого в эфире, я решил подтолкнуть мастера к началу. Позже я продолжал вносить поправки в свою локальную основную ветку, и когда я решил, что пришло время снова нажать, я столкнулся с различными основными ветвями и обнаружил, что не могу изменить origin / upstream ( duh! ), Как я могу локальные ветви разработки.
Поэтому я не проверял мастер локально, потому что уже был после коммита. Мастер не изменился. Мне даже не нужно было сбрасывать - жестко, мой текущий коммит был в порядке.
Я просто принудительно выдвинул к исходной точке, даже не указав, какой коммит я хотел навязать мастеру, поскольку в данном случае это то, что находится в HEAD. Проверено,
git diff master..origin/master
поэтому не было никаких различий и все. Все исправлено. Спасибо! (Я знаю, я новичок, пожалуйста, прости!).Так что, если вы уже в порядке с вашей основной веткой локально, просто:
источник