Каталог расширений

Популярные теги

3gp       avi       fb2       jpg       mp3       pdf      

Git как восстановить файл из репозитория


Как восстановить файл в Git

Восстановление удаленного файла или отмена изменений

Ситуация: вы удалили файл и хотите его восстановить или сделали изменения в файле, которые хотите отменить. То есть необходимо вернуть файл в то состояние, в котором он находится в Git репозитории.

Если вы еще не добавили файл в индекс (не выполнили git add), то для восстановления файла можно воспользоваться командой (вместо myfile необходимо указать файл, который вы восстанавливаете):

git checkout -- myfile

Просмотреть список удаленных файлов можно командой: git ls-files --deleted

Восстановление удаленного файла, если он уже добавлен в индекс (git add)

Если вы удалили файл и уже добавили его в индекс, выполнив git add, то сначала нужно удалить его из индекса, а затем выполнить восстановление, как было показано выше. Для этого выполните команды:

git reset -- myfile git checkout -- myfile

Найти и восстановить удаленный файл в репозиторий Git

если вы сумасшедший, используйте git-bisect. Вот что нужно сделать:

git bisect start git bisect bad git bisect good <some commit where you know the file existed> 

теперь пришло время запустить автоматический тест. Команда оболочки '[ -e foo.bar ]' вернет 0, если , и 1 в противном случае. Команда " run " из git-bisect будет использовать двоичный поиск, чтобы автоматически найти первую фиксацию, где тест не удается. Он начинается на полпути через заданный диапазон (от хорошего до плохого) и разрезает его пополам на основе результата указанного теста.

git bisect run '[ -e foo.bar ]' 

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

git bisect reset git revert <the offending commit> 

или вы можете вернуться к одному фиксации и вручную проверить повреждение:

git checkout HEAD^ cp foo.bar /tmp git bisect reset cp /tmp/foo.bar . 

Восстановление удаленной папки в репозитории Git

единственное, что сработало для меня, это проверить РЕПО в другой папке. Предположим текущего РЕПО в /home/me/current.

я
git clone /home/me/current /home/me/temp 

это делает отдельный клон РЕПО в /home/me/temp

теперь я могу пойти к /home/me/temp и делать все, что захочу. Например

git reset --hard commit-hash-before-delete 

теперь я могу скопировать папку удаленных файлов обратно

cp -r /home/me/temp/some/deleted/folder /home/me/current/some/deleted/folder 

и удалите папку temp

rm -rf /home/me/temp 

примеры

git checkout -- some/deleted/folder git checkout -- some/deleted/folder/* 

НЕ РАБОТАЕТ

$ git checkout -- some/deleted/folder/* zsh: no matches found: some/deleted/folder/* $ git checkout -- some/deleted/folder error: pathspec 'some/deleted/folder' did not match any file(s) known to git. 

примеры

git reset --hard HEAD 

разрушительны за пределами только удаленных файлов. Любые другие изменения будут потеряны.

аналогично

git reset --hard some-commit 

потеряет любые коммиты после some-commit

Шпаргалка по Git. Решение основных проблем — Блог HTML Academy

Перевод проекта First Aid Git от команды HTML Academy.

Восстановление накопленных изменений

В том случае, если изменения, внесённые пользователем, находятся в режиме накопления, применить их к ветке можно с помощью команды git stash apply. Также можно запустить git diff — эта команда поможет выявить различия. Для того, чтобы затем избавиться от накопленных данных, нужно запустить команду:

git stash drop
 

Если существует более одного накопления, найти нужное можно с помощью команды:

git stash list затем можно применить его, воспользовавшись его индексом:

git stash@{1}
 

Необходимо учитывать, что отсчёт индексов ведётся от нуля.

Восстановление удалённого тега

В том случае, если необходимо восстановить случайно удалённый тег, начать можно с его поиска:

git fsck --unreachable | grep tag
 

После того, как нужный тег найден, его следует восстановить:

git update-ref refs/tags/название-тега
 

Восстановление удалённого файла

Если вы случайно удалили файл, его можно быстро восстановить:

git checkout myfile.txt
 

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

git checkout $commit~1 myfile.txt
 

Восстановление удалённой ветки

С помощью комманды git reflog можно узнать хеш (SHA1) последнего коммита в удалённой ветке. Скопируйте этот хеш и используйте в команде:

git checkout <sha>
 

После этого восстановить удалённую ветку можно будет вот такой командой:

git checkout -b <название-ветки>
 

Изменение сообщения коммита перед его отправкой

Изменить сообщение коммита можно с помощью команды git commit --amend, она откроет редактор, в котором можно будет внести необходимые поправки в последнее сообщение.

Сообщение можно изменить и напрямую с помощью команды

git commit --amend -m "Новое прекрасное сообщение"
 

Изменение сообщения коммита после его отправки

В данном случае процесс занимает два шага. Сначала нужно изменить сообщение с помощью комманды git commit --amend, а затем перезаписать историю коммитов локальной ветки: git push <remote> <branch> --force

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

Использование алиасов команд в командной строке

Устали каждый раз печатать git status? Этой команде можно присвоить простой алиас, который проще и быстрее вбивать в git.

git config --global alias.st status
 

— теперь нужно писать только git st

Можно пойти дальше и присвоить алиасы более сложным командам:

git config --global alias.logme 'log -p --author=Rob'
 

Теперь алиас git logme будет выводить все наши коммиты.

Коммит в неправильную ветку

Нужно переключиться на новую ветку, которую вы забыли предварительно создать:

git checkout -b название-новой-ветки.
 

А затем переключиться к оригинальной ветке:

git checkout название-оригинальной-ветки
 

...и «откатиться» до последнего коммита, который нужно сохранить.

Чтобы это сделать, можно воспользоваться командой git log и сохранить хеш (SHA1) последнего коммита, который нужно оставить.. Например, это a31a45c.

Теперь его нужно сбросить: git reset --hard a31a45c и отправить получившийся результат.

Предупреждение: Убедитесь в том, что никто не отправлял коммиты в оригинальную ветку во время выполнения вышеописанных процедур, в противном случае эти изменения будут потеряны!

Обновление конкретного подмодуля

Чтобы обновить конкретный подмодуль в репозитории, нужно добавить путь к подмодулю:

git submodule update --remote --merge <path>
 

Откат к конкретному коммиту в истории

Если вас не очень беспокоят изменения в локальном репозитории, то можно «откатиться» к конкретному коммиту в истории с помощью команды:

git reset --hard HEAD~1
 

Эта команда установит HEAD на конкретный коммит. Также можно воспользоваться хешем коммита.

Отмена коммита до публикации изменений

Если вы сделали коммит, который впоследствии понадобилось отредактировать или полностью стереть, поможет команда git reset.

git reset HEAD~1 # отменить последний коммит, сохранить изменения
 git reset --hard HEAD~1 # отменить последний коммит, стереть изменения
 

Будьте осторожны используя второй вариант, поскольку изменения ваших локальных файлов будут потеряны.

Чтобы сохранить сообщение коммита, наберите: :

git commit -i ORIG_HEAD
 

Отмена коммита после отправки его в master-репозиторий

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

git revert b712c3c
 

Отмена только коммита, который является вторым после последнего:

git revert HEAD^
 

Простая отмена последнего коммита:

git revert -n HEAD
 

Отмена локальных изменений файлов

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

git checkout myfile.txt
 

Кроме того, можно восстановить конкретный путь к файлу:

git checkout -- путь-до-файла
 

Отображение всех коммитов одного файла

Если вы хотите просмотреть все коммиты с изменениями конкретного файла, воспользуйтесь командой git log --follow -p -- myfile

Аргумент —follow позволяет вывести все изменения над файлом, даже если в процессе работы он был переименован.

Если опустить опцию -p, то система выведет только сообщения коммитов, но не их содержимое.

Отображения числа коммитов от каждого участника

Хотите узнать, сколько коммитов сделал каждый участник команды?

Эта команда выведет список, отсортированный в порядке убывания количества коммитов: git shortlog -s -n

Отобразить коммиты, содержащие удалённые файлы

Узнать, в каких коммитах содержатся удалённые файлы, можно с помощью команды:

git log --diff-filter=D --summary
 

Она покажет список коммитов, в которых удалялись файлы.

Отсортировать коммиты по автору

Чтобы вывести список коммитов, отфильтрованных по автору, следует воспользоваться следующей командой:

git log --author="Имя автора"
 

Очистка всех скрытых состояний

Очистить все скрытые состояния можно следующей командой:

git stash clear
 

Переименование локальной и удалённой ветки

Предложим, у вас есть ветка «fix-bug25», которую вы захотели переименовать в «hotfix-users». Прежде всего, нужно будет изменить локальную ветку:

git branch -m fix-bug25 hotfix-users
 

А затем — удалённую ветку: переименовать её напрямую нельзя, поэтому нужно будет её удалить, и затем опубликовать заново уже с новым именем. Прежде чем приступать к этим процедурам, следует убедиться, что никто из членов команды не работает с этой веткой! Удаляем ветку: git push origin :fix-bug25

А теперь заново публикуем её с новым именем: git push origin hotfix-users

Переименование тега

Чтобы переименовать существующий тег:

git tag новое-название-тега старое-название-тега
 git tag -d старое-название-тега
 git push origin :refs/tags/старое-название-тега
 git push --tags
 

Перестать отслеживать существующие файлы

Если вы хотите перестать отслеживать файлы, которые уже есть в репозитории, но при этом желаете сохранить его локально, осуществите коммит изменений и запустите команду:

git rm -r --cached
 

Она удалит изменённые файлы из зоны подготовленных файлов (staging area). Затем нужно запустить команду:

git add . 
 

и отправить изменения.

Подготовка удалённых файлов

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

git add -u
 

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

git add -u .
 

Поиск конкретного сообщения во всех коммитах

Чтобы найти конкретный текст сообщения коммита, соответствующий регулярному выражению, нужно воспользоваться командой

git log --grep <запрос>
 

Пометить конфликтующий файл, как разрешённый

Чтобы пометить один или несколько конфликтующих файлов, как разрешённые, чтобы их можно было нормально изменять, воспользуйтесь командой:

git add название-файла
 

Затем можно запустить git commit, чтобы разрешить конфликты и опубликовать изменения.

Просмотр всех неотправленных коммитов

Чтобы просмотреть все коммиты, которые ещё не были отправлены в соответствующие ветки, воспользуйтесь следующей командой:

git log --branches --not --remotes
 

Кроме того, можно использовать:

git log origin/master..HEAD
 

Просмотр старой ревизии файла

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

git show commitHash:myfile.txt
 

Публикация локальной ветки для удалённого редактирования

Если вы создали локальную ветку, и хотите, чтобы другие пользователи могли с ней работать, воспользуйтесь командой:

git push -u origin название-моей-новой-ветки
 

Теперь они тоже смогут вносить изменения в эту ветку.

Сброс локальной ветки до состояния удалённой

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

Прежде всего нужно получить свежие обновления из удалённой ветки:

git fetch название-удалённой-ветки.
 

А затем нужно сообщить git, что локальную ветку следует «откатить» до состояния удалённой:

git reset --hard origin/название-локальной-ветки.
 

При наличии коммита, который нужно сохранить, перед сбросом нужно создать новую ветку и произвести коммит: git commit -m «Обновление»

git branch название-новой-ветки
 

Синхронизировать ветку с master-репозиторием

Чтобы синхронизировать последние изменения в репозитории master (или с любой другой веткой, с которой вы работали) необходимо «перебазировать» локальную ветку. Предположим, вы работаете над веткой foobar:

git checkout foobar
 

А затем осуществляете «перебазирование»:

git rebase master
 

После этого будут применены коммиты origin из master. После разрешения конфликтов процесс можно продолжить с помощью команды git rebase —continue. Теперь можно продолжать работу над своей веткой или осуществить её слияние (merge) с главным репозиторием.

Слияние локальных изменений с другой веткой

Это можно сделать прямо в процессе стандартного слияния (merge). Вам стоит сохранить историю слияний используя флаг —no-ff, что означает no fast forward.

Перейдите в ветку, в которую будут вливаться изменения, убедитесь в её актуальности и запустите процесс:

git merge <другая-ветка> --no-ff
 

Затем появится сообщение о коммите merge X into Y branch, после чего вы можете смело запушить ваше слияние.>

Совмещение двух и более коммитов

Здесь нам понадобится произвести интерактивное перебазирование. Если перебазирование происходит относительно master-ветки, то начать следует с команды git rebase -i master. Однако, если перебазирование происходит не относительно ветки, то нужно будет перебазироваться относительно HEAD.

Если есть необходимость в совмещении двух последних коммитов, можно использовать команду

git rebase -i HEAD~2.
 

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

Совмещение коммитов по конкретной функции для добавления в ветку релиза

Если вы решите совместить и опубликовать коммиты, то возникнет новый коммит в ветке релиза, поэтому история ветки конкретной функции останется неизменной.

Ниже представлен пример того, как достичь подобного эффекта:

git fetch origin
 git checkout [release-branch]
 git rebase origin/[release-branch]
 git merge —squash —no-commit [feature-branch]
 git commit -m 'Merge X into Y'
 

В конечном итоге останется только один коммит в ветке релиза, а история изменений в ветке разработки конкретной функции останется нетронутой.

Подробнее о ветках функций

Создание новой ветки с изменениями текущей

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

git checkout -b название-моей-новой-ветки
 

Эта команда перенесёт файлы из текущей ветки в новую, которую потом уже можно «закоммитить».

Убрать файл из буфера

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

git reset HEAD unlovedfile.txt
 

Удаление внешней ветки

Если вы хотите удалить ветку, введите команду:

git push origin --delete название-ветки
 

Удаление неотслеживаемых файлов и папок

Чтобы удалить неотслеживаемые файлы и папки из рабочей копии наберите следующую команду:

git clean -f
 

Чтобы в принципе удалить их:

git clean -fd
 

Подсказка: чтобы увидеть, какие файлы являются лишними, перед их непосредственным удалением, наберите:

Найти и восстановить удаленный файл в репозитории Git

На самом деле, этот вопрос напрямую касается Git, но кто-то вроде меня работает с такими инструментами с графическим интерфейсом, как WebStorm VCS, кроме знания команд Git CLI.

Я щелкаю правой кнопкой мыши по пути, который содержит удаленный файл, затем захожу в Git и затем нажимаю на Показать историю .

Инструменты VCS показывают все изменения, и я вижу все изменения и изменения каждого из них.

Затем я выбираю коммиты, которые мой друг удаляет PostAd.jsфайл. теперь смотрите ниже:

И теперь я вижу свое желание удалить файл. Я просто дважды щелкаю по имени файла, и оно восстанавливается.

Я знаю, что мой ответ - не команды Git, но он быстрый, надежный и простой для начинающих и профессиональных разработчиков. Инструменты WebStorm VCS великолепны и идеально подходят для работы с Git, и для них не нужны никакие другие плагины или инструменты.

Git. Вытянуть из репозитория конкретный файл — Хабр Q&A

Здравствуйте. Как вытянуть из git репозитория конкретный файл или каталог, не клонируя весь репозиторий?

Например, ситуация такая:
есть локальный репозиторий. В нём поправили руками и не закоммитили\удалили\иным образом испортили файл. При попытке сделать git pull возникает конфликт. Всё? Жизнь кончена? Нужно заново клонировать репозиторий?

Видел вот это. Но это не работает.

В локальном репозитории удалил файл index.html. Пробую восстановить:

user@host:~/repos/projectname$ git show HEAD -- index.html
commit 7799d08a68166795f1fa33f4faf3435469439cd7
Author: Name Soname <[email protected]>
Date: Wed May 18 18:56:43 2011 +0400

test

diff --git a/index.html b/index.html
new file mode 100644
index 0000000..9daeafb
--- /dev/null
+++ b/index.html
@@ -0,0 +1 @@
+test

«test» — это коментарий к коммиту, которым файл index.html был запушен в репозиторий.

Пробовал с двоеточием:

user@host:~/repos/projectname$ git show HEAD:index.html
test

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

Переполнение стека
  1. Около
  2. Продукты
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
.

git - Получить один файл из репозитория

Переполнение стека
  1. Около
  2. Продукты
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
.

github - Как восстановить замененные файлы в локальном репозитории Git после запроса на перенос?

Переполнение стека
  1. Около
  2. Продукты
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
.

Как восстановить репозиторий Git

Переполнение стека
  1. Около
  2. Продукты
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
.

Как извлечь исходные файлы из репозитория git?

Переполнение стека
  1. Около
  2. Продукты
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд
.

Как получить отдельный файл из определенной ревизии в Git?

Переполнение стека
  1. Около
  2. Продукты
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
.

Смотрите также