Git Branch новичок - как поменять? - PullRequest
8 голосов
/ 27 апреля 2011

Не уверен, что это правильный способ работы с ветвями.

  • У меня было это приложение на структуре A.
  • Я создал ветвь Z, пока был в этой структуреA (но я продолжал работать над основной веткой).
  • Работая (над основной веткой), я изменил эту структуру и в итоге все испортил.:)
  • Я никогда не фиксировал и не добавлял эти новые файлы в реп.

Запрос:

  • Мне нужно вернуться к существующей структурена последнем коммите.Отменить все незафиксированные изменения, а также удалить новые файлы и папки, которые могли быть добавлены.

Как это можно сделать?

Ответы [ 3 ]

10 голосов
/ 27 апреля 2011

Если вы создали отдельную ветвь, которая испортилась, все, что вам нужно сделать, это переключиться обратно на ту, на которой вы были раньше: git checkout A (при условии A - это название ветки, в которой вы были ...или, может быть, это master).

Вы можете удалить плохую ветвь позже, если хотите, с помощью git branch -d <branchname> и, возможно, добавить -f, если есть незакрытые коммиты.

Редактировать: Если в вашем хранилище содержится много плохих изменений, которые вы хотите удалить, вы можете использовать git reset --hard HEAD, чтобы отменить их.Если есть новые файлы (не отслеживаемые git), git clean -fd удалит их все.Очевидно, используйте по усмотрению, поскольку они не будут восстановлены git.

4 голосов
/ 27 апреля 2011

Мне нужно вернуться к структуре «снимок» в ветви Z

$ git checkout A
$ git branch -d Z
$ git branch Z
$ git reset --hard HEAD~3
$ git checkout Z

На английском:

Удалите ветку "Z" и перенастройте ее из текущего состояния "A".

Сбросить вашу ветку А за три коммита. Это ПРИМЕР - три, вероятно, не правильная глубина в вашей истории, чтобы вернуться к ней. Измените это число на правильное (и используйте git log, чтобы выяснить, какое количество коммитов назад разошлись ваши ветви).

Переключитесь на свою ветвь Z и подтвердите, что ваши изменения ранее в «A» теперь находятся в «Z».

3 голосов
/ 27 апреля 2011

Я подозреваю, что вы создали ветку только с:

git branch Z

когда вы на самом деле хотели его создать, а также переключиться на него. Вы можете создать ветку и переключиться на нее, используя флаг -b для git checkout, например:

git checkout -b Z

Теперь вам нужно отменить изменения, внесенные вами в основную ветку. Это отменит фиксацию и заставит индекс выглядеть так же, как и до фиксации:

git checkout master
git reset --soft HEAD^

Затем переключитесь на Z и зафиксируйте изменения из индекса (уже подготовлены):

git checkout Z
git commit -m "blah blah"

Надеюсь, это поможет.

Да, да, избегайте прямой работы с мастером, если только это не простая ошибка.


Пожалуйста, сохраните ваш ответ, потому что это содержит важные понятия, которые я должен Понимаю. Это не сработало. Что я нужно: взять ветку Z и поместить ее как мастер - это возможно?

Конечно, это так. Вы можете сделать это разными способами. Если есть только один коммит, вы можете объединить ветвь Z в master, чтобы получить этот коммит в master. Но я предполагаю, что вам вообще не нужен коммит в ветке Z. Затем вы можете сделать то же самое, но поменять ветки, например ::1010

git checkout Z
git reset --soft HEAD^
git checkout master
git commit -m "blah blah"
...