Git
Шпаргалка по Git от GitHub - GitHub Cheatsheets
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
Чтобы иметь возможность работать с удаленными репозиториями 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 не хранит пустые папки. Но они бывают нужны для создания нужной структуры директорий — например, папка для временных или кешированных файлов.
При этом нам нужно отключить слежение за файлами в этих папках.
Для таких папок создаем внутри папки файл .gitkeep и в .gitignore добавляем:
/cache/* !.gitkeep
Таким образом мы исключаем все файлы внутри папки cache, кроме .gitkeep.
Допустим, мы решили добавить в .gitignore файл temp.txt, который был уже закомиччен.
Но простого добавления файла в .gitignore недостаточно — Git все равно продолжит отслеживать изменения в этом файле, потому что он есть в репозитории.
Чтобы Git начал игнорировать этот файл, нужно удалить его из кэша:
git rm --cached temp.txt
Адрес репозитория проекта на 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"
Создайте репозиторий:
Добавьте удаленный репозиторий в локальный и отправьте ваши локальные файлы в удаленный:
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 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 diff
git add --all
git commit -m "some text"
git push origin master
Если работа над кодом велась по тикету, то нужно в тексте коммита указывать see #nnn, где nnn — номер тикета.
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 файлы, которые раньше были удалены на локальной машине:
git add --all— закоммитить удаленние файловgit status— убедиться, что удаленные файлы попали в «Changes to be committed»git commit -m "delete old"git push origin master
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
- 25 Git commands I use daily and you should know - DEV Community
- Github git cheat sheet - DEV Community 👩💻👨💻
- How to Use GitHub and Git for Beginners
- Life-saving git commands
- Hello World · GitHub Guides
- Workflow - JGS
- Типичный программист — Самые типичные ошибки/вопросы по git и способы их решения
- Более чем краткое введение в git
- Pro Git v1 на русском (PDF)
- Pro Git v2 english PDF
- Думай как Git
- http://githowto.com/ru/
- Моя шпаргалка по работе с Git
- Установка Git for Windows
- Настройка Git для работы с Bitbucket