User Tools

Site Tools


краткий_мануал

Краткий мануал по 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
краткий_мануал.txt · Last modified: 2023/04/06 10:28 (external edit)