Внесення невідомих змін у Master до нової гілки від Git


Відповіді:


151

Ви можете просто здійснити заїзд у тестову гілку, а потім здійснити фіксацію. Ви не втрачаєте своїх невтішних змін, переходячи до іншої гілки.

Припустимо, ви перебуваєте в головній галузі:

git checkout test
git add .
git add deletedFile1
git add deletedFile2
...
git commit -m "My Custom Message"

Я не дуже впевнений у видалених файлах, але, мабуть, вони не включаються під час використання git add .


12
Іноді замовлення не вдасться, оскільки ваші зміни суперечать цій галузі. Ви можете спробувати перевірити -m для злиття.
— Джоні К. Сеппанен

2
Я спробував це, але у мене з’явилася помилка: помилка: Ваші локальні зміни до наступних файлів будуть перезаписані замовою. Будь ласка, введіть свої зміни або сховіть їх, перш ніж ви зможете перемикати гілки.
— ishwr

Хоча це спрацює, відповідь, в якій сказано, що слід використовувати скриньку, слід віддавати перевагу, IMO. Можливо, лише особистий вибір, але це більш чистий робочий процес, логічно і вводить STASH, що є корисною командою.
— Патрік

Варіант "-b" відсутній, оскільки заголовок говорить про те, що питання стосується "нової" гілки.
— Гунтрам

195

Також ви можете створити нову гілку та перейти до неї, виконавши:

git checkout -b new_branch
git add .

Я використовую це постійно, тому що я завжди забуваю запустити нову гілку, перш ніж розпочати редагування коду.


3
те саме питання, що і @jouni відмітив для іншої відповіді - ви можете зіткнутися з труднощами об'єднання гілки назад у головний, якщо додаткові зміни суперечать оригінальним змінам. ІМО ця нитка відповідає на питання краще: stackoverflow.com/questions/556923 / ...
— JPW

Короткий, милий і заспокійливий ... "Я цим постійно користуюся ..."
— MοδεMεδιϲ

1
Не забудьте зробити поступки в new_branch. Якщо ви перейдете назад у головну гілку та відновите змінені файли, ви також втратите їх у new_branch.
— петрсин

36

Чому б просто не використовувати git stash. Я думаю, це більш інтуїтивно зрозуміло, як копіювати та вставляти.

$ git branch
  develop
* master
  feature1
  TEST
$

У вашому поточному відділенні є кілька файлів, які ви хочете перемістити.

$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#      modified:   awesome.py
#
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#
#      modified:   linez.py
#
$
$ git stash
Saved working directory and index state \
  "WIP on master: 934beef added the index file"
HEAD is now at 934beef added the index file
(To restore them type "git stash apply")
$
$ git status
# On branch master
nothing to commit (working directory clean)
$
$
$ git stash list
stash@{0}: WIP on master: 934beef ...great changes
$

Перехід до іншої гілки.

$ git checkout TEST

І подати заявку

$ git stash apply
# On branch master
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#
#      modified:   awesome.py
#      modified:   linez.py
#

Мені це також подобається, git stashтому що я використовую git flow, яка скаржиться, коли ви хочете закінчити гілку функцій, в той час як у вашому робочому каталозі ще є зміни.

Так само, як @Mike Bethany, це трапляється зі мною весь час, тому що я працюю над новою проблемою, забуваючи, що я все ще на іншій галузі. Таким чином, ви можете зберігати свою роботу git flow feature finish...і git stash applyв новій git flow feature start ...галузі.


2
git stash- це мій бажаний спосіб боротьби із неспроможними змінами. Це, звичайно, інтуїтивний метод, коли ви думаєте про це як вирізання та вклеювання.
— Меттью Мітчелл

Це здається мені хорошим підходом. Це спрацювало без проблем.
— Юнус Недім Мехель

Не знав, що ти можеш це зробити, і це добре працювало. Відчуває себе трохи інтуїтивніше, ніж інші методи.
— glaucon

Я думаю, що приховувати це більш професійно, а не використовувати git checkout, а потім додавати. Я думаю, що ваша відповідь повинна мати 100+ голосів.
— Матросов Олександр

1
@ Καrτhικgit stash --include-untracked
— 2Toad

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.