Я должен восстановить два ответвления Мерзавца, которые я так или иначе удалил во время нажатия.
Эти два ответвления были созданы в другой системе и затем продвинуты к моему "общему" (GitHub) репозиторий.
В моей системе я (по-видимому), получил ответвления во время выборки:
~/myfolder> git fetch
remote: Counting objects: 105, done.
remote: Compressing objects: 100% (58/58), done.
remote: Total 62 (delta 29), reused 0 (delta 0)
Unpacking objects: 100% (62/62), done.
From github.com:mygiturl
* [new branch] contact_page -> origin/contact_page
731d1bb..e8b68cc homepage -> origin/homepage
* [new branch] new_pictures -> origin/new_pictures
Право после этого я сделал нажатие для отправки моих локальных изменений до центрального repo. По некоторым причинам эти ответвления были удалены и из моей локальной системы и из центрального repo:
~/myfolder> git push
Counting objects: 71, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (43/43), done.
Writing objects: 100% (49/49), 4.99 KiB, done.
Total 49 (delta 33), reused 0 (delta 0)
To git@github.com:mygiturl.git
- [deleted] contact_page
+ e8b68cc...731d1bb homepage -> homepage (forced update)
bb7e9f2..e0d061c master -> master
- [deleted] new_pictures
e38ac2e..bb7e9f2 origin/HEAD -> origin/HEAD
731d1bb..e8b68cc origin/homepage -> origin/homepage
e38ac2e..bb7e9f2 origin/master -> origin/master
* [new branch] origin/contact_page -> origin/contact_page
* [new branch] origin/new_pictures -> origin/new_pictures
Не ужасно легко получить ответвления от их машины места рождения, таким образом, я хотел бы попытаться восстановить их со своего локального, если это возможно.
Вся информация "об отмене" мерзавца, которую я погуглил, имеет к с восстановлением потерянных фиксаций. Я не думаю, что это применяется здесь, так как у меня нет фиксации UIDs для этих ответвлений.
Я хотел бы знать, как я могу вернуть их. Я также хотел бы знать, как они были удалены во-первых и как я могу избежать этого в будущем.
Править: запросом вот моя repo конфигурация
user.name=Craig Walker
user.email=github@softcraft.ca
alias.unadd=reset HEAD
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
core.ignorecase=true
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
remote.origin.url=git@github.com:MyGitURL.git
remote.origin.mirror=true
branch.master.remote=origin
branch.master.merge=refs/heads/master
alias.undo=reset --hard
alias.test=push -f ci HEAD:master
alias.st=status
alias.ci=commit
alias.br=branch
alias.co=checkout
alias.ch=checkout
alias.df=diff
alias.lg=log -p
alias.who=shortlog -s --
remote.ci.url=ContinuousIntegrationGitURL
remote.ci.fetch=+refs/heads/*:refs/remotes/ci/*
branch.photo.remote=origin
branch.photo.merge=refs/heads/photos
remote.foo.url=FooGitURL
remote.foo.fetch=+refs/heads/*:refs/remotes/cynthia/*
branch.homepage.remote=origin
branch.homepage.merge=refs/heads/homepage
Я не эксперт. Но вы можете попробовать
git fsck --full --no-reflogs | grep commit
найти фиксацию HEAD удаленной ветки и вернуть их.
Ваши удаленные ветки не потеряны, они были скопированы в origin/contact_page и origin/new_pictures origin/new_pictures resultch, который вы показали (они также были вытолкнуты назад нажатием, которое вы показали, но они были вытолкнуты в refs/remotes/origin/ вместо refs/heads/). Проверьте git-журнал происхождения/contact_page
и git-журнал происхождения/new_pictures
, чтобы убедиться, что ваши локальные копии "актуальны" с тем, что, по вашему мнению, должно быть там. Если между получением и нажатием, которые вы показывали, на эти ветки были наложены какие-либо новые коммиты (из какого-то другого репозитория), вы, возможно, "потеряли" их (но, вероятно, вы могли бы найти их в другом репозитории, куда были наложены эти ветки в последний раз).
Похоже, что вы получаете информацию в обычном, "удалённом режиме" (удалённые ссылки/головки/ хранятся локально в ссылках/удалённых ссылках/диапазонах/), но нажимаете в "зеркальном режиме" (локальные ссылки/ наложены на удалённые ссылки/). Проверьте свои .git/config и примирите настройки remote.origin.fetch
и remote.origin.push
.
Перед попыткой внести какие-либо изменения, сделайте простой tar или zip архив или все ваше локальное repo. Таким образом, если вам не нравится то, что происходит, вы можете попробовать снова из восстановленного репо.
Если вы собираетесь использовать ваше удаленное репо как зеркало вашего локального, сделайте это:
git branch contact_page origin/contact_page &&
git branch new_pictures origin/new_pictures &&
git config remote.origin.fetch '+refs/*:refs/*' &&
git config --unset remote.origin.push &&
git config remote.origin.mirror true
В конце концов, вы также можете захотеть удалить все ваши ссылки/отправления/оригин/ссылки, так как они не полезны, если вы работаете в режиме зеркала (ваши обычные ветки заменяют обычные ветки удаленного слежения).
Но так как кажется, что вы используете это удаленное повторное использование с несколькими "рабочими" репозитариями, вы, вероятно, не захотите использовать режим зеркала. Вы можете попробовать следующее:
git config push.default tracking &&
git config --unset remote.origin.push
git config --unset remote.origin.mirror
Тогда, в конце концов, вы захотите удалить фальшивые ссылки/удаленные/завершенные ссылки в вашем удаленном репозитории: git push origin :refs/remotes/origin/contact_page :refs/remotes/origin/new_pictures ...
.
Попробуйте git push --dry-run
, чтобы увидеть, что бы он git push
делал, не внося никаких изменений в удалённое повторное использование. Если вам не нравится, что он собирается делать, восстановитесь из резервной копии (tar/zip) и попробуйте другой вариант.
Я думаю, что у вас неправильная конфигурация для 'fetch' и 'push', так что это привело к тому, что по умолчанию fetch/push не работает должным образом. К счастью, вы получили ветки, которые впоследствии удалили, поэтому вы должны быть в состоянии воссоздать их с помощью явного нажатия.
git push origin origin/contact_page:contact_page origin/new_pictures:new_pictures