Откат локального и удаленного репозитория git на 1 фиксацию



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



Я проверил около 1000 файлов, которые мне не нужны, и мне бы не хотелось проходить через 1by1 и удалять их все из РЕПО.




  • у меня есть удаленный master филиала.

  • у меня есть местный master филиала.


они оба в то же пересмотр.



Я хочу откатить свой пульт на 1 фиксацию.



скажи мою историю на master и A--B--C--D--E.

Я хочу откатить свой локальный к D.

Затем нажмите его на удаленный, чтобы мой текущий хэш был D как удаленным, так и локальным.



у меня возникли проблемы, делая это.

Я использую Git Tower, но мне удобно с командной строкой. Какая-нибудь помощь?



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

499   10  
git

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 и должна работать и на других операционных системах (не претендуя на другие ОС, хотя)

для Windows машин, используйте:

git reset HEAD~1  #Remove Commit Locally

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

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

    Ничего не найдено.