Є два способи впоратися з цим. Що простіше, залежить від вашої ситуації
Скидання
Якщо фіксація, від якої ви хочете позбутися, була останньою, і ви не зробили жодної додаткової роботи, яку ви можете просто використати git-reset
git reset HEAD^
Повертає вашу філію до виконання безпосередньо перед поточною ГОЛОВОЮ. Однак це фактично не змінює файли у вашому робочому дереві. Як результат, зміни, які були в цьому комітеті, відображаються як змінені - це як команда "відключити". Насправді у мене є псевдонім зробити саме це.
git config --global alias.uncommit 'reset HEAD^'
Тоді ви можете просто використовувати git uncommit
в майбутньому резервне копіювання одного зобов’язання.
Кабачки
Розбивання коміту означає поєднання двох чи більше комісій в одне. Я роблю це досить часто. У вашому випадку вам започаткована наполовину виконана функція, і тоді ви закінчите її і знову почнете виконувати відповідне повідомлення про постійну фіксацію.
git rebase -i <ref>
Я говорю вище, тому що хочу уточнити, що це може бути будь-яка кількість повернень. Запустіть git log
і знайдіть зобов’язання, від якого ви хочете позбутися, скопіюйте його SHA1 та використовуйте його замість <ref>
. Git переведе вас в режим інтерактивного ребазування. Він покаже всі зобов'язання між вашим поточним станом та тим, що ви поставите замість цього <ref>
. Тож якщо <ref>
10 комісій назад, це покаже всі 10 комітів.
Перед кожним комітом воно матиме слово pick
. Знайдіть зобов’язання, від якого ви хочете позбутися, та змініть його pick
на fixup
або squash
. Використовуючи fixup
просто відкидання, яке виконує повідомлення, і об'єднує зміни зі своїм безпосереднім попередником у списку. Thesquash
Ключове слово робить те ж саме, але дозволяє редагувати повідомлення фіксації на знову поєднанні фіксації.
Зауважте, що комісії будуть повторно здійснені в тому порядку, який вони з’являться у списку, коли ви виходите з редактора. Отже, якщо ви здійснили тимчасове зобов’язання, а потім виконали іншу роботу над тією ж гілкою та виконали функцію в пізнішій послідовності, то використання ребаза дозволить вам пересортувати коміти та скасувати їх.
УВАГА:
Випуск змінює історію - НЕ робіть це для будь-яких зобов’язань, якими ви вже поділилися з іншими розробниками.
Шташинг
Надалі, щоб уникнути цієї проблеми, розгляньте можливість використання git stash
тимчасово зберігати неприйняті роботи.
git stash save 'some message'
Це дозволить зберегти ваші поточні зміни в бік вашого списку сховищ. Зверху наведена найбільш явна версія команди скриньки, що дозволяє в коментарі описати те, що ви зберігаєте. Ви також можете просто запустити git stash
і більше нічого, але жодне повідомлення не зберігатиметься.
Ви можете переглянути свій список сховища за допомогою ...
git stash list
Це покаже вам всі ваші статистичні дані, над якими гілками вони були зроблені, а також повідомлення та на початку кожного рядка та ідентифікатор цього сховища, яке виглядає приблизно так, stash@{#}
де # - це його позиція у масиві статей.
Щоб відновити приховану скриньку (що можна зробити на будь-якій гілці, незалежно від того, де вона була створена спочатку), ви просто запустіть ...
git stash apply stash@{#}
Знову ж, там # - це позиція в масиві стасів. Якщо сховище, яке ви хочете відновити, знаходиться в 0
положенні - тобто, якщо це було останнє сховище. Тоді ви можете просто запустити команду, не вказуючи позицію приховування, git припустить, що ви маєте на увазі останню:git stash apply
.
Так, наприклад, якщо я виявлю, що я працюю над неправильною гілкою - я можу виконати наступну послідовність команд.
git stash
git checkout <correct_branch>
git stash apply
У вашому випадку ви пересувалися гілками трохи більше, але ця ж ідея все ще діє.
Сподіваюсь, це допомагає.
git stash