Git

Материалы по Git

Цель git:
— Сохранение промежуточных копий и
— параллельная работа нескольких человек над одним кодом.

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

В системе контроля версий три состояния файлов:

  • — Изменен
  • — Готов к коммиту (добавлен в индекс)
  • — Закоммичен

Перед тем как создать коммит (версию программного кода, которая изменена и имеет дату, время и название программного кода), нужно те изменения, которые мы внесли в файл, подготовить к коммиту: перечислить их и написать что эти изменения нужно внести в наш коммит. Эта подготовка называется «добавление в индекс».

— Сhanges to be commited — изменения, которые добавлены в индекс и должны быть закоммичены. Staged изменения.

— Changes not staged for commit — изменения, которые есть, которые отслеживаются системой отслеживания изменений, но которые не попали в индекс.

— Untracked files — файлы, которые добавлены в проект, но которое не добавлены в систему отслеживания изменений версий.

В каждой из этих трех секций могут быть файлы добавленные, измененные и удаленные.

Репозитории бывают
локальные — те которые лежат у нас на компьютерах
удаленные — те которые лежат на серверах, их можно скачивать и возвращать.

Нужны они чтобы обеспечить работу с кодом нескольким человекам.

Когда работают в команде, то есть центральный репозиторий, и есть локальный.

Процесс получения свой рабочей копии из центрального репозитория называется клонирование. Делается командой clone. Чтобы вернуть обработанный код — делаем команду push. Но перед отправкой нужно выполнить команду pull — это выполнит получение всех изменений, которые произошли за время текущей работы.

 

$ cd IdeaProjects/Git\ Start/src IdeaProjects/Git Start/src — происходит смена директории и переключается в эту. 
$ git init эта команда в текущей папке создает репозиторий — это папка в которой система контроля версий отслеживает изменение версий и файлов. 
$ git status команда отражающая все изменения. В проекте по файлам. Выводит все изменения, которые еще не закоммитили.

— Сhanges to be commited — изменения, которые добавлены в индекс и должны быть закоммичены. Staged изменения.
— Changes not staged for commit — изменения, которые есть, которые отслеживаются системой отслеживания изменений, но которые не попали в индекс.
— Untracked files — файлы, которые добавлены в проект, но которое не добавлены в систему отслеживания изменений версий. 

$ git add .
$ git add filename1 filename2
добавляется файл в папку отслежвания версий. Точка обозначает, что добавляется все файлы, начиная с текущей директории. Вместо точки — можно добавлять имя конкретного файа можно поставить или имена конкретных файлов, пишутся подряд как в примере.  
$ git commit -m <message> добавление файла в коммит с комментариями
$ git add -p test.html  частичное добавление в индекс
? вызывает справку
$ git rm —cached test.html удаление из отслеживания файла test.html
$ git rm -f testdelet.html полное удаление файла testdelet.html. Не только из системы отслеживания изменения версий git, но и полное удаление файла из файловой системы. 
$ git mv file1.html file22.html Команда, которая переименовывает файл file.html в файл file22.html 
$ git log команда возвращает все коммиты, которые были сделаны. Вход в лог, который отражает все коммиты. Выход из лога по клавише q
$ git diff commi1 commit2 команда отражает изменения между коммитом 1 и коммитом 2. commit1 и commit2 — это номерные коды (хэши) коммитов, которые появляются при команде git log . 
$ git diff HEAD~1 это аналогичная команда, но сравнивает последний коммит с предыдущим. При этом последний коммит — это 0, если ввести HEAD~2 то будет сравнение предыдущего коммита с ПредПредЫдущим
$ git show  команда показывает не все коммиты как это делает git log, а только последний коммит, но показывает его более детально. 
$ git diff HEAD~1 HEAD~2 команда показывает изменения между коммитами предпоследним и ПредПредпоследним
$ git diff test.html команда возвращает изменения, которые внесены в файле test.html и которые еще не были закоммичены
$ git diff —name-only 2ae39a1f команда возвращает изменения только в файлах в коммите. Какие добавлены, какие удалены и т.д. при этом хэш взят короткий. Короткий хэш можно брать из свойства коммита, отображаются в Idea 
$ git checkout — test.html команда отменяет все текущие изменения в файле test.html до внесения в индекс. 
$ git reset HEAD test.html команда отменяет изменения, которые уже добавили в индекс командой $ git add test.html , то есть отменяется сохранение в индекс, но значение в файле не отменяется. Так что можно отменить уже значение командой $git checkout —test.html
$ git commit —amend команда позволяет редактировать последний сохраненный коммит. Коммит откроется в среде, которая определена по умолчанию — для нас это sublime 
$ git revert bd659500 Команда, которая полностью отменяет утвержденный коммит. К команде добавляется короткий хэш, который определяет коммит, который надо отменить. 
$ git reset —hard bd659500 команда полностью удаляет коммиты. Работает так: git reset hard <короткий хэш> — и команда удалить ВСЕ коммиты, которые ПОСЛЕ коммита хэш которого мы указали. То есть это срезание коммитов после указанного коммита, хэш которого указали в команде. ЛУЧШЕ НЕ ПРИМЕНАТЬ ТАКОЙ НА ПЕРВЫХ ЭТАПАХ. 
$ git reset —hard команда стирает все изменения, которые были внесены в код и не добавлены в индекс и которые были добавлены в индекс. То есть окатывает до последнего утвержденного коммита. 
$ git reset —soft команда берет все коммиты, которые ПОСЛЕ указанного и все изменения добавляет в индекс, а коммиты срезает. 
$ ls команда листинга текущих файлов в текущей папке. Отображаются все папки и файлы. 
$ git init создает репозиторий в папке
$ git clone https://github.com/dropbox/dropbox-sdk-java команда клонирует репозиторий с сайта репозитория на компьютер локально. 
$ git push команда отправляет все изменения, которые были сделаны локально, а именно коммиты (отправляются только закоммиченные изменения), на гитхаб или любой другой удаленный репозиторий, который изначально был склонирован командой clone 
$ git pull команда, которая забирает изменения, которые были сделаны в репозитории на сайте, команда забирает изменения на компьютер 
$ git checkout -b dev команда создает дополнительную ветку с именем dev и автоматически переключается в эту ветку. 
$ git checkout master команда переключает на ветку master
$ git push -u origin dev отправка в репозиторий ветки dev 
$ git push -u origin master отправка в репозиторий ветки master 
$ git remote  команда возвращает название сервера к которому подключен проект
$ git remote -v команда возвращает адреса серверов для разных команд fetch и push, то есть для отправки и для получения данных 
$ git branch -m dev develop команда меняет название ветки, -m от слова modify, дальше указывается старое названеи ветки и новое. 
$ git branch -l возвращает название всех веток, которые созданы в проекте
$ git branch -d develop команда для удаления ветки develop , 
$ git push —delete origin dev команда удаляет ветку dev с репозитория. Ветка не должна быть веткой по умолчанию. 
$ git diff master..origin/master команда сравнивает две ветки либо локальные, либо локальную с удаленной на репозитории, но удаленную нужно предварительно скачать git fetch 
$ git pull команда именно сливает то что на удаленном сервере с тем, что у нас на локальном диске, то есть затягивает и сливает. 
$ git fetch команда просто затягивает данные по ветке из репозитория для сравнения, НО не сливает то что в репозитории с тем, что у нас на локальном диске
$ git merge yazykov эта команда сливает с текущей веткой ветку yazykov другого участника проекта. 
$ git merge —abort отмена автоматических merge/ отменяет последний автоматический merge но не ручной. 
$ git blame poetry.txt аналогичка команде annotate из графического интерфейса — позволяет увидеть кто и когда создавал каждую строку. 
$ git stash команда позволяет добавлять текущее изменение в стэш, То есть в некую область временного хранения своего изменения. 
$ git stash list команда возвращает список всех стэшей, которые сделали мы в процессе раоты. Это как временная ячейка памяти.