Получение «error: no such commit» при попытке восстановления удаленной ветки?

Я уже сделал файл в Gerrit (его нажал), но я думаю, что я, к сожалению, удалил эту ветвь локально, из которой я совершил. Как это исправить? Пожалуйста помоги.

Я пытался

    git branch --contains 31436fd7200566967f85bfb1ee5425f9b599b908

но это показывает

    error: no such commit 31436fd7200566967f85bfb1ee5425f9b599b908

Изменить: Да, я установил локально локально, и я работал на ветке локально.

Я получил идентификатор фиксации с сайта Gerrit, который я совершил.

Хорошо, два дня назад сначала возникла проблема, когда я попытался совершить изменение, скажем А. Я попытался отправить его, используя «./logerrit submit master», но все, что я получил, было:

    Counting objects: 32, done.
    Delta compression using up to 4 threads.
    Compressing objects: 100% (32/32), done.
    Writing objects: 100% (32/32), 100.46 KiB | 0 bytes/s, done.
    Total 32 (delta 22), reused 0 (delta 0)
    remote: Resolving deltas: 100% (22/22)
    remote: Counting objects: 79789, done
    remote: Processing changes: refs: 1, done    
    To ssh://logerrit/core
    ! [remote rejected] HEAD -> refs/for/master (change 
    https://gerrit.libreoffice.org/54112 closed)
    error: failed to push some refs to 'ssh://logerrit/core'

Таким образом, он говорит, что идентификатор изменения одинаковый для двух коммитов - патч, который я совершаю, и патч, который уже был совершен мной несколько дней назад, и теперь сливается. Я пытался сделать все возможное, что упоминается при переполнении стека или любых других блогах - я пытался изменить идентификатор, так что на следующем «git commit -amend» git автоматически изменил идентификатор, это было бесполезно, поскольку я был получив ту же ошибку, я также попытался исправить конфликты, удалив строки <<<<<<<<<<< ==================================================== > Но я с этим согласен? Правильно ли это решить? Затем я попытался «git rebase master», а затем получил сообщение об ошибке:

    First, rewinding head to replay your work on top of it...
    Applying: smartart : test documents
    Using index info to reconstruct a base tree...
    M   sd/qa/unit/import-tests-smartart.cxx
    Falling back to patching base and 3-way merge...
    Auto-merging sd/qa/unit/import-tests-smartart.cxx
    CONFLICT (content): Merge conflict in sd/qa/unit/import-tests- 
    smartart.cxx
    error: Failed to merge in the changes.
    Patch failed at 0001 smartart : test documents
    The copy of the patch that failed is found in: .git/rebase- 
    apply/patch

    When you have resolved this problem, run "git rebase --continue".
    If you prefer to skip this patch, run "git rebase --skip" instead.
    To check out the original branch and stop rebasing, run "git rebase --abort".

Я попытался изменить ветвь, а затем попытался снова переустановить изменения с помощью мастера, поскольку он был уже обновлен, но это было бесполезно. Затем я удалил дополнительные ветви «локально», которые я создал, и по ошибке я мог удалить одну ветвь, из которой я передал Gerrit.

Теперь мой вопрос:

  1. Могу ли я восстановить удаленную ветвь в моей локальной системе? Является ли это возможным?
  2. Как разрешить проблемы с слиянием или ошибку, которую вы видели после перезагрузки. У меня есть серьезные сомнения, я могу что-то делать неправильно. Пожалуйста, помогите, пожалуйста, сообщите мне, если я ничего не расскажу.

И первый, и второй вопросы связаны с разными файлами / ветвью, но могут быть связаны друг с другом.

git,gerrit,

1

Ответов: 4


0

Поскольку вы уверены, что фиксация существует на пульте дистанционного управления, это должно найти:

git branch -r --contains 31436fd7200566967f85bfb1ee5425f9b599b908

Как только вы узнаете, в какой удаленной ветке <branch>требуется фиксация, давайте назовем ее , тогда вы сможете воссоздать эту ветвь локально с:

# delete same-named local branch (if it exists)
git branch -D <branch>
# fetch latest branches from remote
git fetch
# checkout branch from remote
git checkout <branch>

Aknowledgements:


0

Забудьте о фиксации 31436fd7200566967f85bfb1ee5425f9b599b908. Если вы действительно объединили свою фиксацию в Gerrit, она находится на удаленной ветке. Чтобы создать и проверить локальную ветку из удаленной ветви, выполните:

git checkout -b local-branch remotebranch

Пример:

git checkout -b my-feature origin/release1.0

0

Я не знаю, будет ли это соответствовать вашим потребностям, но вы должны иметь возможность проверять текущую ведущую ветку только с пульта, а затем применять те же изменения, которые вы пытаетесь получить. Если у вас нет каких-либо дополнительных изменений, о которых вы не упомянули, то это должно дать вам все, что вам нужно, чтобы воспроизвести изменения и двигаться дальше.

Эти шаги разрушат ваш локальный мастер и восстанавливают его с пульта:

# delete local master
git branch -D master
# fetch latest branches from remote
git fetch
# checkout master fresh from remote
git checkout master

Затем вручную скопируйте содержимое из ресурса gitweb:

https://gerrit.libreoffice.org/gitweb?p=core.git;a=commitdiff;h=31436fd7200566967f85bfb1ee5425f9b599b908

... в единственный файл, который был изменен в этом commit sd/qa/unit/import-tests-smartart.cxx.

Результатом является текущая ведущая ветвь с изменением, которое вы ищете. Затем я предполагаю, что вы либо создадите новую ветвь с git checkout -b <new-branch>или остаетесь в главном, а затем зафиксируете изменение. Наконец, вы можете нажать, если необходимо.


0

При использовании Gerrit возможно, что фиксация, которая попадает в репозиторий, имеет другой sha1, чем исходная фиксация, которую вы нажали. Это может произойти по нескольким причинам:

  • Это изменение будет изменено пользователем (либо в пользовательском интерфейсе, либо кем-то, загружающим его и нажав набор исправленных патчей), либо добавляется новый набор патчей
  • Изменения будут сфальсифицированы при отправке, если проект использует Rebase if Necessaryстратегию отправки
  • В проекте используется Cherry Pickстратегия, и создается новая фиксация для всех изменений в submit.

Вы можете увидеть фактическое commit sha1 в интерфейсе Gerrit. Точное местоположение этого зависит от того, какая версия Gerrit и какой UI (GWT или Polymer) используется.

Go, Геррит,