Как загрузить последнюю версию проекта с сервера с помощью git?
На локалке есть версия проекта, где что-то пошло не так. Все зашло настолько далеко, что проще загрузить с git последнюю загруженную версию, где все работало.
Как это сделать?
Версию на локалке не коммитила
- Вопрос задан более трёх лет назад
- 13294 просмотра
Комментировать
Решения вопроса 0
Ответы на вопрос 3
Android dev at Freelance
Версию на локалке не коммитила
Ну, если не коммитили, то достаточно должно быть сделать git reset —hard HEAD . Только осторожно с этой коммандой, она реально сносит все изменения после последнего коммита.
Ответ написан более трёх лет назад
Нравится 1 2 комментария

nastya_zholudeva @nastya_zholudeva Автор вопроса
Артем Калачян, я правильно понимаю, что после этой команды версия на локалке и версия на сервере будут одинаковые (как на сервере)?
P.S. переспрашиваю, потому как боюсь делов натворить))
youngmysteriouslight @youngmysteriouslight
nastya_zholudeva, судя по формулировке вопроса
Все зашло настолько далеко, что проще загрузить с git последнюю загруженную версию, где все работало.
Вас интересует следующее:
Как привести рабочую директорию к состоянию, в котором всё работало.
Ответ на этот вопрос дан выше: git reset —hard .
HEAD — последний коммит, можно написать хеш более раннего коммита (см. git log)
К слову, для этого иметь подключение к серверу не обязательно, для таких задач git исходно и создавался.
Если же необходимо получить актуальную версию с сервера, то git pull.

Git stash — сохранить изменения в заначку, и переместить голову на последний комитета;
Git pull — получить последний комит
Дальше на выбор:
Либо git stash pop — натянуть спрятанные изменения на полученную версию
Либо git stash clear — очистить заначку
Ну или ресетнуть изменения
Ответ написан более трёх лет назад

nastya_zholudeva @nastya_zholudeva Автор вопроса
mshak, а в чем разница будет между stash -> pull -> stash clear и reset —hard HEAD?

Stash вам даст время ещё подумать, «а нужны ли мои изменения».
После reset вам все равно делать git pull, что бы получить последнюю версию с сервера
Переписывание истории
В данном обучающем материале описаны различные способы перезаписи и изменения истории в Git. В Git используются несколько способов регистрации изменений. Мы обсудим плюсы и минусы различных способов и покажем примеры работы с ними. В данном обучающем материале описаны некоторые типовые причины перезаписи состояний кода и разъясняется, как избегать ошибок при таких операциях.
Основная задача Git — гарантировать, что вы не потеряете внесенные изменений. Но эта система также предназначена для предоставления вам полного контроля над процессом разработки. В числе прочего вы сами определяете то, как выглядит история вашего проекта. Такая свобода создает и вероятность потери коммитов. Git предоставляет команды для перезаписи истории, но предупреждает, что использование таких команд может привести к потере данных.
В Git существует несколько механизмов хранения истории и сохранения изменений. Вот эти механизмы: commit —amend , git rebase и git reflog . Это мощные инструменты для настройки рабочего процесса. По окончании этого обучающего материала вы будете знать команды, которые позволят реструктурировать коммиты Git, и сможете избегать проблем, с которыми приходится сталкиваться при перезаписи истории.
Как перейти на последний коммит в ветке?
Какой командой через консоль можно обновить текущие версии файлов в ветке до последнего коммита?
Документация предлагает использовать команду git pull — скачать все изменения из обновить файлы до последней версии.
Но проблема в том, что я использую jgit — это скрипт для Solaris (официальных пакетов для git нет), а в нем нет такой команды.
Есть команда fetch — но это только для скачивания из удаленного репозитория изменений.
Есть команда reset —hard — но для этого нужно знать хэш последнего коммита.
Какие ещё есть команды в git, кроме pull?
- Вопрос задан более трёх лет назад
- 14897 просмотров
Комментировать
Решения вопроса 1
git fetch git checkout git merge origin/
Ответ написан более трёх лет назад
mewforest / Git help.md
Примечание: русский язык может не поддерживаться в вашем IDE.
git log
Переключение на коммит с id=»name_of_commit»
git checkout name_of_commit
Переключение обратно на последний коммит
«Скачать», а точнее клонировать проект
git clone https://github.com/. /project.git
Часто пока вы работаете над одной частью вашего проекта и всё находится в беспорядке, у вас возникает желание сменить ветку и поработать над чем-то ещё. Сложность при этом заключается в том, что вы не хотите фиксировать наполовину сделанную работу только для того, чтобы иметь возможность вернуться к ней позже. Справиться с ней помогает команда git stash. Source
Скрыть незакоммиченные изменения
Можно также добавить сообщение с помощью save -параметра:
git stash save «Ok here it is»
Посмотреть все скрытые изменения
Вернуть последнее скрытое изменение
git stash apply
Вернуть скрытое изменение под номером
git stash apply stash@
Отменить отслеживание закоммиченного файла
git rm —cached another-file.txt
Удалить файл из репозитория, ен удаляя с диска
git rm —cached file.txt
Например, вот так можно удалить папку с конфигурацией проекта PyCharm (IDEA): git rm —cached -r .idea
Как перестать каждый раз вводить логин/пароль от Github?
Не только Github, но и любого другого удаленного git-сервера. Вопрос решает авторизация с помощью генерации SSH-ключа на компьютере разработчика. Вначале проверьте, установлен ли у вас SSH-клиент (Windows 10 со сборки 1809, Ubuntu, OS X, etc
- все имеют предустановленный клиент):
ssh -V
Если есть, то отлично, генерируем ключ (вместо ed25519 можно выбрать другие алгоритмы шифрования ключа):
ssh-keygen -t ed25519
На все вопросы можете ответить Enter. Но моя рекомендация, когда будет запрос «Enter passphrase (empty for no passphrase)», ввести кодовую фразу для ключа. Да, каждый push/pull/fetch придется её вводить, но зато если вдруг кто-то украдёт приватную часть ключа, он не сможет без неё получить доступ ко всем вашим удаленным репозиториям. Да, вам не послышалось, ключ разделён на две части: приватная (private key) и публичная (private key). Как следует из названия, приватную никому передавать нельзя, жди беды, а вот публичную как раз и стоит загрузить на удаленный сервер с репозиториями, в твоём случае это, скорей всего github.com.
Последний этап: загрузить свой public key на сервер и поменять у локального сервера способ авторизации с HTTP на SSH.
Github: Клик по аватару / Settings / SSH and GPG keys / New SSH key. Расположение ключа смотрите в консоли, оно там уже распечаталось. Далее переходим в ваш репозиторий на Github и клацаем по большой зеленой кнопке «Code», после чего выбраем SSH, копируем ссылку и вводим ее в консоль проекта:
git remote set-url origin git@github. /project.git
Конфликты могут возникать, когда два разработчика работают над одним проектом (или один с двух устройств). Большинство конфликтов решаются автоматически инструментом git, но если в двух разных коммитах находятся разные изменения одного и того же участка кода, то подобные слияния (merge), может сделать только сам разработчик.
За основу взят код отсюда.
git fetch git merge
Если возникнет необходимость ручного слияния, то выскочит что-то вроже:
Auto-merging tests/test_1.py CONFLICT (content): Merge conflict in tests/test_1.py Auto-merging tests/test_2.py
В примере выше test_2.py прощел автоматическое слияние, а test_1.py нет. Для того, чтобы это исправить, нужно открыть конфликтующий файл и решить, какую строку оставить и закоммитить проект:
>>>>>> master
Добавление других проектов, как подмодулей
Допустим, в своем проекте вы используете другой свой (или чужой, почему нет) репозиторий, вот вы его склонировали, но что дальше? Конечно, можно просто удалить папку .git у только что склонированного подпроекта и дело с концом, но тогда не будет синхронизации с оригинальным репозиторием и все изменения придется применять руками. Это не очень удобно, лучше пометьте эту папку как подмодуль:
git submodule add git@github.com/. /blablabla.git blablabla
Отлично! Теперь пушьте и забудьте о варварстве с удалением .git .
- Скорая помощь для тех, кто накосячил и потерял данные — Ё**ный Git. (цензурная версия)