Візьміть усі мої зміни на поточній гілці та перемістіть їх до нової гілки в Git


105

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

Тож зараз я хотів би зробити:

  1. Створіть нову гілку під назвою (скажімо) "край"
  2. Перемістіть усі змінені / незаймані файли на master до краю (таких, що master не змінився з моменту запуску виправлення помилки)
  3. Закінчи мою роботу на краю, зливайся назад у майстер

Як я можу це зробити?

Відповіді:


103

Якщо ви ще нічого не робили, ви вже в правильному положенні.

  1. Створіть нову галузь: git checkout -b edge
  2. Ваші файли не змінені. Тільки git addте, що потрібно і виконувати як завжди.
  3. Коли ви закінчите вчинення на edgeпереключіться назад masterз git checkoutі git merge edge.

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

87

Щоб додати відповідь JB, якщо ви вже почали робити кілька посилань на master, що закінчилося як "крайове" зусилля, ви можете:

git stash
git checkout -b edge master
git branch -f master SHA1_before_your_commits
git stash apply

упаковка для зберігання не є суворо необхідною, але просто для невмілих робочих змін, правда?
HaveAGuess

4
@HaveAGuess правильно. "Взяти всі мої зміни" я також включив поточні ще не додані зміни. Звідси приховування.
VonC

Чи не можна другий і третій рядки згортати в "git checkout -b краю master"?
Пол Лінч

@PaulLynch розгляду цих фіксацій (на master) , які повинні бути на edge які на master, так. Я відредагував відповідь.
VonC

Я не бачу, як git stashтут корисно, оскільки використання git checkout -bзовсім не змінює робоче дерево ...
user1686

13

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

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