Внесення невідомих змін у 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.