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
На основании дополнительной информации, которую вы предоставили в комментариях, я считаю, что вы пытаетесь прийти к следующему состоянию:
master
ветвь остается неизменной - функциональная ветвь
A
остается неизменной - Существует новая ветвь
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
.