GitHub помнит идентификаторы фиксации?
в течение нескольких дней я переписывал install.sh файл для проекта Scrollback, и поскольку я был единственным, кто работал над этим и делал это локально, я продолжал совершать ammending ту же фиксацию, толкая время от времени к мастеру моей вилки. (Пожалуйста, игнорируйте лучшие практики здесь, я работал один).
в промежутке я помню, что по электронной почте кто-то показывает мою половину работы, URL https://github.com/sindhus/scrollback/blob/8d8f7f414383499c2ab6fec586b4c9665a41c7aa/install.sh
теперь из-за некоторой путаницы я потерял свою работу локально (думаю, rm-rf), я помню, что нажимал до этого. Так что github в какой-то момент увидел мой ребазированный идентификатор фиксации install.sh.
Как вы можете видеть, приведенный выше URL позволяет мне получить доступ к этому blob с помощью идентификатора фиксации. Однако я не могу получить доступ к нему локально, потому что это же РЕПО было принудительно.
мой вопрос как мне заставить github показать мне все идентификаторы фиксации для файла когда-либо? Все идентификаторы, которые он, возможно, знает для этого файла, независимо от пути. Если мне нужно использовать их API, я не против, но я хотел бы, чтобы некоторые идеи глубоко копались в этом.
спасибо!
4 ответов
мой вопрос Как получить github, чтобы показать мне все идентификаторы фиксации для файла когда-либо
если вы заставили нажать (git push --force
) ваша пересмотренная фиксация время от времени, что фиксация 8d8f7 была заменена на более недавняя фиксация с другим SHA.
это означает, что 8d8f7 теперь является только ссылкой в reflog из репозитория GitHub, который только поддержка GitHub может дать вам доступ к.
Клонирование РЕПО не будет включите 8d8f7 в локальную историю этого клонированного РЕПО.
GitHub "reflog": push события из API событий GitHub
на самом деле ОП Синдху указывает в комментариях на "восстановление коммит на GitHub в Reflog " by Джон Энгельман:
на API событий GitHub позволяет просматривать последние события:
curl https://api.github.com/repos/<user>/<repo>/events
в "pushEvent" смотреть для.
затем можно напрямую создать ветвь на GitHub, чтобы сделать эту фиксацию видимой снова (потому что больше не болтается, а ссылка на фактический объект, такой как ветвь):
curl -i -H "Accept: application/json" -H "Content-Type: application/json" -X POST -d '{"ref":"refs/heads/D-commit", "sha":"384f275933d5b762cdb27175aeff1263a8a7b7f7"}' https://api.github.com/repos/<user>/<repo>/git/refs
# JSON request
{
"ref": "refs/heads/D-commit",
"sha": "384f275933d5b762cdb27175aeff1263a8a7b7f7"
}
Я действительно не получил вопрос, поэтому есть некоторое решение:
чтобы увидеть все фиксации определенного файла:
git log --follow filename
.
чтобы проверить старую версию, найдите ответ здесь
клонируйте РЕПО локально, затем попробуйте это в своем файле:
git log --follow install.sh
Он должен показать вам идентификаторы, которые вы можете использовать на github.
Я не уверен, что есть единственный способ получить все версии файла через измененные коммиты. Однако reflog будет содержать информацию о более ранних, и вы можете извлечь их вручную. Ниже приводится пример.
Это мой первый коммит
echo "a" > a.txt && git add a.txt && git commit -m "Version 0"
после этого, еще несколько дополнений.
% echo "aa" > a.txt && git add a.txt && git commit --amend -m "Version 1"
% echo "aaa" > a.txt && git add a.txt && git commit --amend -m "Version 2"
% echo "aaaa" > a.txt && git add a.txt && git commit --amend -m "Version 3"
% echo "aaaaa" > a.txt && git add a.txt && git commit --amend -m "Version 4"
в то время как мой журнал только одна запись
% git log --oneline a8d6c39 версия 4
мой reflog имеет все
% git reflog master
a8d6c39 master@{0}: commit (amend): Version 4
cf87b8f master@{1}: commit (amend): Version 3
c45a91e master@{2}: commit (amend): Version 2
63c7f5a master@{3}: commit (amend): Version 1
f2b3336 master@{4}: commit (initial): Version 0
Итак,если вы хотите увидеть, как выглядел ваш файл в версии 4, Version3 и т. д. вы можете сделать это
% git show a8d6c39:a.txt
aaaaa
% git show cf87b8f:a.txt
aaaa
% git show c45a91e:a.txt
aaa
% git show 63c7f5a:a.txt
aa
% git show f2b3336:a.txt
a
в целом, хотя, "процесс" непрерывного изменения плохо, даже если вы единственный разработчик. Это одна вещь, которую вы должны сделать, чтобы исправить ошибки в последнем коммите.