Від скидання git
"тягнути" або "злити" завжди залишає початковий наконечник поточної гілки в ORIG_HEAD
.
git reset --hard ORIG_HEAD
Якщо скинути його важко, ви повернете ваш індексний файл та робоче дерево назад до цього стану та скидає кінчик гілки до цього фіксу.
git reset --merge ORIG_HEAD
Перевіривши результат злиття, ви можете виявити, що зміна в іншій гілці незадовільна. Запуск " git reset --hard ORIG_HEAD
" дозволить вам повернутися туди, де ви були, але він відкине ваші локальні зміни, яких ви не хочете. « git reset --merge
» Зберігає свої локальні зміни.
Перш ніж застосовувати будь-які виправлення, ORIG_HEAD встановлюється на кінчик поточної гілки.
Це корисно, якщо у вас виникли проблеми з декількома комісіями, як-от запуск "git am
" на неправильній гілці або помилка в комітетах, яку легше виправити зміною поштової скриньки (наприклад, + помилки в рядках "Від:").
Крім того, злиття завжди встановлює ' .git/ORIG_HEAD
' у вихідний стан HEAD, тому проблемне злиття можна усунути за допомогою ' git reset ORIG_HEAD
'.
Примітка: звідси
HEAD - це рухомий вказівник. Іноді це означає поточну гілку, іноді - ні.
Тож HEAD НЕ є синонімом "поточної гілки" скрізь.
HEAD означає "струм" скрізь у git, але це не обов'язково означає "поточна гілка" (тобто окрема HEAD).
Але це майже завжди означає "поточне зобов'язання".
Це команда, яка " git commit
" будується на вершині, а " git diff --cached
" і " git status
" порівнювати проти.
Це означає, що поточна гілка є лише у дуже обмежених контекстах (саме тоді, коли ми хочемо, щоб ім’я гілки працювало на --- скидання та нарощування кінчика гілки через комісію / перезавантаження / тощо).
Reflog - це засіб, який повертається у часі та часі, машини мають цікаву взаємодію з поняттям "струм".
HEAD@{5.minutes.ago}
може означати "повалення HEAD symref, щоб дізнатись, на якій гілці ми знаходимось ПРАВО ЗАРАЗ, а потім дізнаємось, де верхівка цієї гілки була 5 хвилин тому".
Крім того, це може означати "що є зобов'язанням, яке я б назвав HEAD 5 хвилин тому, наприклад, якби я" git show HEAD "тоді".
git1.8.4 (липень 2013) вводить запровадили нове позначення!
(насправді це буде для 1.8.5 або 1.9, Q4 2013: знову введено в команду 9ba89f4 )
Замість того, щоб набрати чотири великі літери " HEAD
", ви можете сказати " @
" зараз,
наприклад " git log @
".
Див. Комісію cdfd948
Введення тексту " HEAD
" стомлює, особливо коли ми можемо використовувати " @
" замість цього.
Причина вибору " @
" полягає в тому, що це природно випливає із ref@op
синтаксису (наприклад HEAD@{u}
), за винятком того, що у нас немає жодної поправки та жодної операції HEAD
.
Тож тепер ми можемо користуватися ' git show @~1
', і все це доброю доброю.
Досі ' @
' було дійсною назвою, але воно суперечить цій ідеї, тому давайте зробимо її недійсною. Напевно, дуже мало людей, якщо такі є, використовували це ім'я.
Повідомлення в блозі протягом періоду 1.8.4-rc3 (14 серпня 2013 року) оголосило, що ця функція була скасована і відкладена (Дякую Cupcake за голову ).
Знову ж таки, він знову вводиться з комітом 9ba89f4 (вересень 2013).
Див. Команду 2c2b664 :
Скасувати "Додати нову @
ярлик для HEAD
"
Це повертає до виконання cdfd948 , оскільки це не просто стосується " @
" (і форм з модифікаторами, як @{u}
застосовано до нього), але також впливає, наприклад, на " refs/heads/@/foo
", що не повинно.
Основна ідея подання короткої руки може бути хорошою, і тему можна повторити ще пізніше, але давайте повернемося, щоб зараз не впливати на існуючі випадки використання для майбутнього випуску.
HEAD
зараз (майбутній git1.8.4) '@
'! Дивіться мою відредаговану відповідь нижче