Git удалить и воссоздать ветвь

Аннотация: Чтобы воспроизвести ошибку

  • создать ветку и проверить ее
  • пусть кто-то еще удалит его и создаст новую ветку с тем же именем
  • теперь git branch -D <branch> и git checkout -b <branch> --track origin/<branch>
  • на git pull вы получаете ! [rejected] <branch> -> origin/<branch> (non-fast-forward)

чтобы исправить это, вы также должны удалить информацию дистанционного отслеживания с помощью git branch -d -r origin/<branch>


OLD: кто-то удалил ветку разработки и создал ее, чтобы удалить все ветки функций и снова использовать мастер. Затем он добавил некоторые из ветвей функций, но не некоторые другие, которые создавали проблемы.

Я сделал git branch -D develop и git checkout -b develop --track origin/develop.

Когда я сейчас попробую git pull, я получу a ! [rejected] develop -> origin/develop (non-fast-forward)

a git remote show origin показывает

Local refs configured for 'git push': 
develop       pushes to develop     (local out of date)

Теперь я могу сделать git fetch origin develop и git merge FETCH_HEAD, но потом у меня есть некоторые конфликты, и он хочет подтолкнуть много вещей для развития. (может быть, старая ветвь совершает?) И с git reset --hard я вернулся туда, где трюк git показывает отклоненное сообщение.

Как лучше всего проверить восстановленную ветку?

EDIT: даже когда я делаю git branch -D develop, я получаю с git pull ! [rejected] develop -> origin/develop (non-fast-forward) и git remote show origin все (в актуальном состоянии)

EDIT: я не узнал его поначалу, потому что сообщение фиксации было таким же, но после reset HEAD находится на шаге, которого нет у удаленного, так что все еще на "старой" ветке?

Ответ 1

Мне также пришлось удалить ветвь отслеживания

git branch -d -r origin/develop

Ответ 2

Вы не можете вытащить, потому что теперь это другая ветка.

Возможно, вам стоит начать с нуля и получить ветвь remote develop как новую локальную ветвь!

git checkout -b new_develop --track origin/develop

После этого вы можете объединить или изменить между ветвями на локальном компьютере. Сравните деревья каталогов и другие файлы.

Если вы закончили редактирование, просто удалите локальную ветвь develop и переименуйте new_develop в develop.

Ответ 3

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