Table of Contents
Краткий мануал по Git
Я парень простой, что увидел - сразу записываю. По следам тутора от бабы Линды.
Интерактивный учебник по git можно посмотреть здесь
Установка
Собственно тут все что нужно знать для установки. Ставим на Ubuntu, sudo сократил.
apt-get install git
Проверяем
which git
- SYSTEM
git config –system
- USER
git config –global
- PROGECT
git config
Запишем несколько простых настроек для пользователя. Имя, email, редактор, etc.
git config --global user.name "Imeryak" git config --global user.email "nobody@nobody.com" git config --global core.editor "vim" git config --global color.ui true git config --global user.password "P@$$word" # не рекомендуется git config --list
Автозаполнение
Скачиваем с GitHub и переименовываем
wget https://github.com/git/git/raw/master/contrib/completion/git-completion.bash mv git-completion.bash .git-completion.bash
Затем добавим его в пользовательскую конфигурацию в Ubuntu в файле .bashrc
if [ -f /root/.git-completion.bash ]; then source /root/.git-completion.bash fi
Репозиторий
Создаем директорию и инициализируем создание репозитория
mkdir project1 cd project1 git init
Коммиты (фиксация)
Git коммит (или фиксация) используется для записи изменений в репозиторий.
Когда происходит фиксация, Git записывает снимок индекса и помещает этот снимок в хранилище объектов. Данный снимок не содержит копию каждого файла и каталога в индексе, поскольку бы такая стратегия потребовала бы огромных затрат дискового пространства. Вместо этого Git сравнивает текущее состояние индекса с предыдущим и получает список измененных/добавленных/удаленных файлов и каталогов. Git создает новые блобы для каждого измененного файла и новые деревья для каждого измененного каталога. Если же файл/каталог не изменился, используются уже имеющиеся блоб/дерево.
Снимки фиксации объединяются в цепочку, в которой каждый новый снимок указывает на своего предшественника. Со временем последовательности изменений могут быть представлены как серия фиксаций.
Добавляем все изменения которые были сделаны в проекте. Точка является сокращением для данной директории
git add .
Создаем коммит
git commit -m "Initial commit"
Смотрим на список коммитов.
git log git log -n # Ключ -n -количество выводимых коммитов git log --since=2018-04-16 # Начиная с даты --since=2018-04-16 git log --since=2018-04-16 # До даты --since=2018-04-16 git log --author="Imeryak" # По автору git log --grep="Init" # По регулярному выражению
Добавляем файлы в репозитории
git status # Посмотреть различия между рабочей директорией, буфером и репозиторием git add second_file.txt # Добавляем файл в буфер, теперь он доступен для коммита. git commit -m "Add second file to project" # Добавляем коммит на файл в буфере
Редактирование последнего коммита
git commit --amend -m "Add second file to project" # Добавляем изменения в существующий коммит # Также можно менять комментарий коммита # Редактировать можно только последний коммит, на который # указывает HEAD
Внесение изменений в файлы. По сути, это тоже самое, что и добавления файлов в репозиторий.
git status git add . git commit -m "Made change to all files"
Просмотр сделанных изменений, прежде чем коммитить в репозиторий.
git status git diff # Вывод различий между файлом(и) в рабочем пространстве и репозитарии git diff --staged # Вывод различий между файлом(и) в буфере и репозитории git commit -am "Here our commit" # Сразу добавляет и коммитит измененный файл. # Не подходит для созданных и удаленных файлов
Удаление файлов
Допустим мы из рабочей директории удалили файл del_file1.txt. Теперь, его нужно удалить из репозитория. И создать новый коммит.
git rm del_file1.txt # Удаляем файл git mv del_file2.txt del_file222.txt # Переименовываем файл git commit -m "Deleted file del_file1.txt"
Отмена изменений
git checkout -- first_file.txt #Восстанавливаем файл из репозитория #Двойное -- говорит о том, что изменяется данная версия бранча git reset HEAD first_file.txt #Удаление файла из буфера перед коммитом
Восстановления из конкретного коммита
git checkout 884502c9dedef8 -- first_file.txt #Восстановление файла из коммита по SHA1 хэшу в буфер git diff --staged #Смотрим изменения git reset HEAD first_file.txt #Возвращаем файл в рабочию директорию
Возврат коммита
git revert 9ddbf93c05eac19f8a727
Перемещение указателя HEAD
git reset --soft a24e1380f6d88b552 #Только перемещает указатель, не трогает буфер и рабочую директорию git reset --soft a24e1380f6d88b552 #Буфер выглядит так же как репозиторий git reset --hard a24e1380f6d88b552 #Буфер и рабочая директория полностью соответствую репозиторию
Удаление неотслеживаемых файлов из рабочей директории. Например в репозитории не нужны, старые логи архивы и т.д.
git clean -n #Тестовый запуск git clean -f #Удаляет все, чего нет в репозитории
Игнорирование файлов
Редакторы и окружения сборки часто оставляют временные файлы среди исходного кода. Такие файлы обычно не должны отслеживаться, как
файлы исходного кода. Чтобы Git игнорировал файлы в каталоге, просто добавим имя этого файла в специальный файл .gitignore
. Файл нужно создать. Примеры как игнорировать файлы.
touch .gitignore
Сам файл .gitignore нужно добавить в репозиторий
git commit -m "Add .gitignore file"
Глобальное игнорирование файлов, т.е. во всех репозиториях
git config --global core.excludesfile ~/.gitignore_global nano .gitignore_global #Соответственно файл должен быть создан внутри пользовательской директории
Удаление ранее отслеживаемого файла. Но сам файл не удаляется, он остается в репозитории, но в дальнейшем не отслеживается
git rm --cached filename.name
Git не отслеживает пустые директории. Чтобы отслеживать пустую директорию, в нее нужно вставить файл
touch .gitkeep