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


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.