Отменить много коммитов после создания ветки - PullRequest
1 голос
/ 20 декабря 2011

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

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

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

Ps: обычно я использую git gui, но у меня нет проблем с использованием git bash. Я использую Win7, и я управляю Java-проектом Android в Eclipse

Ответы [ 2 ]

2 голосов
/ 20 декабря 2011

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

Если вы хотите изменить заголовок master на определенный коммит, используйте reset :

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

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

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

И вы просто хотите вернуть master до предыдущего коммита, используйте reset :

git checkout master
git reset --hard HEAD^

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

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

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

git checkout master
git revert <commit id>

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

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

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

git checkout master
git reset --hard <big change commit id>^
2 голосов
/ 20 декабря 2011

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

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

...