Відповіді:
git reset --soft HEAD~1
слід робити те, що ти хочеш. Після цього у вас з’являться перші зміни в індексі (видно з git diff --cached
), а ваші новіші зміни не здійснюються поетапно. git status
буде виглядати приблизно так:
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: foo.java
#
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: foo.java
#
Потім ви можете зробити git add foo.java
та здійснити обидві зміни одночасно.
git commit --amend
робить; але зі значно складнішим робочим процесом. Це не дає відповіді на запитання ОП, незважаючи на те, що він дав хороший напрямок ( git reset
).
git reset --soft HEAD~
Використання:
git reset HEAD^
Це робить "змішане" скидання за замовчуванням, яке виконає те, що ви просили; помістіть foo.java у нестандартному режимі, видаливши останню комісію.
git reset --soft
не працювало, але все- git reset HEAD^
таки
Для мене наступним є більш читабельний (таким чином кращий) спосіб зробити це:
git reset HEAD~1
Замість 1
цього може існувати будь-яка кількість комітетів, які ви хочете знецінити.
git reset --soft
якраз для цього: це як git reset --hard
, але не торкається файлів.
git reset
"схоже, git reset --hard
але не торкається файлів." Ні git reset --soft
. git reset --soft
буде проводити зміни, тож вам не доведеться додавати їх до постановки на випадок, якщо ви хочете їх здійснити, але вам доведеться git reset
їх (так, вдруге і без цього --soft
), якщо ви цього не зробите. Тож ця відповідь коротка, але неправильна.
"Скидання" - це спосіб скасувати зміни локально. Здійснюючи зміни, ви спершу вибираєте зміни, які слід включити до " git add " - це називається "постановка". І як тільки зміни відбуватимуться, то ви їх " git вчиняєте ".
Щоб відмовитися від інсценізації чи зйомки, ви "скидаєте" ГЛАВУ. На гілці HEAD - це змінна git, яка вказує на останню версію. Отже, якщо ви ставились, але не зробили цього, ви " git reset HEAD ". Це резервне копіювання до поточної ГОЛА, знімаючи зміни зі сцени. Це скорочення " git reset - змішана HEAD ~ 0. "
Якщо ви вже здійснили, HEAD вже просунувся, тому вам потрібно створити резервну копію до попереднього виконання. Тут ви « скиньте HEAD ~ 1 » або « скиньте HEAD ^ 1 » або « reset HEAD ~ » або « reset HEAD ^ » - всі посилання HEAD мінус одна.
Який кращий символ, ~ чи ^? Подумайте про ~ tilde як про один потік - коли в кожному фільмі є один з батьків і це лише ряд змін послідовності, тоді ви можете посилатись на резервну копію потоку, використовуючи тильду, як HEAD ~ 1, HEAD ~ 2, HEAD ~ 3, для батьків, бабусь і дідусів, прапрадідів тощо (технічно це пошук першого батька в попередніх поколіннях).
Коли відбувається злиття, то коміти мають більше одного батька. Ось тоді ^ карета вступає в гру - ви можете згадати, бо вона показує гілки, що збираються. Використовуючи карету, HEAD ^ 1 буде першим батьком, а HEAD ^ 2 буде другим батьком одного вчинку - наприклад, матір та батько.
Отже, якщо ви просто повертаєтеся одним стрибком на одному з батьківських зобов'язань, то HEAD ~ і HEAD ^ є рівнозначними - ви можете використовувати будь-який.
Також скиданням може бути --soft , - змішаний або --hard . М'яке скидання просто відновлює фіксацію - вона скидає HEAD, але не перевіряє файли з попередньої фіксації, тому всі зміни в робочому каталозі зберігаються. І - скидання програмного забезпечення навіть не очищає стадію (також відомий як індекс ), тому всі встановлені файли все ще будуть на сцені.
- змішане скидання (за замовчуванням) також не перевіряє файли з попередньої фіксації, тому всі зміни зберігаються, але етап очищається. Ось чому простий " git reset HEAD " очиститься зі сцени.
--Hard скидання скидає ГОЛОВА, і він очищає грунт, але він також перевіряє всі файли з раніше фіксації і тому він переписує будь-які зміни.
Якщо ви натиснули комісію на віддалений сховище, скидання не працює так добре. Можна скинути локально, але коли ви спробуєте натиснути на віддалений, git побачить, що ваша локальна HEAD стоїть за HEAD у віддаленій гілці і відмовиться натискати. Можливо, ти зможеш змусити натиснути, але git дійсно не любить цього робити.
Крім того , ви можете збирати свої зміни , якщо ви хочете зберегти їх, перевірити раніше фіксації, зніміть збирати зміни, стадії їх, створити новий Комміт, а потім натисніть що.
Скажімо, ви хочете змінити нестабільні зміни до n комітетів,
Якщо здійснюють хеші, такі:
Потім запустіть таку команду:
git reset hn
Тепер ГОЛА буде в hn + 1. Зміни від h1 до hn будуть не встановлені.