git часть 1



Абсолютно уверен, что лучше чем git book про самы азы гита я не расскажу, потому имеет смысл только лишь накидать сюда накидать полезных комманд и отсылки на то где прочитать про это подробнее.



Где прочитать об азах git? (на руском и английском)

https://git-scm.com/book/ru/v1/Введение



Серьезно, стоит потратить несколько часов на то чтобы прочитать хотя бы 1-2 главы этой книги. И мне не придется заниматься копипастой.



Создание пустого репозитория



git init

git add .

git commit m 'initial commit'



Этими командами создается .git папка с конфигами, затем начинаются отслеживаться все файлы (начиная от корня выполнения команды) и затем выполняется создание слепка состояния (commit) c комментарием.



Если у вас уже был свой проект - то появится первоначальный слепок вашей работы и далее все файлы будут отслеживаться.



Хорошей практикой является пользоваться следующей командой:

git add -p

Которая заставляет вас вручную подтверждать каждое изменение. Удобно видеть, что вы где-то могли напортачить.



Для того чтобы выгрузить свой проект на какой либо git сервер, нужно прописать так называемый. remote. В котором ханится информация о том, по какому адресу и протоколу находится удаленный репозиторий. При этом удаленный сервер создает bare-репозиторий, т.е пустой.

git remote add origin [email protected]/repo/repo.git

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

git push -u origin master

master - главная ветка. Если origin один, и вы хотите запушить текущую ветку, то команда сокращается всего лишь до

git push.



Хорошая практика: Каждый рабочий день начинается с git pull, чтобы скачать все удаленные изменения с удаленного репозитория локально.



Создание новой ветки:

git branch new_branch

Создать ветку и переключиться:

git checkout -b new_branch

На какой я сейчас ветке?

git branch

Что вообще сейчас происходит?

git status

А какие коммиты делались в последнее время?

git log --graph --decorate --pretty=oneline --abbrev-commit

Я внес какие-то изменения, а как бы посмотреть что я сделал?

git diff



Я ошибся с коммитом, что делать?

Любое действие можно переиграть. Если вы поняли, что забыли что-то в проекте подправить, можно поступить так:

<внесение правок, git add file\folder, или еще что-нибудь>

`git commit —amend'

Эта команда изменит последний коммит и примет в него все ваши изменения. в итоге коммит останется один и тот же. Если ничего не изменять, но ввести такую команду, то можно просто изменить комментарий к коммиту.

Если коммит уже отправили на сервер, то нужно его переиграть:

git push -f



Я нахеровертил в проекте, как мне откатиться, сохранив тестовую версию?

Вообще этот случай скорее уникальный, т.к. вы обычно должны работать в соседних от master ветках, однако если уж случилось, то..

git log --graph --decorate --pretty=oneline --abbrev-commit

покажет вам ваше дерево коммитов - выберите тот, к которому хотите откатиться

git checkout <commit>

git checkout -b trash

git add .

git commit -m 'trash commit'

Мы переключились на то состояние, когда все еще не было сломано, создали ветку trash, переключившись в нее (-b), добавили файлы и закоммитили.

дальше.



Я закончил разработку, как слить ветки?

git checkout master

git merge <branch>



Кто-то порушил мой репозиторий своими тупыми коммитами! Как мне откатиться к нормальному?

В git существует возможность взять какой-то из коммитов и применить его на репозиторий, при этом это будет новый, самый последний коммит. на который будет указывать HEAD.

git cherry-pick <commit id>

git push



Я сделал 100500 коммитов, как мне теперь их слить в один?

Выберите коммит до которого (не включая этот) вы хотите слить все остальные

git rebase -i <commit id>

откроется редактор, где в столбец будут коммиты, которые надо слить. Команду перед нужным коммитом указать - reword, а перед остальными - f. это оставит только один комментарий нужного коммита.