Існує маса різних способів, залежно від того, як далеко ви знаходитесь і на якій галузі ви їх хочете.
Візьмемо класичну помилку:
$ git checkout master
... pause for coffee, etc ...
... return, edit a bunch of stuff, then: oops, wanted to be on develop
Тож тепер ви хочете, щоб ці зміни, яких ви ще не зобов’язали master
, відбулися develop
.
Якщо ви НЕdevelop
тим НЕ менш, метод тривіальний:
$ git checkout -b develop
Це створює нову develop
гілку починаючи з того місця, де ви зараз знаходитесь. Тепер ви можете взяти на себе зобов’язання, і нові речі все активовано develop
.
Ви єdevelop
. Подивіться, чи дозволить вам Git переходити, не роблячи нічого:
$ git checkout develop
Це або вдасться, або скаржиться. Якщо це вдасться, чудово! Просто покладіть. Якщо ні ( error: Your local changes to the following files would be overwritten ...
), у вас ще багато варіантів.
Найпростіше, мабуть, git stash
(як postсказали всі інші відповіді, які мене перебили на натискання ). Виконати git stash save
або git stash push
, 1 або просто простий, git stash
який короткий для save
/ push
:
$ git stash
Це змушує ваш код (так, він дійсно робить деякі зобов’язання), використовуючи дивний метод, не відгалужуючий y. Команди, які він робить, не є "жодною" гілкою, але тепер безпечно зберігаються у сховищі, тому тепер ви можете перемикати гілки, а потім "застосовувати" сховище:
$ git checkout develop
Switched to branch 'develop'
$ git stash apply
Якщо все піде добре, і результати вам подобаються, тоді слід git stash drop
сховатися. Це видаляє посилання на дивні не-гілки-y зобов’язання. (Вони все ще знаходяться в сховищі, і їх іноді можна отримати в надзвичайних ситуаціях, але для більшості цілей вам слід вважати, що вони вже втрачені в цей момент.)
Цей apply
крок робить злиття прихованих змін, використовуючи потужну базову техніку злиття Git, таку саму річ, яку він використовує, коли ви здійснюєте злиття філій. Це означає, що ви можете отримати «конфлікти злиття», якщо галузь, над якою ви працювали помилково, досить відрізняється від тієї галузі, над якою ви мали намір працювати. Тож корисно уважно ознайомитись з результатами, перш ніж припустити, що приховування застосовано правильно навіть якщо сам Git не виявив жодних конфліктів злиття.
Багато людей використовують git stash pop
, що короткочасно git stash apply && git stash drop
. Наскільки це добре, але це означає, що якщо програма призведе до безладу, і ви вирішите, що не хочете продовжувати цей шлях, ви не зможете легко повернути сховку назад. Тому я рекомендую окремо apply
перевіряти результати, drop
лише якщо / коли це задоволено. (Це, звичайно, вводить ще один момент, коли ви можете зробити ще одну перерву на каву і забути, що ви робили, повертатися і робити неправильну справу, так що це не ідеальне лікування.)
1save
в git stash save
старому дієслово для створення нового кубла. Git версія 2.13 представила нове дієслово, щоб зробити речі більш узгодженими pop
та додати більше параметрів до команди створення. Версія Git 2.16 формально заставила старе дієслово (хоча воно все ще працює в Git 2.23, що є останнім випуском на той момент, коли я це редагую).
git stash
git-scm.com/book/uk/Git-Tools-Stashing