Создать новую ветку - PullRequest
       1

Создать новую ветку

1 голос
/ 20 сентября 2019

Я хочу создать новую ветку 'B'.В настоящее время у меня есть основная ветвь (локальная и удаленная) и функциональная ветвь - 'A' (локальная).Функциональная ветка (A) удалена в удаленном режиме.Кроме того, у меня есть файлы с фиксированными и неотмеченными файлами в моей локальной ветви функций.Я хочу перейти к мастеру без потери каких-либо изменений и создать другую ветку, сначала зафиксировать ветку, а затем зафиксировать мои новые изменения.Как я могу сделать?Пожалуйста, предложите.

Ответы [ 3 ]

1 голос
/ 20 сентября 2019

edit: Теперь я вижу, что в некоторых местах вы писали, что у вас есть неотслеживаемые изменения, а в некоторых - непроверенные изменения.Это две разные вещи и должны обрабатываться по-разному.Если вы отслеживали, но не отметили изменения, вам следует git stash внести изменения перед проверкой новой ветви и git stash pop их после слияния A в новую ветку.

edit 2: Для неотслеживаемых изменений:Еще один способ убедиться, что они также спрятаны, а затем просто применить их к новой ветке - это использовать git stash с флагом -u, который также хранит неотслеживаемые изменения.Поток в этом случае будет

git branch newBranch master
git stash -u
git checkout newBranch
git merge A
git stash pop
git add && git commit

На основании дополнительной информации, которую вы предоставили в комментариях, я считаю, что вы пытаетесь прийти к следующему состоянию:

  1. master ветвь остается неизменной
  2. функциональная ветвь A остается неизменной
  3. Существует новая ветвь B ветвление от мастера, которая содержит как зафиксированные, так и неотслеживаемые изменения из ветви A

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

Теперь, чтобы решить ваш вопрос, я бы использовал следующие команды: 1. git branch newBranch master для созданияновая ветка от master ветки.
2. git checkout newBranch, чтобы оформить только что созданную ветку.Помните, что неотслеживаемые файлы не будут изменены, если они не отслеживаются в новой ветке, что, как я понимаю из вашего описания, не является таковым.Также помните, что все, что было зафиксировано в ветви A, останется там и не будет потеряно при переключении на другую ветку.
3. git merge A для объединения зафиксированных изменений из ветви A в новую ветку.
4. git add и git commit, чтобы добавить неотслеживаемые изменения и зафиксировать их в новой ветке.

Наконец, вы можете либо продолжить работу над новой веткой, либо, если вы хотите вернуться к ветви A, вы можете выполнить git checkout A, чтобы вернуться назад.Обратите внимание, что поскольку изменения, которые не были отслежены в ветви A, теперь отслеживаются в ветви B, если вы измените их снова и извлечете B, вы получите версию до новых изменений с A.

1 голос
/ 20 сентября 2019
  1. Сохранить текущие изменения git stash
  2. Мастер оформления заказа git checkout master
  3. Создать новую ветку git checkout -b <newbranchname>

На данный момент я немногозапутался, где вы хотите зафиксировать вашу текущую ветку.Я предполагаю, что вы пытаетесь зафиксировать его в новой ветке, которую вы создали в # 3.

Объединить изменения из начальной ветви в новую ветку git merge <initialbranch> Извлечь сохраненные изменения из stash git stash pop Добавить локальные изменения и зафиксировать
0 голосов
/ 20 сентября 2019

Простой ответ - использовать следующую команду для создания новой ветви из master без переключения.

git branch newBranch master

git branch принимает второй аргумент исходной ветви.

В качестве альтернативы вы можете использоватьgit stash или более тщательно git stash save "name description", чтобы сохранить ваш код в псевдо-коммите.Это не обрабатывает неотслеживаемые файлы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...