Git создать ветку из текущего извлеченного мастера? - PullRequest
76 голосов
/ 21 сентября 2009

На сервере есть папка с контролем git, в которой извлечена основная ветка, и целая куча файлов была изменена и не зафиксирована. Есть ли способ для меня зафиксировать изменения в отдельной ветке, чтобы я мог вернуться к чистой версии?

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

(Да, я знаю, что это не то, как Git предназначен для работы, но это моя ситуация!) Любые идеи очень ценятся.

Ответы [ 3 ]

134 голосов
/ 21 сентября 2009

Прежде всего, перемещение в другую ветку на основе текущего HEAD выполняется следующим образом:

git checkout -b newbranch

Зафиксировать все изменения (при условии, что новые файлы не добавляются, в противном случае git add их):

git commit -a

Вернитесь в главную ветку:

git checkout master

Все ранее незафиксированные изменения будут в ветке newbranch, и master все равно будет в том состоянии, в котором он был без этих изменений.

14 голосов
/ 17 января 2016

Этот метод полезен:

git checkout -B <new_branch> <start point>

Где:

  • <new_branch> - это ваша новая ветвь (например, my_branch)
  • <start point> ваша начальная ветвь (master в вашем случае)
  • -B создает новую ветвь, начиная с <start point>, если она уже существует, затем сбросьте ее на (она не будет работать как -b, когда ветвь уже существует)
  • иногда -m может быть полезно указывать при переключении веток, при этом выполняется трехстороннее объединение между текущей веткой и содержимым вашего рабочего дерева (полезно для сценариев).

Подробнее см. man git-checkout.

13 голосов
/ 21 сентября 2009

Вы всегда можете сохранить свои изменения.

git stash
git checkout -b bravenewmaster
git stash apply

Также имейте в виду, что если вы фиксируете «неправильную» ветвь, вы всегда можете переместить эту ветку назад, потому что ветвь - это не что иное, как указатель на коммит.

...