Як здійснити зміни до нової гілки


151

Я щойно змінив галузь. Як я можу внести зміни до іншої галузі?

Я намагаюся використовувати:

git checkout "the commmit to the changed branch" -b "the other branch"

Однак я не думаю, що це правильно робити, тому що в цьому випадку я створюю нову гілку замість того, щоб вносити зміни до "іншої гілки".

Чи слід використовувати замість неї таку команду?

git merge "the other branch"

Лише один вчинок чи кілька?
— Карл Норум

Відповіді:


268

git checkout -b your-new-branch

git add <files>

git commit -m <message>

Спочатку перевірте свою нову філію. Потім додайте всі файли, які ви хочете скористатися, для постановки. Нарешті, введіть усі файли, які ви тільки що додали. Ви можете git push origin your-new-branchпізніше зробити так, щоб ваші зміни відображалися на пульті дистанційного керування.


1
оскільки я отримав нову гілку від git checkout v3.0 (гілка до того, як я внесла зміни) new-branch, чи все-таки потрібно використовувати "git add <files>"?
— user1988385

Ви можете зробити, git statusщоб побачити, що наразі ставиться, а що ні.
— Джон Броді

5
Чому і так, git addі git commit -a?
— Карл Норум

11
Це не git checkout -b your-new-branchзамість git checkout your-new-branch?
— Кот Шредінгера

1
а як бути, якщо я вже відслідковував файли і хочу перейти на нову гілку, щоб додати ці файли до новоствореної гілки?
— жопа-король якесь питання

58

Якщо ви не зробили змін

Якщо ваші зміни сумісні з іншою галуззю

Це так з питання, оскільки ОП хоче взяти на себе нову гілку, а також застосовується, якщо ваші зміни сумісні з цільовою гілкою, не викликаючи перезапис.

Як і у прийнятій відповіді Джона Броді, ви можете просто оформити нову гілку та взяти на себе роботу:

git checkout -b branch_name
git add <files>
git commit -m "message"

Якщо ваші зміни несумісні з іншою гілкою

Якщо ви отримаєте помилку:

error: Your local changes to the following files would be overwritten by checkout:
...
Please commit your changes or stash them before you switch branches

Тоді ви можете приховувати свою роботу, створити нову гілку, а потім розмістити зміни в сховці та вирішити конфлікти:

git stash
git checkout -b branch_name
git stash pop

Це буде так, ніби ви внесли ці зміни після створення нової гілки. Тоді ви можете взяти на себе зобов’язання:

git add <files>
git commit -m "message"

Якщо ви внесли зміни

Якщо ви хочете зберегти комісії у первинному відділенні

Дивіться відповідь Карла Норума з вишні, яка є правильним інструментом у цьому випадку:

git checkout <target name>
git cherry-pick <original branch>

Якщо ви не хочете зберігати комісії у початковій гілці

Дивіться відповідь joeytwiddle на цей потенційний дублікат . Виконайте будь-який з вищезазначених кроків, якщо це доречно, а потім поверніть оригінальну гілку:

git branch -f <original branch> <earlier commit id>

Якщо ви перенесли свої зміни на загальний пульт, наприклад, GitHub, не слід намагатися здійснити цей відкат, якщо ви не знаєте, що робите.


3
Кожен повинен спробувати цей код. Оскільки більшість людей, які шукають відповіді, у вашому наявному коді вже є деякі зміни.
— Sushin Pv

2
Чому ви додали скрипт та скриньку? Коли ви оформили замовлення в новій гілці, ваші зміни будуть доступні для додавання та фіксації, не потрібно зберігати їх.
— Трістан

@Tristan Ви маєте рацію, якщо зміни сумісні, а файли не перезаписуються. Інакше я отримую error: Your local changes to the following files would be overwritten by checkout: ... Please commit your changes or stash them before you switch branches.Ви хочете написати нову відповідь чи відредагувати мою відповідь? Якщо ні, я можу сам її відредагувати.
— miguelmorin

Гаразд, ви абсолютно праві. Я думаю, ви повинні доповнити свою відповідь, щоб показати, що це приносить крім прийнятої відповіді.
— Трістан

@Tristan Я це зробив. ОП запитувала про нову галузь, і тоді прийнята відповідь є правильною. Я вважаю, що моя відповідь корисна. Це стало довгою відповіддю, і я радий редагувати будь-які відгуки.
— miguelmorin

24

Якщо я правильно розумію, ви взяли на себе зобов’язання changed_branchі хочете скопіювати це зобов’язання other_branch? Легко:

git checkout other_branch
git cherry-pick changed_branch

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