Питання Перемістіть існуючу, неприйнятну роботу до нової гілки в Git


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

Як я можу перемістити існуючі незв'язані зміни до нової гілки та скинути мій поточний?

Я хочу скинути мою поточну гілку, зберігаючи існуючу роботу над новою функцією.


2511
2017-09-08 15:57


походження




Відповіді:


Використовуйте наступне:

git checkout -b <new-branch>

Це дозволить залишити поточну гілку як таку, створити та здійснити перевірку нової філії та зберегти всі ваші зміни. Тоді ви можете зробити згоду:

git add <files>

і зобов'язуйтесь до своєї нової гілки:

git commit -m "<Brief description of this commit>"

Зміни в робочому каталозі та зміни, внесені в індекс, ще не належать до жодної галузі. Це зміниться, коли ці зміни закінчаться.

Ти не маєш скинути ваша оригінальна філія, він залишається так, як є. Останнє вчинення <old-branch> все одно буде таким же. Тому ти checkout -b а потім здійснити.


2965
2017-09-08 15:59



Просто щоб переконатись, мені потрібно виконати незавершену функцію ДО Я перезавантажую свою оригінальну гілку? Або чи будуть ці незадіяні файли зберігатися незалежно від здійснення? - Dane O'Connor
FYI: зміни в робочому каталозі та внесені в індекс зміни не відносяться до гілки. git checkout -b <new branch> зміни, в яких ці зміни закінчиться. - Jakub Narębski
Якщо у вас вже є філія і ви хочете перенести свої зміни в існуючу гілку, перевірку stackoverflow.com/questions/556923/... - Chirantan
Якщо ви хочете перевести вашу нову гілку до віддаленого сховища: stackoverflow.com/questions/2765421/... - Dewayne
@ JDSmith: uncommit changes не належать до будь-якої галузі. Вони лише проживають у робочому каталозі git checkout ./git reset --hard буде безповоротно видалити їх - knittl


Альтернативно:

  1. Зберегти поточні зміни до темпу витримки:

    $ git stash

  2. Створіть нове відділення на основі цього стишу та перейдіть на нову гілку:

    $ git stash branch <new-branch> stash@{0}

Порада. Використовуйте клавішу табуляції, щоб зменшити набір імен у пам'яті.


254
2018-06-19 00:18



Якщо інша гілка вже існує, ви можете просто переключитися на неї з перевіркою, потім git stash apply. - Archonic
Краще прийнятого рішення - Jonathan Landrum
Я не розумію підказку "Порада: використовуйте клавішу табуляції, щоб зменшити набір назв прихованої пам'яті". Чи не "stash @ {0}" ім'я? Я не можу це успішно запустити. - Herbert
Чому це краще, ніж прийнята відповідь stackoverflow.com/a/1394804/754997 ? - Chris Page
Я не розумію, чому це краще, ніж прийнята відповідь git checkout -b <new branch name> - Noitidart


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

  1. Скопіюйте вашу поточну історію до нової гілки, залучаючи також незмінні зміни:

    git checkout -b <new-feature-branch>
    
  2. Тепер змусити оригінальну "брудну" гілку відкинути назад: (без перемикання на нього)

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

    Наприклад:

    git branch -f master origin/master
    

    або якщо ви зробили 4 копійки:

    git branch -f master HEAD~4
    

УВАГА: Виходить, що git branch -f master origin/master воля скинути інформацію про відстеження для цієї галузі. Отже, якщо ви налаштували свій master галузь натиснути на десь крім origin/master то ця конфігурація буде втрачена.

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


35
2018-02-12 07:44



Це відповідає на питання, який дещо відрізняється від того, що запитав оп. Я вирішив поставити цю відповідь тут, тому що саме там Google вивів мене, коли шукав відповідь. Фактичне питання, що стосується цієї ситуації тут. - joeytwiddle


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

git cherry-pick <commitID>

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


15
2017-11-30 20:58



Ніцце рішення для переміщення часткових змін у нову гілку ... оскільки ви можете здійснити те, що хочете зараз, призупинити всі інші зміни, перевірити гілку, з якої ви хочете відгалужити, вишня-вибрати, що вкладати в нову гілку, повернутися до початкової гілки, важко скинути назад фіксацію, потім виконати стиснення, додавання, фіксацію та співати аллелуя. - Meredith
@Меридіт, ха-ха, я щось подібне. Це чудово, якщо ви не плануєте свої зміни вперед ... і хто це робить;) - password
Спасибі, ви тільки що зберегли мою цифрову шию - Phil