Сброс пульта дистанционного управления к определенному фиксации

Я хочу отменить все изменения, сделанные после commit <commit-hash>. Итак, я сделал:

git reset --hard <commit-hash>

Теперь я хочу сделать то же самое с моим пультом. Как я могу это сделать? Я совершил некоторые коммиты (и толкает) после <commit-hash>, и я просто хочу их отбросить. Просто что-то пошло ужасно неправильно, и я не хочу делать это хуже, чем это уже происходит.; (

В основном я хочу перемотать мой origin/master на <commit-hash>

Ответ 1

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

 git reset --hard <commit-hash>
 git push -f origin master

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

Обновление: вы объяснили ниже, что другие люди извлекли изменения, которые вы выдвинули, поэтому лучше создать новый коммит, который отменит все эти изменения. В этом ответе от Якуба Наребски есть хорошее объяснение ваших возможностей сделать это. Какой из них наиболее удобен, зависит от того, сколько коммитов вы хотите вернуть, и какой метод имеет для вас наибольшее значение.

Поскольку из вашего вопроса стало ясно, что вы уже использовали git reset --hard для сброса вашей master ветки, вам может потребоваться начать с использования git reset --hard ORIG_HEAD чтобы переместить вашу ветку туда, где она была раньше. (Как всегда с git reset --hard, убедитесь, что git status чистое, что вы находитесь на правильной ветке и что вы знаете о git reflog как инструменте для восстановления явно потерянных коммитов.) Вы также должны проверить, что ORIG_HEAD указывает на правильный коммит, с git show ORIG_HEAD.

Ответ 2

Используйте другие ответы, если не возражаете потерять локальные изменения. Этот метод может по-прежнему разрушать ваш пульт, если вы выберете неправильный хеш фиксации, чтобы вернуться к.

Если вы просто хотите сделать удаленное совпадение с фиксацией, которая уже находится в вашей локальной ветке:

  • Сделайте не сброс.
  • Используйте git log, чтобы найти хеш фиксации, которую хотите, чтобы пульт был включен. git log -p, чтобы увидеть изменения, или git log --graph --all --oneline --decorate, чтобы увидеть компактное дерево. (Наличие последнего в качестве псевдонима в вашей оболочке очень удобно.)
  • Скопируйте хэш.
  • Выполните команду, например:

    git push --force <remote> <the-hash>:<the remote branch>
    

    например.

    git push --force origin 606fdfaa33af1844c86f4267a136d4666e576cdc:master
    

Ответ 3

Я решил эту проблему, как ваш, следующими командами:

git reset --hard <commit-hash> 
git push -f <remote> <local branch>:<remote branch> 

Ответ 4

Мои два цента к предыдущим ответам: if

git push --force <remote> <the-hash>:<the remote branch>

все еще не работает, вы можете отредактировать раздел приема <your-remote-repo>.git/config:

[receive]
  #denyNonFastforwards = true
  denyNonFastforwards = false

Ответ 5

Если вы хотите использовать предыдущую версию файла, я бы рекомендовал использовать git checkout.

git checkout <commit-hash>

Выполняя это, мы вернем вас вовремя, это не повлияет на текущее состояние вашего проекта, вы можете прийти на магистраль    git main checkout

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

git checkout <commit-hash> -- file_name
git add .
git commit -m 'file brought from previous time'
git push

Преимущество этого заключается в том, что он не удаляет историю, а также не отменяет определенные изменения кода (git revert)

Подробнее здесь https://www.atlassian.com/git/tutorials/undoing-changes#git-checkout

Ответ 6

Сделайте одно, получить commit SHA no. таких как 87c9808, а затем,

  • перемещайте себя, это ваша голова к указанному фиксации (делая git reset --hard 89cef43//укажите свой номер здесь)
  • Далее выполните некоторые изменения в случайном файле, чтобы git попросил вас совершить это локально, а затем удаленно Таким образом, то, что вам нужно сделать сейчас. после внесения изменений git commit -a -m "trial commit"
  • Теперь нажмите следующую фиксацию (если это было сделано локально) от git кнопка начала оригинала
  • Теперь, что git спросит у вас, что

Ошибка: не удалось нажать несколько ссылок на 'https://github.com/YOURREPOSITORY/AndroidExperiments.git' Подсказка: обновления были отклонены, потому что конец вашей текущей ветки намек: его удаленный аналог. Интегрируйте удаленные изменения (например, hint: 'git pull...') перед повторным нажатием. **

  1. Таким образом, теперь вы можете сделать

git push --force origin master

  1. И, таким образом, я надеюсь, что это работает:)

Ответ 7

В GitLab вам может потребоваться установить ветвь незащищенную, прежде чем делать это. Это можно сделать в режиме [репо] > Настройки > Репозиторий > Защищенные ветки. Затем работает метод ответа от Mark.

git reset --hard <commit-hash>
git push -f origin master

Ответ 8

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

git checkout 000000

(где 000000 - это идентификатор коммита, куда вы хотите перейти) в вашей проблемной ветке, а затем просто создайте новую ветку:

git remote add [name_of_your_remote]

Тогда вы можете создать новый пиар, и все будет работать нормально!