С git reset
«тянуть» или «объединять» всегда оставляет исходный конец текущей ветви в 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 означает повсюду "current" в git, но это не обязательно означает "текущую ветвь" (то есть отсоединенный HEAD).
Но это почти всегда означает «текущий коммит».
Это коммит "git commit
", построенный поверх, а "git diff --cached
" и "git status
" сравниваются с.
Это означает, что текущая ветвь только в очень ограниченных контекстах (именно тогда, когда мы хотим ветвь
имя, с которым нужно работать --- сбросить и увеличить подсказку ветки с помощью commit / rebase / etc.).
Reflog - это транспортное средство, возвращающееся во времени, и машины времени имеют интересное взаимодействие с понятием «ток».
HEAD@{5.minutes.ago}
может означать «разыменовать HEAD symref, чтобы узнать, на какой ветке мы находимся ПРЯМО СЕЙЧАС, а затем выяснить, где кончик этой ветви был 5 минут назад».
В качестве альтернативы это может означать «что такое коммит, который я бы назвал HEAD 5».
минут назад, например если бы я тогда сделал "git show HEAD".
git1.8.4 (июль 2013 г.) вводит вводит новую запись!
(на самом деле, это будет для 1.8.5 или 1.9, четвертый квартал 2013 года: повторно введено с commit 9ba89f4 )
Вместо того, чтобы вводить четыре заглавные буквы "HEAD
", вы можете сказать "@
" сейчас,
например "git log @
".
См. коммит cdfd948
Ввод 'HEAD
' утомителен, особенно когда мы можем использовать вместо него @
.
Причиной выбора '@
' является то, что оно естественным образом следует из синтаксиса ref@op
(например, HEAD@{u}
), за исключением того, что у нас нет ссылок и операций, а когда у нас их нет, имеет смысл предполагать 'HEAD
'.
Так что теперь мы можем использовать 'git show @~1
' и все такое доброе совершенство.
До сих пор '@
' было допустимым именем, но оно противоречит этой идее, поэтому давайте сделаем его недействительным. Вероятно, очень немногие, если таковые имеются, использовали это имя.
A сообщение в блоге за период 1.8.4-rc3 (14 августа 2013 г.) объявило, что эта функция была отменена и отложена (Спасибо Кекс за головы -до ).
Опять же, он снова вводится с commit 9ba89f4 (сентябрь 2013).
См. commit 2c2b664 :
Отменить "Добавить новый @
ярлык для HEAD
"
Это отменяет коммит cdfd948 , поскольку он не только применяется к "@
" (и формируется с модификаторами, такими как @{u}
, примененными к нему), но также влияет, например, на. «refs/heads/@/foo
», чего не должно быть.
Основная идея предоставления короткой руки может быть хорошей, и тему можно повторить позже, но давайте вернемся, чтобы не затрагивать существующие варианты использования на данный момент для следующего выпуска.