Nano Hash - криптовалюты, майнинг, программирование

Как вернуть удаленные файлы после принудительной отправки

Я пытался решить проблему, из-за которой не мог тянуть или толкать. Казалось, проблема была в одном файле. Я запустил git push -f origin master, и теперь большинство файлов в удаленном репозитории (Bitbucket) исчезли. Как мне вернуть их с этой историей коммитов? Я попробовал git revert HEAD~1, и это не сработало (изменил 1 файл, но не восстановил). Я запустил git log и вижу там все свои коммиты, поэтому я думаю, что git все еще знает о них в каком-то смысле - я очень не понимаю git.

04.08.2020

  • git — это система управления версиями: каждый коммит по-прежнему существует, но. Когда вы толкаете силой, вы берете на себя полную ответственность и подотчетность за то, что произойдет дальше. Определите коммит, который вам нравится, и попробуйте git checkout <sha of that commit> 04.08.2020
  • @DaemonPainter Identify a commit you like как? Через git log? 04.08.2020
  • да, гит лог, или через битбакет проверяй график или список коммитов 04.08.2020
  • Не могли бы вы показать пример вывода вашего журнала git? 04.08.2020
  • @DaemonPainter, что мне делать после запуска checkout? 04.08.2020
  • чтобы попытаться дать хороший отзыв, мне нужна информация. Что ты делал? Почему ты не смог толкнуть? Почему ты не смог подтянуться? Есть ли еще одна копия этого репо, которая не получила обновлений, которые вы принудительно отправили? Если это так, рассмотрите возможность принудительного нажатия на это снова :) Не забудьте как-то сделать резервную копию ваших правок. 04.08.2020
  • @DaemonPainter tbh git сбивает меня с толку, и чтение документации, похоже, не помогает. Когда я вхожу в Bitbucket (через веб-интерфейс) в основной ветке репозитория, в котором я работал, 90% файлов исчезли. Они все еще у меня есть локально, но причина, по которой я использую Git, заключается в том, что я могу видеть старые версии и сообщение коммита. Я отталкивался от одного и того же удаленного репо из двух разных локальных папок с разным содержимым, и теперь я понимаю, что это не то, как Git предназначен для использования. Короче говоря, теперь, когда я не вижу файлы на bitbucket.org, как мне их вернуть? 04.08.2020
  • Я знаю, что это может сбивать с толку, особенно когда вы запускаете команды, не зная, каков будет результат. Без паники :) на вашем компьютере, что вы делали на своем компьютере, когда решили сделать принудительный толчок? Где вы сливаетесь? Перебазирование? Какие именно команды вы выполняли. 04.08.2020
  • stackoverflow.com/search?q=%5Bgit%5D+undo+force+push 04.08.2020
  • @DaemonPainter Я хотел добавить новый файл, который я создал, в удаленное хранилище. Как-то это застрял, так что я не мог толкать или тянуть, поэтому я подумал, что опция принудительного нажатия будет полезна. Я не думаю, что я сливался. git также дает (master|REBASE 2/3), и я понятия не имею, что это значит. 04.08.2020
  • означает, что вы были в середине перебазирования, чтобы выйти из него, либо завершите его, либо git rebase --abort. Он дает это сейчас, после принудительного нажатия? За это время вы запускали что-то кроме git log / git status? 04.08.2020
  • @DaemonPainter да, $ git revert HEAD~1 и git reset --hard 8b68175 и git checkout <hash> 04.08.2020

Ответы:


1

Когда вы принудительно отправляете локальную ветвь master в источник, вы в основном заставляете удаленную ветвь быть такой же, как ваша локальная ветвь.

Если файлы отсутствуют в Bitbucket, это означает, что они отсутствуют и в вашей локальной ветке. Итак, сначала исправьте проблему в вашей локальной основной ветке, а затем снова принудительно нажмите ее.

Запуск git log покажет вам только те коммиты, которые являются частью вашей ветки. Если отсутствуют некоторые файлы, вы можете не увидеть эти коммиты.

Запуск git reflog даст вам полную историю, включая переключение между ветвями, слияния и перебазирования.

Используйте reflog, чтобы определить вашу «последнюю известную удачную» фиксацию. Как только вы его найдете - пометьте его (просто так будет легче найти) и создайте ветку.

Затем вы можете сравнить эту ветку с веткой master и убедиться, что это именно та фиксация, которую вы ищете.

Обновить

Как только вы получите хэш коммита, сбросьте на него основную ветку и принудительно нажмите:

git reset --hard <hash>
git push --force origin master
04.08.2020
  • Я думаю, что нашел один в reflog, так как мне вернуться к нему и восстановить историю файлов, которые были удалены? 04.08.2020
  • @northerner - я обновил ответ 04.08.2020
  • Вау спасибо! Это действительно сработало! 04.08.2020
  • Git такой запутанный инструмент. Позвольте мне, как простой вопрос. Почему хэш-значение намного короче при запуске log по сравнению с reflog? Например, commit 5e34ec6922d6021b5a4d9b02355086bd02434c18 (HEAD -> master, origin/master) против 5e23ec6 (HEAD -> master, origin/master) HEAD@{0}: rebase: updating HEAD 04.08.2020
  • См. здесь: stackoverflow.com/questions/43665836/ 05.08.2020
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..