2016-09-07 2 views
1

Я знаю, что этот вопрос был дан ответ пару раз, но до сих пор, каждый отвечал решение, которое я пытался не работал для меня :(Git: Возврат к старой фиксации

Ситуация: У нас есть рабочий обязательство в основной ветке, к которой мы хотим вернуться. К сожалению, с тех пор было переброшено несколько изменений (в том числе слияния с другими ветвями).

Так что мне нужно сделать, чтобы получить ветвь мастера до последней рабочей commit еще раз - или проверить последнюю рабочую фиксацию и «переписать» последние коммиты на master с ней - на сервере (github) repo. Меня не волнует, если изменения, внесенные в последний рабочий коммит, будут потеряны, но это не будет если они сохранены.

Важно то, что другие ветки не тронуты !!!

мерзавец Revert не сделать работу несколько способов ...

+0

Вы попробовали это: http://stackoverflow.com/a/4114122/2394026.Посмотрите на 2-е решение абзаца «Отменить опубликованные коммиты с новыми коммитами» – Flows

+0

Я могу придумать по крайней мере два вопроса здесь, на SO, которые, кажется, решают вашу проблему. Что именно вы уже пробовали? – MikeMB

ответ

2

Мы можем попытаться заменить мастер ветвь с новой ветвью, слегка тусклой :)

Создать новую ветвь от работы совершить что вы знаете

  • если совершить это п-й уровень вниз от головы используйте git branch master-temp HEAD~n. замените n на уровень.

    • если у вас есть совершать хэша использование git branch master-temp <sha1>
  • переименовать текущий главный ветвь нового имени master-old или master-deprecated
  • Переименуйте новый филиал master-temp в master

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

Если какой-либо другой фиксатор требуется из старой ветви, вишня-выберите фиксацию новой ветви мастера.

Как @Flows добавил

  • Необходимость использования git push -force <branch> если нужно нажать на хозяина.

Локальная главная ветвь должна быть обновлена ​​с изменениями, а цикл dev следует, как и предусмотрено.

+0

После этого вы должны иметь возможность «push -force» в репозиторий, чтобы обеспечить обновление для всех пользователей. Но «сила» не всегда доступна и ее нужно делать осторожно. – Flows

+1

@Flows, Спасибо за добавление, Да, это должно быть выполнено тщательно в первый раз. «force push» будет сделан в первый раз, и все остальные пользователи должны обновить свои соответствующие ведущие ветки. – VinayVeluri

1

Я хотел бы предложить вам узнать коммит идентификатора последнего хорошего коммит, который вы хотите перейти к использованию:

git log --stat 

Тогда, при условии, что вы в главной ветви сделать GIT извлечет, что совершить ID

git checkout <commit id> 

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

+0

Спасибо. Тем не менее, после того, как я хочу снова зафиксировать, я получаю «HEAD, отсоединенный на 761f50b». Как я могу совершить, а затем нажать на главную ветку? – Xenonite

+0

С этого момента есть две вещи, которые вы можете сделать, так как ваша голова теперь отделена от желаемого фиксации: 1. Создайте новую ветку: 'git checkout -b <имя новой ветки>' Это создаст новую ветви из состояния отсоединенной головки. 2. Если, однако, вы постоянно устанавливаете мастер в этом состоянии, тогда просто переустановите головку мастера на этот идентификатор фиксации. Выполните следующие действия: 'git checkout master' Вы снова переключитесь на мастер-ветку со всеми нежелательными изменениями. Оттуда вам нужно сбросить HEAD до желаемого идентификатора фиксации: 'git reset 761f50b' –

Смежные вопросы