2011-12-20 7 views
1

Я использую git для управления моим проектом, но я мало разбираюсь в таких программах, поэтому часто использую их ненадлежащим образом (например, я совершаю много (несвязанных) изменения только в одном коммите). Я пытаюсь использовать их лучше.Revert many commit после создания ветки

Btw Я заметил, что я начал разрабатывать расширение моего проекта, который лучше вписывался бы в ветку. Итак, из git gui я создал новую ветку, которая является копией мастера. Теперь я хочу вернуть мастера к последнему фиксации, я сделал, что он не имеет отношения к проекту. Я знаю, что это за фиксация, но я не знаю, как вернуть все коммиты от HEAD к этому, и я не знаю, повлияет ли это на отрасль (было бы настоящей болью потерять всю новую работу ..)

Итак, как я могу это сделать?

Пс: обычно я использую git gui, но у меня нет проблем с использованием git bash. Я использую win7, и я управляю проектом java android в eclipse.

ответ

2

Если у вас есть ваша ветка, вернитесь к мастеру и сбросьте ее до желаемого фиксации с помощью git reset --hard commitid. Теперь «master» установлен на этот фиксатор, и ветка все еще указывает на фиксацию, которую вы настроили ранее.

Имена филиалов являются ссылками или альтернативными именами для конкретных коммитов. Сброс позволяет вам изменить фиксацию, на которую ссылаются ваши опорные точки, и заставить рабочее дерево соответствовать (с --hard)

+0

именно то, что мне нужно! Спасибо –

+0

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

2

Изменения в ветке master не повлияют на историю вашей новой ветки.

Если вы хотите изменить master «s ГОЛОВА быть на конкретный коммит, используйте reset:

git checkout master 
git reset --hard <commit id> 

Если последовательность событий были:

  1. Commit большие изменения.
  2. Создать новую ветку.

И вы просто хотите получить master обратно до предыдущей фиксации используйте reset:

git checkout master 
git reset --hard HEAD^ 

Если последовательность событий были:

  1. Commit большие изменения.
  2. Заменить другие изменения (которые должны оставаться в master).
  3. Создать новую ветку.

И вы просто хотите удалить big change совершить из master, оставляя все другие фиксаций нетронутыми, используйте revert:

git checkout master 
git revert <commit id> 

Если последовательность событий были:

  1. Commit большие изменения ,
  2. Заменить другие изменения (которые также следует удалить из master).
  3. Создать новую ветку.

И вы хотите, чтобы удалить все недавние совершает до конца и в том числе big change от master используйте reset:

git checkout master 
git reset --hard <big change commit id>^ 
+0

Замечательное объяснение, я уверен, что вы получите много +1. Было трудно решить принятый ответ, но на этот раз я выбираю другой, потому что он более краткий –

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

  • Нет связанных вопросов^_^