Работа с Git
Команды для работы с git
Клонировать репозиторий с сервера:
git clone path
path - путь к репозиторию, заканчивающийся .git.
Сохраняем изменения в локальном репозитории с комментарием initial commit:
git add . git commit -m 'initial commit'
Точка означает, что все изменения в текущей папке будут подготовлены к коммиту
Отправить изменения на сервер:
git push -u origin master
После выполнения такой команды, следующий push можно выполнять просто: git push
origin - название удаленного репозитория по умолчанию.
Забрать изменения с сервера:
git pull
git pull также скачает ветки из удаленного репозитория в случае, если их ещё нет в локальном.
Узнать версию Git:
git --version
Установить имя пользователя:
git config --global user.name "Evgeniy Kudryashov"
Установить email пользователя:
git config --global user.email "e.kudryashov@outlook.com"
Просмотреть конфигурацию:
git config --list
Статус текущей папки как репозитория:
git status
Инициализировать репозиторий:
git init
При этом создастся папка .git, в которой и будет храниться вся история репозитория
Информация о последнем коммите и его содержимом:
git show
Выход из просмотра информации о коммите: q
История коммитов:
git log
Добавление файлов в индекс:
git add file
Установить в локальном репозитории связку с удаленным репозиторием:
git remote add origin https://project-url/project.git
Просмотреть - какой удаленный репозиторий настроен:
git remote -v
Удалить путь к настроенному удаленному репозиторию:
git remote remove origin
Создать новую ветку и переключиться в нее
git checkout -b branch-name-here
Переключиться на ветку master
git checkout master
Создать новую ветку
git branch branch-name-here
Посмотреть - какие есть ветки в локальном проекте
git branch
Посмотреть - какие есть ветки и в локальном проекте, и в удаленном (локальные - зеленые, удаленные - красные)
git branch -a
Отправить ветвь в удаленный репозиторий
git push -u origin branch-name-here
Имена локальных веток и удаленных - могут не совпадать, но принято делать их такими же, чтобы не запутаться.
Сохранить изменения в ветке, которые коммитить пока не нужно:
git stash
При этом можно будет переключаться на другую ветку, а файлы в текущей ветке будут выглядеть как до внесения изменений.
Изменения можно откладывать сколько угодно раз.
Посмотреть список всех сохранений:
git stash list
Чтобы вернуть изменения вновь можно командой:
git stash pop
Если были внесены дополнительные изменения в файл после сохранения изменений командой git stash, то будет произведен автоматический merge нового коммита с тем, что было в stash.
В случае, если изменений было несколько, то команда git stash pop вернет последнее. Чтобы выполнить еще одно возвращение - нужно выполнить команду еще раз (столько раз, сколько нужно откатов).
Изменения можно переносить сразу в другую ветку, тогда pop нужно делать из неё.
Чтобы отказаться от изменений и удалить их, выполняем команду, где NUMBER - номер изменения:
git stash drop NUMBER
Влить другую ветку в текущую ветку (где BRANCH-NAME - имя вливаемой ветки):
git merge BRANCH-NAME
При этом будет создан коммит слияния.
Установить редактор разрешения конфликтов для git (к примеру, meld):
git config --global merge.tool meld
Запустить редактор разрешения конфликтов (когда конфликт уже существует):
git mergetool
Просмотреть изменения, которые были внесены в файл перед коммитом:
git diff file-name
Просмотреть все изменения:
git diff
Просмотреть изменения между более ранним коммитом и поздним в файле file-name:
git diff early-commit-name later-commit-name file-name
Можно поменять местами коммиты, тогда изменения будут отображаться в обратном порядке.
Можно указывать первые символы коммита, а не полный хеш (скажем, 4 символа).
Посмотреть изменения всех файлов в рамках коммита проекта:
git diff early-commit-name later-commit-name
Можно сравнивать коммиты из разных веток. Т.к. хеши уникальные - указывать названия веток необязательно.
Команда git diff прекрасно умеет сранивать файлы и за пределами репозитория.
Сравнить коммит с текущей версией:
git diff commit-name
Посмотреть кем вносились изменения в конкретный файл (и когда):
git blame file-name
Удалить изменения, которые ещё не были закоммичены:
git restore file-name
Удалить изменения в файле, кототрый был закоммичен:
git restore --staged file-name git restore file-name
Удаление всех не закоммиченых изменений (в т.ч. тех, которые не были добавлены в индекс):
git reset --hard
Команда не удаляет файлы, которые не отслеживаются.
Чтобы удалить файлы из репозитория, которые не отслеживаются, можно использовать команду:
git clean -f
Использовать с осторожностью - удаленные изменения восстановить не получится.
Удалить файл из отслеживания:
git rm --cached file-name
При этом, файл нужно добавить в .gitignore
Эти изменения всё равно нужно закоммитить. После этого они не будут отслеживаться.
Вернуться к определенной версии файла из конкретного коммита:
git checkout commit-name file-name
Если мы хотим удалить эти изменения, мы можем выполнить:
git restore --staged file-name git restore file-name
Файл будет возвращен к версии из коммита и добавлен в индекс.
Отменить конкретный коммит:
git revert commit-name
При этом, будет отменен конкретный коммит, а последующие отменены не будут.
Если надо отменить несколько коммитов, то просто последовательно выполняем git revert (можно с опцией –no-commit, чтобы не коммитить каждый раз, а сделать единственный коммит).
Изменения, сделанные с помощью revert тоже нужно коммитить.
Мягкий режим отката изменения (откатит коммит, изменения будут добавлены в индекс):
git reset --soft commit-name
Смешанный режим отката изменений (откатит коммит, изменения не будут добавлены в индекс):
git reset commit-name
Смешанный режим - это режим работы команды по умолчанию, поэтому параметр не нужен.
Сбросить один коммит в смешанном режиме:
git reset HEAD~1
Жёсткий режим сброса (все последующие коммиты будут удалены):
git reset --hard commit-name
commit-name - имя коммита, до которого мы сбрасываем ветку (т.е. сам этот коммит станет HEAD).
Использовать очень осторожно, изменения будут потеряны.
Исправить ошибку в сообщении коммита:
git commit --amend -m 'new_comment'
Добавить файл в проведенный коммит без редактирования сообщения коммита:
git commit --amend --no-edit
Отменить слияние веток:
git reset --merge commit-name
commit-name - имя коммита, предшествовавшего слиянию.
Отменить слияние, если произошёл конфликт:
git merge --abort
Переименовать ветку:
git branch -m new-name
Удалить ветку:
git branch -d branch-name
Данная команда не удалит ветку, если она не будет влита куда-то ещё.
Принудительно удалить ветку, даже если она не влита:
git branch -D branch-name
Удалить ветку в удаленном репозитории:
git push -u origin --delete branch-name
Состояния файлов git
* commited - файл сохранен с изменениями (закоммичен)
* not staged - в файл внесены изменения, но он не подготовлен к коммиту
* staged - файл подготовлен к коммиту (командой git add file)
Не сохранять в репозитории
*Логи
*Пользовательские файлы - аватары, картинки, загруженные пользователями и т.д.
*Файлы среды разработки - конкретные настройки среды разработки конкретного пользователя.
*Внешние библиотеки - сторонние библиотеки, которые можно скачать в интернете.
*Локальные файлы конфигураций - с исключением для незаполненных файлов.
*Специальные файлы ОС - к примеру, desktop.ini
*Слишком большие файлы - бинарные и т.д.
исключить файлы из репозитория можно, создав в нём файл .gitignore
В этом файле можно перечислять не только названия файлов, но и использовать маски, например:
*.log
А также можно делать исключения для конкретных файлов (к примеру, если мы забанили все файлы с определенным расширением). Для этого используем восклицательный знак. Пример:
!logs/sample.log
При этом нельзя включить в исключения файл из папки, которая исключена целиком.
Работа git с SSL
Отключить все проверки SSL для клиента git.
(НЕ БЕЗОПАСНО для постоянной работы)
git config --global http.sslVerify false # Do NOT do this!
Использовать хранилище сертификатов Windows вместо собственного.
git config --global http.sslBackend schannel