2011-12-18 2 views
2

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

Что было бы лучшим способом справиться с этим в git?

ответ

4

У вас есть два разумных варианта:

  1. git-stash Используйте. Просто введите git stash в stash, или git stash save some descriptive message, чтобы дать ему описательное сообщение. Затем вы можете повторно применить это позже с помощью git stash apply (или git stash pop).

  2. Сделать фиксацию, сбросить на нее тег, а затем вернуть обратно к родительскому. Затем вы можете получить свою работу позже, обратившись к тегу. Это было бы git commit -m 'Temp work'; git tag tempWork; git reset --hard HEAD^

+0

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

+0

@ Laurent: Нет. Сброс не касается тегов, так же как он не касается ветвей (кроме выписанного).Фактически, теги и ветви на самом деле то же самое, что и под капотом (они оба называются ссылками), за исключением того, что git распознает шаблон именования тегов и не позволяет вам проверять тег без создания отдельного HEAD. –

6

Именно поэтому git stash существует:

  1. git stash
  2. git checkout earlier_point
  3. git stash pop
0

Если предположить, что "плохие" коммиты были сделаны на мастера, они НЕ были sh ared с кем и 13d7 представляет последний «хорошо» совершить:

мерзавец контроль -b my_bad_branch
// создать новую ветку, которая содержит все, что мы сделали thusfar
мастер мерзавец фотографии
мерзавец сброса --hard 13d7
// сбросить указатель головы на мастера, чтобы указать на исправный совершить

Или, если они разделяют:

GIT Checkout -B my_bad_branch
мерзавец фотографии мастер
мерзавец вернуться 13d7
// создаем новые коммиты, которые расстегнуть плохие коммиты после 13d7
git push
// убедитесь, что каждый получает мастер, который исправляет плохие коммиты