Работа с git

Наверное, многие видели git-хостинги для разработчиков. Например такой как GitHub, но не знают для чего он нужен. А между прочем, это очень удобная вещь для разработки больших проектов, или проектов в команде. С помощью него можно удобно разрабатывать две и более версии одного продукта (например beta-версия), работать в команде, видеть какие изменения кто и когда внес, а так же брать чужие наработки и с легкостью применять к своему проекту!

По большей части сегодня буду касаться гит-хостинга GitHub, ибо на данный момент он самый популярный, они все работают одинаково, а так же совместимы друг с другом.

Для работы нам понадобится консоль. Качаем версию под Windows с сайта (не путать с приложением GitHub), на linux достаточно прописать

sudo apt install git
или 
sudo pacman -S git (На дистрибутивах с pacman)

В общем создаем репозиторий (так же можно импортировать чужой по ссылке с любого гит-хостинга):

Открываем папку с проектом и инициализируем проект

git init

Добавляем файлы проекта (можно по одному, но я использую символ * — все)

git add *

Пишем название коммита (изменения) — я написал просто «first commit»

git commit

создаем новую ветку «dev»

git branch -M dev

Указываем ссылку на наш созданный репозиторий — куда будем заливать проект и название ветки:

git push -u ССЫЛКА ВЕТКА

git push -u https://github.com/SawaMEN/test-bot.git dev

Вводим логин и пароль. И всё, наш проект оказался в репозитории:

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

Предлагаю, теперь сделать изменения в файлах, добавим описание и пропишем

git status

Тут видно, какие файлы удалились, какие изменились, какие добавились. создать еще один коммит:

git add * - добавляю все файлы в папке в коммит
git commit - пишу название
git push - отправляю на сервер.

Так же можно кроме названия коммита, ниже написать описание

Теперь можно видеть в списке изменений — новый коммит, а так же описание

А если открыть — мы увидим в каких файлах, в какой строчке и что именно изменилось

Мы можем отредактировать какой-либо файл и создать еще один коммит:

Теперь попробуем обьеденить вместе два коммита в один. для этого пропишем:

git rebase -i HEAD~2 - цифра 2 - это 2 последних.

Теперь первый оставляем pick, а остальные — ниже заменяем на s

Можем так же закомментировать сообщение второго коммита

И прописываем

git push -f 
где флаг f - принудительно обновить

Теперь 2 последних объединились в один, изменилось описание.

Мы можем отменить коммит командой:

git revert хэш
git push

Так же мы можем удалить последний коммит командой

git reset --hard HEAD~1 
git push -f

Вместо 1, можно указать сколько с конца следует удалить

Либо же скопировать коммит по хэшу

git cherry-pick хеш

Для копирования хэша есть даже специальная кнопка

Если коммитов 5, а нам нужно удалить третий — то можно удалить последних 3, а затем скопировать по хешу последних два и тогда уже прописать «git push -f».

Теперь что со скачиванием репозитория с хостинга на комп, например для дальнейшего изменения:

git clone ссылка
или
git clone ссылка папка - если нужно склонировать в папку, с определенным названием
Ссылка

После завершения клонирования, появится папка с файлами


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

Для начала нужно указать откуда будем копировать, он считает все коммиты для объединения:

git fetch чужой_репозиторий

затем 

git cherry-pick хеш_чужого_коммита

git push

А если вы fork’нули репозиторий, а на оригинальной ветке появились новые коммиты, можно их копировать не по одному, а сразу все.. т.е. обновить свой репозиторий до головного коммита:

git fetch чужой_репозиторий
git merge FETCH_HEAD
git push

Множество коммитов можно оледенить в tag. Так, например google выпускает патчи безопасности каждый месяц. Что бы слить tag, мы так же используем git fetch, только теперь добавляем тэг:

git fetch чужой_репозиторий tag
git merge FETCH_HEAD
git push

Но при слиянии могут возникнуть конфликты:

Для того, что бы их решить, прописываем git status, и исправляем вручную конфликты слияния:

В одном файле, может быть несколько конфликтов. Я их ищу по поиску «<<<«, исправляются они так: сверху то, что было, снизу на что хочет заменить при слиянии. Обычно можно просто удалить верхнее, оставив нижнее.. или не заменять, т.е. удалить нижнее. Но иногда следует оставить оба, стерев лишь «<<<<<<< HEAD», «=======» и «>>>>>>> хэш». В основном это касаемо добавлений новых функций. Но тут каждый конфликт решается своим путём. Нужно разбирать самому.

После решения всех конфликтов, можно прописать git add * или же, решать по одному файлу прописывая git add путь_файла

git add *
git commit
git push

И у нас появляется слияние тэга:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *