Откат локального и удаленного репозитория git на 1 фиксацию
Я читал подобные сообщения на эту тему, и не могу за всю жизнь понять, как это сделать правильно.
Я проверил около 1000 файлов, которые мне не нужны, и мне бы не хотелось проходить через 1by1 и удалять их все из РЕПО.
- у меня есть удаленный
masterфилиала. - у меня есть местный
masterфилиала.
они оба в то же пересмотр.
Я хочу откатить свой пульт на 1 фиксацию.
скажи мою историю на master и A--B--C--D--E.
Я хочу откатить свой локальный к D.
Затем нажмите его на удаленный, чтобы мой текущий хэш был D как удаленным, так и локальным.
у меня возникли проблемы, делая это.
Я использую Git Tower, но мне удобно с командной строкой. Какая-нибудь помощь?
обновление:
Отличные комментарии ниже. Использование сброса, кажется, будьте частично обескуражены, особенно если репозиторий совместно используется с другими пользователями.
каков наилучший способ отменить изменения предыдущей фиксации без использования жесткого сброса? Есть ли способ?
10 ответов:
если никто еще не вытащил ваше удаленное РЕПО, вы можете изменить свою головку ветви и заставить ее нажать на указанное удаленное РЕПО:
git reset --hard HEAD^ git push -f(или, если у вас есть прямой доступ к удаленному РЕПО, вы можете изменить его ссылка на голову, хотя это голое РЕПО)
обратите внимание, как комментирует чужой-технологии на комментариях ниже., в Windows (сеанс CMD) вам понадобится
^^:git reset --hard HEAD^^ git push -f
что если кто-то уже вытащил РЕПО? Что же мне тогда делать?
тогда я бы предложил что-то, что не переписывает историю:
git revertлокально ваш последний коммит (создание нового коммита, который отменяет то, что сделал предыдущий коммит)- нажмите кнопку 'revert', сгенерированную
git revert.
установите локальную ветвь на одну ревизию назад (
HEAD^означает одну ревизию назад):git reset --hard HEAD^нажмите изменения в origin:
git push --forceвам придется форсировать толчок, потому что в противном случае git узнает, что вы позади
originодин совершал, и ничего не изменится.делать это с
--forceпредписывает заменитьHEADв удаленном репо без соблюдения каких-либо авансов там.
если вы хотите вернуть последний коммит слушайте:
Шаг 1:
Проверьте свои локальные коммиты с помощью сообщений
$ git logШаг 2:
удалить последнюю фиксацию без сброса изменений из локальной ветви (или master)
$ git reset HEAD^или если вы не хотите, чтобы последние файлы фиксации и обновления прослушивались
$ git reset HEAD^ --hardШаг 3:
мы можем обновить файлы и коды и снова нужно нажать с силой он будет удалять предыдущие совершать. Он будет держать новую фиксацию.
$ git push origin branch -fвот именно!
введя команду ниже, вы можете увидеть историю фиксации git -
$ git log
Допустим, ваша история на этой конкретной ветке похожа - commit_A, commit_B, commit_C, commit_D. Где, commit_D-это последний коммит и это, где голова остается. Теперь, чтобы удалить последнюю фиксацию из локального и удаленного, вам нужно сделать следующее:
Шаг 1: Удалите последнюю фиксацию локально -
$ сброс git --жесткий Голова~
Это изменит вашу голову фиксации на commit_C
Шаг 2: Нажмите ваше изменение для новой головы фиксации к удаленному
$ git push origin + HEAD
эта команда удалит последнюю фиксацию из remote.
P.S. Эта команда тестируется на Mac OSX и должна работать и на других операционных системах (не претендуя на другие ОС, хотя)
Я решил проблему, как у вас с помощью этой команды:
git reset --hard HEAD^ git push -f <remote> <local branch>:<remote branch>
Если у вас есть прямой доступ к удаленному РЕПО, вы могли всегда использовать:
git reset --soft HEAD^это работает, так как нет никакой попытки изменить несуществующий рабочий каталог. Для получения более подробной информации см. оригинальный ответ:
как я могу раскомментировать последнюю фиксацию в репозитории Git bare?
Я просто хотел удалить последнюю фиксацию из удаленной и чистой истории фиксации. Следующее работало как шарм
git reset --hard HEAD^ git push -f
способ сбросить головку и сделать возврат к предыдущей фиксации-через
$ git reset HEAD^ --hard $ git push <branchname> -fно иногда это может быть не принято в удаленной ветке:
To ssh:<git repo> ! [rejected] develop -> develop (non-fast-forward) error: failed to push some refs to 'ssh:<git repo>' hint: Updates were rejected because the tip of your current branch is behind hint: its remote counterpart. Integrate the remote changes (e.g. hint: 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details.тогда другой способ сделать это
git revert HEAD git push <remote branch>это прекрасно работает.
Примечание: помните, если
git push -f <force>не удалось, а затем вы пытаетесь вернуться. Сделайgit pullраньше, так что удаленный и локальный синхронизируются, а затем попробуйтеgit revert.
Проверьте сgit logчтобы убедиться, что пульт дистанционного управления и локальные находятся в той же точке фиксации с тем же SHA1..git revert A --> B --> C -->D A--> B --> C --> D --> ^D(taking out the changes and committing reverted diffs)
местные мастера
git reflog -- this will list all last commit e.g Head@{0} -- wrong push Head@{1} -- correct push git checkout Head@{1} . -- this will reset your last modified files git status git commit -m "reverted to last best" git push origin/masterне нужно беспокоиться, если другой вытащил или нет.
готово!
Comments