Как я могу отменить последние несколько коммитов из ветки в голом репо? - PullRequest
0 голосов
/ 14 сентября 2011

Этот вопрос швы, чтобы справиться с перемоткой коммитов из основной ветки. Могу ли я использовать аналогичную команду git reset --soft на ветке в репо или я должен пытаться понять смысл git revert?

В конечном итоге я хотел бы перемотать две ветви двумя или тремя коммитами (не только последними) в голом репо.

Ответы [ 2 ]

6 голосов
/ 14 сентября 2011

Мне все еще не ясно, где находится репо. Вы говорите, что оно голое, но у вас тоже должно быть где-то не голое.

Если вы просто хотите перемотать локальные ветви , тогда вы хотите использовать git reset. Так что если у вас есть локальная ветка beta, вы можете перемотать ее так:

$ git checkout beta
$ git reset --hard HEAD~2 

Это сбрасывает 3 коммита: HEAD, HEAD~1 и HEAD~2. Они будут собирать мусор примерно через 90 дней, поэтому вы сможете вернуть их при необходимости.

Если у вас есть удаленное хранилище с именем origin (оно пустое) и вы хотите перемотать туда ветку , то вы можете сделать это с помощью принудительного толчка . Допустим, вы нажали 3 коммита на beta, прежде чем они были готовы. Вы можете сохранить их в своем локальном проекте, но удалить их из удаленного репозитория, как это:

$ git push -f origin beta~3:beta

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

Если у вас только есть репо , вы можете принудительно сбросить ветку следующим образом:

$ git branch -f beta beta~3

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

5 голосов
/ 14 сентября 2011

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

Вы можете запустить git reset (без --soft, что имеет смысл тольков рабочей копии), чтобы просто сбросить хранилище обратно в предыдущее состояние.Это отменяет коммиты после выбранного коммита, так что вы потеряете эту историю навсегда.Если есть люди с удаленными рабочими копиями хранилища, они неожиданно обнаружат, что их рабочие копии не синхронизированы (и они могут непреднамеренно повторно ввести изменения при запуске git push).

Если это ваше собственноехранилище, и вы не делитесь этим с кем-либо еще, git reset в порядке.В противном случае, git revert, вероятно, является лучшим выбором, поскольку он оставляет след в истории хранилища и хорошо взаимодействует с удаленными рабочими копиями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...