Git создать ветку из текущего выбранного мастера?

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

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

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

Ответ 1

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

git checkout -b newbranch

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

git commit -a

Вернитесь к главной ветке:

git checkout master

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

Ответ 2

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

git stash
git checkout -b bravenewmaster
git stash apply

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

Ответ 3

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

git checkout -B <new_branch> <start point>

Где:

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

Подробнее см. < <29 > .