Git

Матеріал з Wiki.Zina
Версія від 13:35, 29 травня 2022, створена >Zina (→Добавить свой локальный репозиторий в GitLab, GitHub или Bitbacket)
(різн.) ← Попередня версія | Поточна версія (різн.) | Новіша версія → (різн.)
Перейти до навігації Перейти до пошуку

Шпаргалка по Git от GitHub - GitHub Cheatsheets

Установка Git в системе

[ред. | ред. код]
sudo apt install git

Скачать Git для Windows: https://git-for-windows.github.io/

Установить, соглашаясь со всеми настроками по умолчанию.

Скачать и установить Git Credential Manager for Windows: https://github.com/Microsoft/Git-Credential-Manager-for-Windows/releases/latest

Запустить PowerShell и установить режим авторизации:

git config --global credential.helper wincred

Вариант установки через командную строку

Запустите PowerShell: Win-R — powershell — Enter

Проверьте версию — должна быть не ниже 5:

$PSVersionTable

Установите менеджер пакетов Scoop:

Set-ExecutionPolicy RemoteSigned -scope CurrentUser
iwr -useb get.scoop.sh | iex

Установите Git:

scoop install git

Установите модуль posh-git:

Install-Module -Name posh-git -Force
Get-Module -Name posh-git -ListAvailable

Установите режим авторизации:

git config --global credential.helper wincred

Первоначальная настройка Git

[ред. | ред. код]

GitLab, GitHub, BitBucket

[ред. | ред. код]

Чтобы иметь возможность работать с удаленными репозиториями GitLab, GitHub или BitBucket нужно указать в глобальных настройках Git логин и имейл вашего аккаунта.

git config --global user.email "user@zina.design"
git config --global user.name "user"

Проверить:

git config --list

На GitLab можно узнать свой user.email здесь: https://gitlab.com/-/profile
Чтобы узнать свой user.name, кликните на иконке профиля в правом верхнем углу.

Чтобы было проще авторизоваться, для GitHub и GitLab нужно создать SSH key (измените user@zina.design на ваш имейл):

ssh-keygen -t ed25519 -C "user@zina.design"

Скопируйте ключ в буфер:

gedit ~/.ssh/id_ed25519.pub

и вставьте его в профиль:

Проверить авторизацию:

ssh -T -p 443 git@ssh.github.com
ssh -T git@gitlab.com

Исключения

[ред. | ред. код]

Также добавить в глобальный .gitignore исключения для характерных для вашего рабочего окружения файлов:

git config --global core.excludesfile ~/.gitignore_global
touch ~/.gitignore_global

Пример содержимого ~/.gitignore_global:

*.sublime-project
*.sublime-workspace
*.DS_Store
backup/
art/
.sass-cache/
node_modules/
bower_components/
resources/

Хранение в Git пустой директории

[ред. | ред. код]

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

При этом нам нужно отключить слежение за файлами в этих папках.

Для таких папок создаем внутри папки файл .gitkeep и в .gitignore добавляем:

/cache/*
!.gitkeep

Таким образом мы исключаем все файлы внутри папки cache, кроме .gitkeep.

Удаление файлов из кэша, которые были добавлены в .gitignore

[ред. | ред. код]

Допустим, мы решили добавить в .gitignore файл temp.txt, который был уже закомиччен.

Но простого добавления файла в .gitignore недостаточно — Git все равно продолжит отслеживать изменения в этом файле, потому что он есть в репозитории.

Чтобы Git начал игнорировать этот файл, нужно удалить его из кэша:

git rm --cached temp.txt

Установка Git в проекте

[ред. | ред. код]

Импортировать существующий репозиторий

[ред. | ред. код]

Адрес репозитория проекта на GitHub и GitLab имеет вид:

https://gitlab.com/USERNAME/PROJECT

где:

  • USER – имя пользователя-владельца;
  • PROJECT – имя проекта.

Импортирование репозитория на локальный компьютер делается командой git clone вида:

git clone АДРЕС_РЕПОЗИТОРИЯ

АДРЕС_РЕПОЗИТОРИЯ можно скопировать по нажатию на кнопку Clone на странице репозитория.

Адрес может быть в форматах SSH и HTTPS, это не имеет особого значения:

git clone git@gitlab.com:USER/PROJECT.git
git clone https://gitlab.com/USER/PROJECT.git

Репозиторий будет скачан в папку с именем проекта. Ее можно изменить — просто добавить в конец команды имя новой папки:

git clone АДРЕС_РЕПОЗИТОРИЯ НОВАЯ_ПАПКА

Создать новый локальный репозиторий

[ред. | ред. код]

Перейдите в папку вашего проекта и создайте локальный репозиторий проекта:

git init

Добавьте в список исключений те файлы и папки, которые не нужно отслеживать (и которых нет в ~/.gitignore_global):

vim .gitignore

Проверьте статус проекта:

git status

Добавьте в репозиторий все файлы проекта:

git add --all

Создайте первый коммит:

git commit -m "Initial commit"

Добавить свой локальный репозиторий в GitLab, GitHub или Bitbacket

[ред. | ред. код]

Создайте репозиторий:

Добавьте удаленный репозиторий в локальный и отправьте ваши локальные файлы в удаленный:

git remote add origin git@gitlab.com:zinadesign/ИМЯ-РЕПОЗИТОРИЯ.git
git push -u origin main

Аналогично в Bitbucket:

git remote add origin ssh://git@bitbucket.org/zinadz/ИМЯ-РЕПОЗИТОРИЯ.git
git push -u origin master

Редактирование свойств локального проекта

[ред. | ред. код]
git config --edit --local

Например, может быть полезно, чтобы сменить подключение с https:// на SSH.

Часто используемые команды

[ред. | ред. код]

Выполнять в корневой папке проекта.

Просмотр состояния Git и вашего кода

[ред. | ред. код]

Показать изменения в ветке:

git status

Показать разницу между незакоммиченным и закоммиченным кодом:

git diff

Список сделанных коммитов:

git log

Сохранение изменений кода

[ред. | ред. код]

Добавить файлы в коммит:

git add
  • git add . — добавить все файлы и папки
  • git add path/to/file — добавить конкретный файл/папку
  • git add dir/* — добавить все файлы в папке (* — может быть часть имени файла)

Коммит изменения (все еще на локальном компьютере):

git commit -m "some text"

Залить изменения в удаленный репозиторий. Удаленных репозиториев может быть несколько. origin — так принято называть основной репозиторий:

git push origin master

Скачать на локальную машину изменения с удаленного репозитория:

git pull

При этом нужно понимать, что git add — лишь сохраняет состояние файлов в локальном репозитории.

Например, изменяем some.txt и хотим сохранить текущее состояние, но коммитить пока рано. Делаем git add some.txt. Потом снова вносим изменения в some.txt и решаем закоммитить. Фиксируем состояние и делаем коммит:

git add some.txt
git commit -m "Описание изменений some.txt"

Снова работаем с файлом и хотим добавить их другим коммитом. Делаем:

git add some.txt
git commit -m "Описание новых изменений some.txt"

Ветку в git можно понимать как указатель на коммит. Каждый новый коммит сдвигает этот указатель выше.

Если что-то пошло не так

[ред. | ред. код]

Восстановить файл в старой версии:

git restore --source <commit_hash_id> <file_path>

commit_hash_id — берется с git log.

Есть другая, более старая команда, которая делает то же самое:

git checkout <commit_hash_id> -- <file_path>

Сейчас рекомендуют использовать git restore: Git 2.23.0: Forget about checkout, and switch to restore.

Бывает, что изменения в удаленном репозитории конфликтуют с локальными. Тогда нужно разрешать конфликты.

Чаще всего это конфликты по контенту и тогда просто открываем файл и правим в секциях:

 << HEAD
 ====
 >> hash

Типовые сценарии работы с git

[ред. | ред. код]
git diff
git add --all 
git commit -m "some text"
git push origin master

Если работа над кодом велась по тикету, то нужно в тексте коммита указывать see #nnn, где nnn — номер тикета.

Получить код из Bitbucket на локальную машину

[ред. | ред. код]
git pull origin master

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

  • или закоммитить его: git commit -m "My message"
  • или можно от него отказаться и полностью заменить на версию из удаленного репозитория: git reset --hard

Работа с удалёнными репозиториями

Ветки и версии

[ред. | ред. код]

Список веток:

git branch

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

git branch -r

Переключиться на удаленную ветку origin/v5-beta:

git checkout origin/v5-beta

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

git branch -v

Посмотреть те ветки, которые вы уже слили с текущей:

git branch --merged

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

git branch --no-merged

Удалить ветку:

git checkout master
git branch -d ИМЯ_ВЕТКИ

Создание новой ветки

[ред. | ред. код]

Создать ветку develop для разработки и сразу переключиться в нее:

git checkout -b develop

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

git add .
git commit -m "Описание изменений"
git push origin develop

Скачать с удаленного репозитория ветку develop:

git checkout -b develop origin/develop

Объединение веток

[ред. | ред. код]

Если решили включить код из develop ветки в основную master, объединяем ветки таким образом:

git checkout master
git merge develop

Вернутся в основную ветку master:

git checkout master

Посмотреть список существующих тегов:

git tag

Создать новый тег (он будет указывать на верхний коммит в ветке master):

git tag v1.0.0

О правилах именования версий — здесь или здесь.

Залить теги в удаленный репозиторий:

git push --tags

Удаление файлов

[ред. | ред. код]

Удаление файлов в репозитории на Bitbacket

[ред. | ред. код]

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

  1. git add --all — закоммитить удаленние файлов
  2. git status — убедиться, что удаленные файлы попали в «Changes to be committed»
  3. git commit -m "delete old"
  4. git push origin master

Удаление untracked файлов

[ред. | ред. код]

git clean -d -f

Отменить удаление файла

[ред. | ред. код]
git rev-list -n 1 HEAD -- sites/default/settings_local.example.php
40c51f08cf20a8b0e26fc3de5acabfdd0fd20625
shmel@zd28:~/projects/artluhansk.com$ git checkout 40c51f08cf20a8b0e26fc3de5acabfdd0fd20625^ -- sites/default/settings_local.example.php
shmel@zd28:~/projects/artluhansk.com$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        new file:   sites/default/settings_local.example.php
git commit -m "вернул удаленный settings_local.example.php"
git push

Ссылки

[ред. | ред. код]