Файл, отредактированный удаленно на сайте GitHub, утерян после принудительного нажатия с локального - PullRequest
0 голосов
/ 02 января 2019

В моем удаленном репозитории у меня был только файл readme, над которым я работал. После последнего обновления я зафиксировал файл readme. Впоследствии я случайно передал папку из локального хранилища в этот удаленный, что привело к потере файла readme, над которым я работал.

Можно ли как-нибудь вернуть readme?

n.b. просмотрел историю команд, заметил, что я сделал git push origin master --force. Я новичок, я думаю, что что-то пошло не так при использовании силы. Без силы ошибка была:

hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

РЕДАКТИРОВАТЬ: ошибка выглядит почти так же, как и конфликт слияния, но яблоком раздора здесь является то, что моя проблема - потерять коммит из удаленного после нажатия из локального без его извлечения. Принятый ответ решил мою проблему.

1 Ответ

0 голосов
/ 02 января 2019

Есть несколько шагов, поэтому давайте пройдемся по ним.

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

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

Сначала перейдите к рассматриваемому репозиторию GitHub, скажем, так (я в качестве примера использую свой собственный репозиторий,отредактируйте соответствующие биты, как указано ниже):

https://github.com/lassevk/LVK
                   ^--edit---^

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

https://api.github.com/repos/lassevk/LVK/events
                             ^--edit---^

Это должно дать вам файл json,В этом json-файле вам нужно выполнить поиск для рассматриваемого файла или его содержимого, используя Ctrl-F в вашем браузере.Допустим, вы нашли его, и оно выглядит так:

"commits": [
  {
    "sha": "a52da7697640b77f0b2e16de8d6e8ad8c29924e2",
    "author": {
      "email": "lasse@vkarlsen.no",
      "name": "Lasse Vågsæther Karlsen"
    },
    "message": "Rewrite HttpClient related code.",
    "distinct": false,
    "url": "https://api.github.com/repos/lassevk/LVK/commits/a52da7697640b77f0b2e16de8d6e8ad8c29924e2"

Видите, что там, ША?Скопируйте его и вставьте в ссылку следующего типа:

https://github.com/lassevk/LVK/commit/a52da7697640b77f0b2e16de8d6e8ad8c29924e2
                   ^-------------------------edit----------------------------^

Если это даст вам "404 не найдено", то, насколько я знаю, вам не повезло.

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

Если вы хотите создать ветку для фиксации и обработать ее позже, вы можете использовать этот URL вместо этого:

https://github.com/lassevk/LVK/tree/a52da7697640b77f0b2e16de8d6e8ad8c29924e2
                   ^--edit---^      ^------------------edit----------------^

Это должно открыть браузер хранилища для этой фиксации, и вы можете затем использоватьраскрывающийся список ветвей для создания новой ветви, указывающей на коммит.Как только ветка указывает на коммит, он больше не теряется .

Например, вы можете локально сделать следующее:

git fetch
git checkout master                # or whichever branch this is on
git merge NAME-OF-TEMP-BRANCH

Это должно объединитьфайл в вашу ветку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...