Мерзавец: Восстановите удаленное (удаленное) ответвление

Я должен восстановить два ответвления Мерзавца, которые я так или иначе удалил во время нажатия.

Эти два ответвления были созданы в другой системе и затем продвинуты к моему "общему" (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
89
задан Craig Walker 3 January 2010 в 00:27
поделиться

3 ответа

Я не эксперт. Но вы можете попробовать

git fsck --full --no-reflogs | grep commit

найти фиксацию HEAD удаленной ветки и вернуть их.

98
ответ дан 24 November 2019 в 07:19
поделиться

Ваши удаленные ветки не потеряны, они были скопированы в origin/contact_page и origin/new_pictures origin/new_pictures resultch, который вы показали (они также были вытолкнуты назад нажатием, которое вы показали, но они были вытолкнуты в refs/remotes/origin/ вместо refs/heads/). Проверьте git-журнал происхождения/contact_page и git-журнал происхождения/new_pictures, чтобы убедиться, что ваши локальные копии "актуальны" с тем, что, по вашему мнению, должно быть там. Если между получением и нажатием, которые вы показывали, на эти ветки были наложены какие-либо новые коммиты (из какого-то другого репозитория), вы, возможно, "потеряли" их (но, вероятно, вы могли бы найти их в другом репозитории, куда были наложены эти ветки в последний раз).

Fetch/Push Conflict

Похоже, что вы получаете информацию в обычном, "удалённом режиме" (удалённые ссылки/головки/ хранятся локально в ссылках/удалённых ссылках/диапазонах/), но нажимаете в "зеркальном режиме" (локальные ссылки/ наложены на удалённые ссылки/). Проверьте свои .git/config и примирите настройки remote.origin.fetch и remote.origin.push.

Сделайте резервную копию

Перед попыткой внести какие-либо изменения, сделайте простой tar или zip архив или все ваше локальное repo. Таким образом, если вам не нравится то, что происходит, вы можете попробовать снова из восстановленного репо.

Вариант A: Перенастройте как зеркало

Если вы собираетесь использовать ваше удаленное репо как зеркало вашего локального, сделайте это:

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

В конце концов, вы также можете захотеть удалить все ваши ссылки/отправления/оригин/ссылки, так как они не полезны, если вы работаете в режиме зеркала (ваши обычные ветки заменяют обычные ветки удаленного слежения).

Вариант B: Реконфигурация как обычный пульт дистанционного управления

Но так как кажется, что вы используете это удаленное повторное использование с несколькими "рабочими" репозитариями, вы, вероятно, не захотите использовать режим зеркала. Вы можете попробовать следующее:

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 ....

Test Push

Попробуйте git push --dry-run, чтобы увидеть, что бы он git push делал, не внося никаких изменений в удалённое повторное использование. Если вам не нравится, что он собирается делать, восстановитесь из резервной копии (tar/zip) и попробуйте другой вариант.

.
11
ответ дан 24 November 2019 в 07:19
поделиться

Я думаю, что у вас неправильная конфигурация для 'fetch' и 'push', так что это привело к тому, что по умолчанию fetch/push не работает должным образом. К счастью, вы получили ветки, которые впоследствии удалили, поэтому вы должны быть в состоянии воссоздать их с помощью явного нажатия.

git push origin origin/contact_page:contact_page origin/new_pictures:new_pictures
1
ответ дан 24 November 2019 в 07:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: