2013-02-21 3 views
0

У меня есть репозиторий git, в котором я сделал немало изменений и нажал на удаленное местоположение.Полный сброс git-репозитория

Я хочу сбросить репозиторий на 3 фиксации с первого, надавить на удаленный филиал. Я рассматриваю, выполнив следующие действия: - сброс

  • мерзавец
  • мерзавец толчок происхождения мастер

Пару сомнений относительно того же?

  • Будет ли это правильным путем?
  • Я удалил определенные файлы и добавил несколько файлов после третьего фиксации (с первого). Я хочу изменить все это до состояния третьего фиксации (вернуть удаленные файлы, удалить вновь добавленные). Как я мог это сделать?

Спасибо.

[EDIT] Я соло разработчик этого проекта на данный момент времени. Также существует немало коммитов, сделанных так, что Id, а не вручную, должен возвращать каждый из них.

ответ

1

Поскольку вы уже отправили свои файлы в удаленный репозиторий, не рекомендуется выполнять команду git reset, потому что другие разработчики должны обновлять свои локальные репозитории и получать новые обновления. Лучшим решением является выполнение команды git revert, которая генерирует новую фиксацию, которая отменяет то, что было сделано предыдущим фиксатором. Для получения дополнительной информации, взгляните на это link.

Но если вы были единственным разработчиком этого проекта, вы можете удалить коммиты. Для этого вы можете использовать команду: git reset

git reset --hard hash 

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

Поскольку вы меняли историю проекта, вы не можете выполнить простой push. Вам потребуется флаг -f, чтобы заставить обновление:

git push -f origin master 

Однако некоторые удаленные хранилища есть hook, запрещающее вас заставить обновить историю. Вам нужно будет удалить этот крючок, чтобы вы могли выполнять обновление истории. Если вы не можете этого сделать, вам нужно будет использовать команду git revert.

+0

Спасибо, я не упомянул об этом раньше, но плохо обновил вопрос с помощью этой информации: я на данный момент единственный разработчик, и есть немало ревертов, поэтому я бы предпочел сделать это в одном выстрел. Есть ли варианты, которые вы бы предложили? – 2013-02-21 06:13:14

+0

Ответ обновлен. –

1

Вы можете использовать

git reset --hard <3rd commit> 

, чтобы получить все файлы обратно и удалить вновь добавить из них.

Затем используйте

git push -f origin master 

заставить обновить пульт.

+0

Я, кажется, получаю это сообщение, когда я пытаюсь использовать метод http://dpaste.com/960297/ – 2013-02-21 06:11:42

+0

«Git pull --rebase», похоже, является тем, что предлагается в большинстве мест, однако, это приведет к изменениям, которые я имел просто удалено. – 2013-02-21 06:19:09

+0

@uki Вы установили 'receive.denyNonFastForwards' в' true', это отклонит 'git push -f' – pktangyue