git push - где мой хэш коммита - журнал git не отображается в репозитории MIRROR истории

Я клонировал из репозитория GIT (последний). На данный момент последний коммит в репозитории был: a10cb09

Я клонировал с помощью следующей команды (где я установил переменную r = 1-й переданный параметр (для имени репо, также известного как ansible) в моем крошечном скрипте-оболочке:

  git clone [email protected]:mycompany/${r}.git

и сделал несколько изменений и выполнил следующие простые шаги: (т. е. внесение изменений, добавление файла/папки, фиксация и отправка), и я получил новый хэш фиксации a08c263 (короткий).

[[email protected] ~/aks/always-latest-ws-repogroup/ansible] $ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Untracked files:
  (use "git add <file>..." to include in what will be committed)

    roles/mycompany.mycompany-ansible/
    mycompany-ansible.yml

nothing added to commit but untracked files present (use "git add" to track)
[[email protected] ~/aks/always-latest-ws-repogroup/ansible] $ 


[[email protected] ~/aks/always-latest-ws-repogroup/ansible] $ git add mycompany-ansible.yml roles/mycompany.mycompany-ansible

[[email protected] ~/aks/always-latest-ws-repogroup/ansible] $ git commit -m "mycompany.mycompany-ansible playbook and role" mycompany-ansible.yml roles/mycompany.mycompany-ansible 
[master a08c263] mycompany.mycompany-ansible playbook and role
 14 files changed, 1771 insertions(+)
 create mode 100644 roles/mycompany.mycompany-ansible/README.md
 create mode 100644 roles/mycompany.mycompany-ansible/defaults/main.yml
 create mode 100644 roles/mycompany.mycompany-ansible/handlers/main.yml
 create mode 100644 roles/mycompany.mycompany-ansible/meta/.galaxy_install_info
 create mode 100644 roles/mycompany.mycompany-ansible/meta/main.yml
 create mode 100644 roles/mycompany.mycompany-ansible/tasks/apt_install.yml
 create mode 100644 roles/mycompany.mycompany-ansible/tasks/main.yml
 create mode 100644 roles/mycompany.mycompany-ansible/tasks/yum_install.yml
 create mode 100644 roles/mycompany.mycompany-ansible/templates/10-statsd.conf.j2
 create mode 100644 roles/mycompany.mycompany-ansible/templates/10-mycompany.conf.j2
 create mode 100644 roles/mycompany.mycompany-ansible/templates/proxy_auth_credentials.set.j2
 create mode 100644 roles/mycompany.mycompany-ansible/templates/telegraf.conf.wfcopy.j2
 create mode 100644 roles/mycompany.mycompany-ansible/templates/mycompany-proxy.conf.j2
 create mode 100644 mycompany-ansible.yml
[[email protected] ~/aks/always-latest-ws-repogroup/ansible] $ 


[[email protected] ~/aks/always-latest-ws-repogroup/ansible] $ git push
Counting objects: 21, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (19/19), done.
Writing objects: 100% (21/21), 18.65 KiB | 0 bytes/s, done.
Total 21 (delta 2), reused 0 (delta 0)
remote: Resolving deltas: 100% (2/2), completed with 2 local objects.
To github.com:repogroup/ansible.git
   a10cb09..a08c263  master -> master
[[email protected] ~/aks/always-latest-ws-repogroup/ansible] $  


[[email protected] ~/aks/always-latest-ws-repogroup/ansible] $ git log -1 --pretty=format:%h 
a10cb09


[[email protected] ~/aks/always-latest-ws-repogroup/ansible] $ git rev-parse a08c263
a08c263
fatal: ambiguous argument 'a08c263': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

Когда я иду в репозиторий Github, чтобы увидеть свои последние изменения, его там нет. git log также не показывает мою фиксацию (вместо этого она показывает мне хэш фиксации, который был вверху до моей фиксации). Что я пропустил?

Кажется, я даже не вижу длинного хэша, используя git rev-parse a08c263 (маленький хеш).

$ git remote -v
origin  [email protected]:mycompany/ansible.git (fetch)
origin  [email protected]:mycompany/ansible.git (push)

а также

$ git reflog 
a10cb09 HEAD@{0}: clone: from [email protected]:mycompany/ansible.git

PS: если я выполню те же действия для других репозиториев, находящихся в группе репозиториев mycompany, и все эти репозитории успешно получат мои изменения фиксации/передачи в github, если я выполню аналогичные действия.

ОБНОВЛЕНИЕ: одна из страниц моего браузера все еще была открыта. После того, как я сделал commit+push, я смог увидеть свое зафиксированное изменение (новый хэш a08c263 как последний коммит на верхнем уровне репо). Когда я щелкнул по нему, он открыл эту прикрепленную страницу браузера, где я могу увидеть ПОЛНЫЙ хэш, а также папку/файлы. Если я захожу по открытому URL-адресу браузера для своего коммита, он все еще там (поэтому Git что-то сохранил), но если щелкнуть назад на корневом уровне репозитория, то есть ansible, последний коммит — это не мой коммит+пуш (новый хэш), а список a10cb09 как последний (который, согласно снимку, является родительским хешем для моего недавно сгенерированного хэша). Глянь сюда:

введите здесь описание изображения

Теперь возникают основные вопросы:

  1. Если бы у меня не была открыта эта страница браузера, то как бы я получил длинный хеш и свою папку/файлы (содержимое)?

  2. Если бы я клонировал из github.com/mycompany/ansible (репозиторий), который был ЗЕРКАЛОм репозитория ansible, фактически размещенного в Phabricator (где фактический URL-адрес клона исходного репозитория будет отличаться от того, что я использовал в моем крошечном скрипте выше), тогда какую команду / параметр я должен был использовать, чтобы отправить мое новое изменение в исходный репозиторий Phabricator ansible?

  3. Если фиксация + отправка были завершены с моей стороны, почему git log и другие подобные команды git не отображают никакой информации о моем новом хэше?


person AKS    schedule 22.12.2016    source источник
comment
Есть ли шанс, что вы отправили в источник вместо своего собственного репозитория? Поскольку вы не определили, на что нажимать, по умолчанию будет исходный мастер. Что определяется как происхождение? git remote -v   -  person Christia    schedule 22.12.2016
comment
@Christia Но тогда почему коммит даже не отображается локально в журнале?   -  person Tim Biegeleisen    schedule 22.12.2016
comment
Опубликуйте несколько лучших записей git reflog, пожалуйста   -  person Christia    schedule 22.12.2016
comment
@Christia Я добавил эти детали в свой пост. Я имею в виду, что я делаю шаги для других репозиториев, и все они каждый раз показывают мою фиксацию. Репозиторий ansible также является родственным репозиторием для этих других репозиториев, но те же шаги превратились в описанную выше проблему. Для тестирования я попытался повторить еще одно тестовое изменение / добавить / зафиксировать / отправить в 2 репозитория, один получил мое изменение, а ansible снова нет. Если источник был неправильным, то он не должен был показывать мне последний хэш коммита (в выводе git push как a10cb09..a08c263 верно)? Также добавлен вывод git reflog. Я согласен с Тимом Б.   -  person AKS    schedule 22.12.2016
comment
Итак, вот что я нашел. Группа репозиториев mycompany на github.com имеет множество репозиториев (одним из них является ansible). Но все эти другие репозитории размещены на самом github.com, но этот репозиторий ansible, который я клонировал, НЕ ХОСТИРУЕТСЯ на github.com. Репозиторий ansible в моем случае размещен в Phabricator и ЗЕРКАЛИРОВАН на Github.com (откуда я клонировал). Теперь, читая дополнительную git справку, кажется, что если бы я сделал git push --mirror, то это сработало бы (??), теперь, как я могу вернуть те же папки/файлы, используя этот хэш a08c263, и попробовать git push --mirror / -all снова с/ о любые доработки.   -  person AKS    schedule 22.12.2016
comment
ИЛИ мне нужно клонировать его с правильного URL-адреса репо (где он фактически размещен), а не с URL-адреса клонирования MIRROR. Самое большое беспокойство вызывает то, как я могу вернуть свою папку/файлы из этой a08c263 фиксации обратно в свою рабочую область. git log или git rev-parse ничего не показывает/выдает ошибку, так как этот хэш не существует согласно Git. Очень возможно, что по какой-то сумасшедшей причине Phabricator стер мою фиксацию, как только она была зафиксирована/нажата), откуда я клонировал (зеркальный URL-адрес github.com для ansible).   -  person AKS    schedule 22.12.2016
comment
Видит ли git a08c263 между фиксацией и отправкой?   -  person Antony Hatchkins    schedule 22.12.2016
comment
@AntonyHatchkins Согласно командам git commit + push, они успешно завершились, дав новый хэш (уходя от последнего хэша... нового хэша). Я не упоминал ранее, но я уверен, что мой коммит+пуш (как только это было сделано) был виден в репозитории github.com/mycomany/ansible (как последний коммит). Я даже щелкнул, чтобы увидеть дифференциал. Я немного запутался: почему Phabricator удалил его (если он сделал это по какой-то причине), куда локально делись данные фиксации хэша, почему этот мерзавец не показывает мне детали моей фиксации, используя этот новый хеш (хотя он был клонирован с зеркала, кого это волнует?)   -  person AKS    schedule 22.12.2016
comment
когда я сказал, что видел свои изменения в репозитории Github.com/mycompany/ansible как последний коммит для хэша a08c263, я прав. К счастью, страница, которую я просматривал, щелкнув последнюю фиксацию нового хэша, все еще была открыта в моем браузере, и я рад, что также могу видеть полный хэш + файлы, зафиксированные в фиксации/нажатии. Я загружу изображение в качестве доказательства. Посещение этой ссылки все еще работает, показывает мне файлы/папки, которые я зафиксировал, но если я нажму на корневой репозиторий в Github, он не покажет мою фиксацию как последнюю, даже если снимок показывает родительский хэш и новый хеш. Родительский хэш является последним на уровне репо.   -  person AKS    schedule 22.12.2016
comment
Вы пробовали искать полный хэш? Может там коллизия мелких хэшей?   -  person Antony Hatchkins    schedule 22.12.2016
comment
Вы уверены, что у вас нет локально настроенных push-триггеров? Может быть какие-то git-плагины?   -  person Antony Hatchkins    schedule 22.12.2016


Ответы (1)


Посещение этой ссылки все еще работает, показывает мне файлы/папки, которые я зафиксировал, но если я нажму на корневой репозиторий в Github, он не покажет мою фиксацию как последнюю

Это означает либо следующее:

  • ветвь удаленного репо по умолчанию не является главной
  • или какой-то хук (после получения?) устанавливает или сбрасывает HEAD на другой SHA1

это репозиторий, который я клонировал, НЕ РАЗМЕЩЕН на github.com. ansible репозиторий в моем случае размещен в Phabricator и ЗЕРКАЛИРОВАН на Github.com (откуда я клонировал) его

Это может объяснить перезагрузку.

Самое большое беспокойство вызывает то, как я могу вернуть свою папку/файлы из этого коммита a08c263 обратно в свою рабочую область. git log или git rev-parse ничего не показывает/выдает ошибку, так как этот хэш не существует согласно Git.

Конечно: клонируйте из github в другую локальную папку, добавьте предыдущую папку клонирования в качестве удаленного репо, выберите и выберите свой коммит:

git clone https://github.com/... newfolder
cd newfolder
git remote add old ../path/to/first/clone
git fetch old
git cherry-pick a08c263
git push

Но вам нужно убедиться, что у вас есть право вернуться к репозиторию GitHub.

person VonC    schedule 22.12.2016
comment
Я согласен с вашим выводом. Любая идея, если эта ссылка Github (которая по-прежнему показывает мой полный новый хеш, содержимое папки и файла) все еще работает, то почему в командной строке (окно терминала), где я сделал git commit + push, не отображается никакой информации об этом новом hash, в то время как Git показывает это для URL-адреса фиксации. - person AKS; 22.12.2016
comment
@ArunSangal в вашем первом локальном репозитории, где вы сделали коммит [master a08c263], что вам показывает git status? - person VonC; 22.12.2016
comment
On branch master Your branch is up-to-date with 'origin/master'. nothing to commit, working tree clean может быть потому, что я уже отправил изменение, поэтому в этом нет ничего нового ИЛИ я только что стер все репо (т.е. сделал свежий клон git в ту же структуру папок) - person AKS; 22.12.2016
comment
@ArunSangal, я полагаю, git log -1 не показывает вам ваш последний коммит? (что кажется логичным, учитывая, что это p-to-date с «origin/master»). Можете ли вы проверить тот же git status после git fetch? Вы видите свой коммит с git log --all --branches --oneline --decorate --graph? - person VonC; 22.12.2016
comment
Да, приведенная выше красочная команда git log не указала мой новый хэш. Отображение последнего хэша (который был родительским хэшем для моего нового хэша фиксации). git log -1 также не указал мою фиксацию, когда я проверял ее, прежде чем клонировал ее заново. Итак, есть ли способ получить содержимое, поскольку этот URL-адрес ссылки фиксации для моего снимка все еще показывает содержимое папки/файла? Эта ссылка по-прежнему показывает верхний/последний хеш из вывода git log в качестве родительского хэша для моего нового хэша (зафиксированная версия) - person AKS; 22.12.2016
comment
@ArunSangal Что произойдет, если вы попытаетесь проверить (в своем локальном клоне) непосредственно эту потерянную фиксацию? git checkout a08c263 - person VonC; 22.12.2016
comment
for git checkout ... Если я даю использовать короткую форму хеша, то я получаю: error: pathspec 'a08c263' did not match any file(s) known to git. и если я даю длинный/полный хеш, то я получаю: fatal: reference is not a tree: a08c263788aa77960e48861b78254e01a087df9 - person AKS; 22.12.2016
comment
@ArunSangal странно ... Я не понимаю, почему этот коммит был стерт из вашего локального репо. Если вы попытаетесь сделать новый коммит с фиктивными изменениями, этот коммит тоже исчезнет? - person VonC; 22.12.2016
comment
Это хороший вопрос :). Я попробую это обязательно. Я думаю, что, возможно, стер свое последнее рабочее пространство (после многих попыток понять, почему мой новый хэш не отображается). Итак, вместо того, чтобы делать git push, должен ли я сделать git push --all или git push --mirror, чтобы довести мои изменения до размещенного репо (которое, я думаю, находится в Phabricator), или я должен клонировать из фактического размещенного URL-адреса размещенного клона? Я имею в виду, если commit + push был выполнен успешно и не выдал ошибку, то куда он делся??? :) это должно было быть в выводе журнала даже после того, как я повторно клонировал в новую папку, так как git должен поддерживать ее - person AKS; 22.12.2016
comment
Клонирование @ArunSangal из GitHub кажется более безопасным (при условии, что у вас есть право вернуться к этому репо) - person VonC; 22.12.2016
comment
@ArunSangal на удаленной стороне, ваш толчок был потерян из-за зеркального характера репозитория Phabricator. На локальной стороне... Я не знаю, почему ваш локальный коммит нигде не найден (ни в журнале ссылок, ни в журналах) - person VonC; 22.12.2016
comment
Я думаю, что у меня есть право доступа, иначе git push давно бы заплакал, верно? - person AKS; 22.12.2016
comment
@ArunSangal да, вы увидите это сразу при первом git push в репозитории GitHub (не Phabricator). - person VonC; 22.12.2016