В течение нескольких дней я переписывал файл install.sh для проекта Scrollback, и, поскольку я был единственным, кто работал над этим и делал это локально, я продолжал коммит, изменяя тот же коммит, время от времени отправляя его мастеру моей вилки. (пожалуйста, не обращайте внимания на передовой опыт, я работал один).

В промежутках я помню, как отправил кому-то электронное письмо, показывающее мою половину работы, URL-адрес https: // github .com / sindhus / scrollback / blob / 8d8f7f414383499c2ab6fec586b4c9665a41c7aa / install.sh

Теперь из-за некоторого замешательства я потерял свою работу локально (подумайте, rm -rf), я помню, что до этого нажимал. Итак, github в какой-то момент увидел мой измененный идентификатор фиксации install.sh.

Как видите, указанный выше URL-адрес позволяет мне получить доступ к этому BLOB-объекту по идентификатору фиксации. Однако я не могу получить к нему доступ локально, потому что это же репо было принудительно отправлено.

Мой вопрос, как мне получить github, чтобы показать мне все идентификаторы фиксации для файла КОГДА-ЛИБО? Все идентификаторы этого файла, о которых он, возможно, знает, независимо от пути. Если мне придется использовать их API, я не против, но мне бы хотелось, чтобы у меня были идеи, чтобы углубиться в это.

Благодарность!

7
Sindhu S 10 Мар 2015 в 10:38

3 ответа

Я не уверен, есть ли единственный способ получить все версии файла через измененные коммиты. Однако 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

В моем рефлоге есть все

% 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, версия 3 и т. Д., Вы можете сделать это

% 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

В целом же "процесс" постоянного внесения поправок плох, даже если вы единственный разработчик. Это единственная вещь, которую вы должны сделать, чтобы исправить ошибки последней фиксации.

0
Noufal Ibrahim 29 Фев 2016 в 06:42

Клонируйте свое репо локально, затем попробуйте это в своем файле:

git log --follow install.sh

Он должен показать вам идентификаторы, которые вы можете использовать на github.

0
PJ Bergeron 10 Мар 2015 в 07:42

Я действительно не понял вопроса, поэтому есть какое-то решение:

Чтобы увидеть все фиксации определенного файла: git log --follow filename.

Чтобы оформить заказ на старую версию, найдите ответ здесь

1
Community 23 Май 2017 в 12:00