Skip to content

Instantly share code, notes, and snippets.

@mewforest
Last active March 6, 2024 08:04
Show Gist options
  • Save mewforest/6ee59caa4a4032d95714244c2cd1733d to your computer and use it in GitHub Desktop.
Save mewforest/6ee59caa4a4032d95714244c2cd1733d to your computer and use it in GitHub Desktop.
Шпаргалка по использованию git

Шпаргалка для работы с git

Проверка установки

git --help
git --version

Начальная настройка

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

Создаем репозиторий для пустой папки

git init name-of-project
cd name-of-project

Создаем репозиторий для существующей папки

git init .

git add .gitignore
git commit -m "Commentary to commit"

git add .
git status	
git commit -m "Another commentary"

Настраиваем удаленный репозиторий (замените на свою ссылку!)

git remote add origin https://github.com/.../blablabla.git
git push -u origin master

Теперь все изменения делаются так:

Добавление -> закрепление -> отправка:

git add .
git commit -m "It will be on github.com!"
git push

Убрать добавленные изменения (git add)

git reset

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

git reset --hard

Отменить последний коммит не удаляя файлы

git reset HEAD~1 --soft

Посмотреть историю коммитов

Примечание: русский язык может не поддерживаться в вашем IDE.

git log

Переключение на коммит с id="name_of_commit"

git checkout name_of_commit

Переключение обратно на последний коммит

git checkout -

"Скачать", а точнее клонировать проект

git clone https://github.com/..../project.git

Часто пока вы работаете над одной частью вашего проекта и всё находится в беспорядке, у вас возникает желание сменить ветку и поработать над чем-то ещё. Сложность при этом заключается в том, что вы не хотите фиксировать наполовину сделанную работу только для того, чтобы иметь возможность вернуться к ней позже. Справиться с ней помогает команда git stash. Source

Скрыть незакоммиченные изменения

git stash

Можно также добавить сообщение с помощью save-параметра:

git stash save "Ok here it is"

Посмотреть все скрытые изменения

git stash list

Вернуть последнее скрытое изменение

git stash apply

Вернуть скрытое изменение под номером

git stash apply stash@{2}

Отменить отслеживание закоммиченного файла

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 нет. Для того, чтобы это исправить, нужно открыть конфликтующий файл и решить, какую строку оставить и закоммитить проект:

<<<<<<< HEAD
x = 5
=======
x = 10
>>>>>>> master

Добавление других проектов, как подмодулей

Допустим, в своем проекте вы используете другой свой (или чужой, почему нет) репозиторий, вот вы его склонировали, но что дальше? Конечно, можно просто удалить папку .git у только что склонированного подпроекта и дело с концом, но тогда не будет синхронизации с оригинальным репозиторием и все изменения придется применять руками. Это не очень удобно, лучше пометьте эту папку как подмодуль:

git submodule add git@github.com/.../blablabla.git blablabla

Отлично! Теперь пушьте и забудьте о варварстве с удалением .git.

Полезные ссылки

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment