Допустим, у меня есть такой график:
A---B---C---D (master)
\
\-E---F (HEAD)
Если я это сделаю git log --all --oneline
, я получу все шесть моих коммитов.
Но если график
A---B---C---D (master, HEAD)
\
\-E---F
Я не увижу E и F. Могу ли я получить мерзавец, чтобы сказать мне все коммиты, в том числе те, что на ветках, которые не названы?
Спасибо
commit --amend
или,rebase
и коммитом, случайно осиротевшим, например, при работе с отдельным HEAD.git commit --amend
и т. Д. Выход из тупика, потерянные коммиты. Я сделал некоторую перебазировку и еще много чего и закончил с некоторыми коммитами, недоступными из каких-либо веток, и чувствовал себя немного грязным, оставляя их в репо. Теперь эта мысль уже не так тревожна. :)git fsck --unreachable
этого не предусмотрено. Я только что попробовал это. Лучше всего подходит--reflog
вариантgit log
, как ответил Кенорб . Что особенно приятно в этом, так это то, что в сочетании с ним--graph
вы легко анализируете визуальный контекст, очень похожий на тот, что показан в исходном вопросе. Например, попробуйте:git log --graph --all --oneline --reflog
Пытаться:
который перечисляет все коммиты git, делая вид, что все объекты, упомянутые в reflogs (
git reflog
), перечислены в командной строке как<commit>
.источник
Когда я решаю эту проблему, я использую следующую команду:
Это позволяет мне визуализировать недавние коммиты, которые стали безголовыми.
Я завернул это в скрипт помощника под названием
~/bin/git-reflog-gitk
.источник
when the tips of branches and other references were updated in the *local repository*
. Вы можете использовать,git log --reflog
если вы хотите сделать это для нелокальных изменений ссылокТо, что спасло мою жизнь, было следующей командой:
Там вы найдете экран с историческими коммитами, сделанными для этого:
На данный момент вам нужно только найти то,
HEAD@{X}
что вам нужно, создать временную ветку и перейти к ней следующим образом:Таким образом, у вас будет временная ветка с вашим потерянным коммитом, не перебирая и не ломая ваш Git-репозиторий
Надеюсь это поможет...
источник
Как @Kieran's Answer, но для консоли:
git log --oneline --all --graph --decorate $(git reflog | awk '{print $1}')
источник
git log --all
. Быстрый пример: после того, какgit reset --hard @^
ваш коммит HEAD @ {0} будет только в reflog, и, посколькуgit reflog
он не поддерживает,--graph
вы должны передать коммиты,git log --graph
чтобы получить визуальное представление.--reflog
вместо$(git reflog | awk '{print $1}')
git log --oneline --all --graph --decorate $(git reflog | awk '{print $1}')
с нимиgit log --oneline --all --graph --decorate --reflog
они почти идентичны, за исключением того, что --reflog включает такие детали, как записи WIP.reflog
почему бы не использоватьlog --reflog
вместо этого?Как я решаю эту проблему? Используйте
git fsck
и войдите!Сначала создайте файл, содержащий потерянные (недоступные) коммиты и BLOB-объекты. (ПРИМЕЧАНИЕ: если вы сделали что-то подобное
git gc
, сборщик мусора соберет все их коммиты, а вы их здесь не найдете!)Это дает вам такой файл:
Затем вы можете открыть этот файл в своем любимом текстовом редакторе, чтобы скопировать из него хэши коммитов / блогов. (* кашель * макрос vim отлично подходит для этого * кашля *)
Теперь вы можете выйти из этого коммита с чем-то вроде
git log --oneline <commit hash>
. Кроме того, должен работать gitk, tig или любой другой git viewer.В вашем случае, если вы найдете хеш для коммита F, журнал покажет вам что-то вроде этого,
Быстро и просто! Теперь вы можете найти контекст за всеми этими висячими коммитами.
PS Да, я знаю, поздний пост, ну да ладно, кто-то может найти это здесь и найти это полезным. (Скорее всего, я через 6 месяцев, когда я снова Google это)
источник
Мне повезло восстановить коммит, посмотрев на reflog, который был расположен на
.git/logs/HEAD
Затем мне пришлось прокрутить файл до конца , и я нашел потерянный коммит.
источник
Мы
git log
иногда не очень хорошо получаем детали всех коммитов, поэтому чтобы посмотреть это ...Для Mac: зайдите в свой проект git и введите:
чтобы просмотреть все ваши коммиты в этом, или:
чтобы увидеть, что вы все делаете в этом,
тогда вы можете редактировать в любом своем любимом браузере.
источник
@bsimmons
Затем создайте ветку для каждого:
Теперь многие инструменты покажут вам графическую визуализацию этих потерянных коммитов.
источник
Если вы используете графический интерфейс Git Extensions, он может показать вам графическую визуализацию висячих коммитов, если вы отметите «Просмотр -> Показать ссылки на журналы». Это покажет висячие коммиты в дереве, как и все остальные. Таким образом, будет легче найти то, что вы ищете.
Смотрите это изображение для демонстрации. Коммиты C2, C3, C4 и C5 на изображении висят, но все еще видны.
источник
спас меня! Я потерял свою при слиянии HEAD и не смог найти свои последние коммиты! Не отображается в дереве исходников, но
git log --reflog
показывает все мои локальные коммиты доисточник