C O D E - I N F O . R U

Git: базовые команды и самые основные ситуации. Примеры.


В данной статье рассмотрены основные команды git. Не смотря на то что команды
git, git common commands, основные команды гитВ данной статье рассмотрены основные команды git. Не смотря на то что команды "базовые", это не означает что имеется ввиду какой-то "неполноценный" набор команд. Освоив их - вы сможете достаточно полноценно пользоваться git. То есть, рассмотренных команд обычно хватает при решении примерно 90% задач возникающих при разработке программ с использованием рассматриваемой "системой контроля версий". В случае с не совсем тривиальными ситуациями, для лучшего понимания представлены примеры.

Необходимый уровень знаний для понимания данного материала: понимания базовых принципов git, а именно: для чего нужна система контроля версий, что такое индекс, ветка, коммит, иметь представление о локальном и удалённом репозитории.
 
Данная статья отлично подойдёт как повседневная "шпаргалка" для начинающих (и не только начинающих) разработчиков. 

Итак, к делу!!!

Настройка:

Выводит версию используемого git:
git version

Отображает настройки:
git config --list

Изменить в настройках email пользователя:
git config --global user.email test@gmail.com

Инициализация git с текущими настройками настройками
git init

Отобразить состояния файлов (изменённые\в индексе)
git status
 

Добавление\удаление в "индекс" (staged область)

Добавить в индекс конкретный фаил (test.php):
git add test.php

Добавить в индекс все изменённые файлы текущей директории:
git add .
 
Убрать фаил из staged области (индекса), отмена подготовки
git reset HEAD test.php
 
Отменить изменения в файле (если он ещё не в индексе (staged области)):
git checkout -- test.php

Отменить изменения всех файлов в каталоге web
git checkout -- web/*


Комиты

Cделать комит включающий в себя все файлы (изменения) которые в данный момент в индексе, и написать  комментарий:
git commit -m "some comment"

Cделать комит конкретного файла (фаил должен быть в индексе, т.е. например перед этим выполнена команда: git add test.php)
git commit -m "Краткое описание" test.php
 
Добавить изменения в предидущий комит
git commit --amend -m "First program version  - it's new comment"
 

Работа с ветками

создать ветку:
git branch <имя_ветки>
 
переключиться на другую ветку:
git checkout <имя_ветки>
 
посмотреть, какие есть ветки в локальном репозитории:
git branch -v
* master 0967848 File robots.txt added

посмотреть, "кто кого отслеживает":
git branch -vv

посмотреть все имеющиеся ветки (локальные и удалённые):
git branch -va
где: 
v - вывести подробно,
а - отображать все ветки локальные и удалённые
 
обновить текущую ветку до уровня удалённой ветки "master"?
стать на нужную ветку:
git checkout <имя_ветки>
 и выполнить:
git pull origin master
 
удалить ветку:
git branch -d <имя_ветки> (git branch -D <имя_ветки>)

Примеры:

1.1. Cлияние веток

1.2.Настройки отслеживания локальной ветки

1.3.Настройки отслеживания удалённой ветки (ситуация 1)

1.4.Настройки отслеживания удалённой ветки (ситуация 2)



Удалённые репозитории:

Посмотреть подключённые удалённые репозитории:
git remote -v

Удалить ветку в удалённом репозитории
git push origin --delete <имя_ветки>

Клонировать проект (примеры ниже):
git clone <URL>

Получить данные (изменения) из удалённого репозитория в свою локальную копию удалённого репозитория:
git fetch

Привязать свой локальный репозиторий к удалённому:
git remote add <repo_name URL>
где repo_name - придумать имя репозитория (видно локально)
URL - адрес удалённого репозитория;
Например:
git remote set-url origin https://RepoName@bitbucket.org/RepoName/code-info.git

Получить файлы из удалённой ветки (если удалённый репозиторий уже подключён к локальному):
git fetch <repo_name>

Если хотим добавить данные из локальной ветки в удалённый репозиторий:
git push <repo_name branch_name>

Получить данные из ветки удалённого репозитория:
git pull <repo_name branch_name>

чтобы удалить подключеный репозиторий:
git remote remove my-remote-repo master

Примеры:

2.1.Присоединиться к разработке или использ.проект для которого уже создан удалённый репозиторий

2.2.Получить данные (изменения) из удалённого репозитория в свою локальную копию удалённого репозитория

2.3.Привязать локальный репозиторий к удалённому и загрузить в него данные из локального

2.4.Слияние удалённых веток (например через web-интерфейс) и последующее обновление локальных веток:

2.5.Создать новый удалённый репозиторий и залить проект

2.6.Клонирование проекта

 

 

Пример #1.1: Слияние веток | Назад

ЗАДАЧА:
1)Добавить изменения из текущей ветки "my-new-branch" в ветку "master";
2)Отправить изменения обновлённой ветки "master" в ветку "master" удалённого репозитория.

РЕШЕНИЕ:
1) переключаемся на ветку "master":
git checkout master
выполняем слияние:
git merge my-new-branch
смотрим состояние:
git branch -v
или
git branch -vv
* master        3d774c7 [впереди 1] Vendor directory changes
  my-new-branch 3d774c7 Vendor directory changes
видим 2 ветки находящиеся на одном коммите
3d774c7 [впереди 1] - означает что локальная ветка мастер находится как бы впереди удалённой ветки мастер
теперь всё готово к отправке в удалённый репозиторий
2) посмотрим список удалённых репозиториев:
git branch -va
* master                3d774c7 [впереди 1] Vendor directory changes
  my-new-branch         3d774c7 Vendor directory changes
  remotes/origin/HEAD   -> origin/master
  remotes/origin/master 0967848 File robots.txt added

смотрим название репозитория:
git remote -v
origin https://github.com/RepoName/code-info.git (fetch)
origin https://github.com/RepoName/code-info.git (push)

видим, репозиторий "origin", следовательно команду "push" выполняем так (обновляем удалённую ветку "master":):
git push origin master
 

Пример #1.2: Настройка отслеживания локальной ветки | Назад

ЗАДАЧА:
Допустим есть ветка "master" и "hotfix".
Нужно, чтобы ветка "master" отслеживала изменения в "hotfix" и соответственно сообщала об этом при команде git status или git checkout master (при переходе на ветку "master")

РЕШЕНИЕ:
Для этого становимся на ветку "hotfix" и пишем следующую команду:
git branch --set-upstream master
Теперь локальная ветка "master" отслеживает локальную ветку "hotfix".
ПРИМЕЧАНИЕ:
Флаг --set-upstream устарел и будет удален в будущем. Вместо него используйте --track 
или --set-upstream-to
 

Пример #1.3: Настройка отслеживания удалённой ветки (ситуация 1) | Назад

ЗАДАЧА:
Назначить локальной ветке "develop" ветку для отслеживания - удалённую ветку "develop".
Предполагается, что и локальная и удалённая ветки "develop" - существуют.

РЕШЕНИЕ:
Становимся на локальную ветку develop и:
git branch --set-upstream-to origin/develop
 

Пример #1.4: Настройка отслеживания удалённой ветки (ситуация 2) | Назад

ЗАДАЧА:
Например мы создали локальную ветку develop от ветки master. Поработали в ней, 
создали несколько комитов. Теперь решили создать удалённую копию этой ветки и
настроить локальную (develop) так,чтобы вышестоящей веткой для неё была удалённая (develop).

РЕШЕНИЕ:
1.Заходим в удалённый репозиторий (на сайт) и создаём ветку develop от ветки master;
2.На локальной машине - убеждаемся что находимся на ветке develop;
3.Вводим: 
git push --set-upstream origin develop
4.Проверяем (посмотреть кто кого отслеживает):
git branch -vv
 
расшарить комиты удалённой ветки "master" (например после слияния удалённых веток)
git checkout master
git fetch (?)
git status
На ветке master
Ваша ветка отстает от «origin/master» на 3 коммита и ....
теперь можем обновить текущую локальную ветку ("master") в соответствии с удалённой "origin/master":
git pull
 

Пример #2.1: Присоединиться к разработке или использ.проект для которого уже создан удалённый репозиторий | Назад

git clone https://github.com/RepoName/code-info.git .
(в конце точка, чтобы выгрузилось в текущую папку, а не создало новую)
теперь може посмотреть текущее состояние веток:
git branch -va
* master                0967848 File robots.txt added
  remotes/origin/HEAD   -> origin/master
  remotes/origin/master 0967848 File robots.txt added
Username for 'https://github.com': RepoName
Password for 'https://RepoName@github.com': 
Подсчет объектов: 586, готово.
Delta compression using up to 2 threads.
Сжатие объектов: 100% (450/450), готово.
Запись объектов: 100% (586/586), 67.47 KiB | 0 bytes/s, готово.
Total 586 (delta 210), reused 0 (delta 0)
remote: Resolving deltas: 100% (210/210), completed with 207 local objects.
To https://github.com/RepoName/code-info.git
   0967848..3d774c7  master -> master
 

Пример #2.2: Получить данные (изменения) из удалённого репозитория в свою локальную копию удалённого репозитория | Назад

Шаг 1
смотрим текущее состояние наших веток, в том числе состояние локальной копии удалённой ветки (зафиксированное последней процедурой проверки её состояния):
git branch -va
* master                0967848 File robots.txt added
  remotes/origin/master 0967848 File robots.txt added


Шаг 2
теперь посмотрим название удалённого репозитория:
git remote -v
origin https://github.com/RepoName/code-info.git (fetch)
origin https://github.com/RepoName/code-info.git (push)
видим, что подключены удалённые репозитории с присвоеным (по умолчанию) именем "origin"

Шаг 3
проверяем состояние удалённой ветки "master" удалённого репозитория "origin", а также обновляем её локальную копию "remotes/origin/master"
git fetch origin

теперь смотрим состояние:
git status
На ветке master
Ваша ветка отстает от «origin/master» на 1 коммит и может быть перемотана вперед.
  (используйте «git pull», чтобы обновить вашу локальную ветку)
нечего коммитить, нет изменений в рабочем каталоге

Шаг 4
eщё раз смотрим текущее состояние наших веток:
git branch -va
* master                0967848 [позади 1] File robots.txt added
  remotes/origin/master 3d774c7 Vendor directory changes
видим, изменения в коммитах по сравнению с предидущим запросом "git branch -va"
локальная копия удалённого репозитория "remotes/origin/master" изминилась.

Шаг 5
теперь можем переключиться на неё и посмотрить какие изменения в ней содержатся:
git checkout origin/master

если изменения нас устраивают можно "маржить" эту ветку с нашей локальной веткой "master":
для этого переходим в локальную ветку "master":
git checkout master
убеждаемся что мы на ветке "master":
git branch -va
* master                0967848 [позади 1] File robots.txt added
remotes/origin/master 3d774c7 Vendor directory changes

Шаг 6
делаем слияние веток ("маржим")
git merge origin/master

ПРИМЕЧАНИЕ:
В случае, если вам не нужно смотреть изменения в удалённой ветке и вы хотите сразу обновить локальную ветку "master" до состояния удалённой ветки "master", 
то проще после шага 2, сделать "pull" запрос к ветке "master" удалённого репозитория (в данном случае "origin"):
git pull origin master
в итоге будет получен тот-же результат
 

Пример #2.3: Привязать локальный репозиторий к удалённому и загрузить в него данные из локального | Назад

ЗАДАЧА:
1. Привязать локальный репозиторий "test-repo" к удалённому "my-remote-repo";
2. Загрузить данные из локального репозитория test-repo в удалённый "my-remote-repo";

РЕШЕНИЕ:
Шаг 1: из каталога test-repo пишем:
git remote add my-remote-repo https://github.com/RepoName/my-remote-repo.git
 
 
Шаг 2: смотрим список веток в локальном репозитории:
git branch -va
* master                        d2fa10c First version
 
Шаг 3: выгружаем данные в удалённый репозиторий: (отправка данных в удал.репозиторий):
git push my-remote-repo master 
где, my-remote-repo - наш удалённый репозиторий,
master - имя ветки которую отправляем
 
Шаг 4: снова смотрим список веток в локальном репозитории:
git branch -va
* master                        d2fa10c First version
  remotes/my-remote-repo/master d2fa10c First version
где, remotes/my-remote-repo/master - локальная копия удалённого репозитория
 

Пример #2.4: Слияние удалённых веток (например через web-интерфейс) и последующее обновление локальных веток: | Назад

После слияния удалённых веток develop с веткой master на сайте cтановимся на локальную ветку "master",
Сравниваем текущие изменения в удалённой ветке с текущими в локальной:
git fetch

смотрим результат:
git status

На ветке master
Ваша ветка отстает от «origin/master» на 3 коммита и может быть перемотана вперед.

Обновляем локальную ветку «master»:
git pull

Теперь обновим локальную ветку develop в соответствии с удалённой "master":
становимся на ветку "develop":
git checkout develop

обновляем:
git pull origin master

посмотрим результат:
git branch -vv

* develop 9749189 [origin/develop: впереди 1] Merged develop into master
  master  9749189 [origin/master] Merged develop into master
Видим, что теперь локальная ветка "develop" впереди удалённой "develop"
Следовательно - обновим удалённую ветку "develop":
git push

ВСЁ! ;)
 

Пример #2.5: Создать новый удалённый репозиторий и залить проект: | Назад

ЗАДАЧА:
1) создать удалённый репозиторий для проекта.
2) подготовить папку с проектом и залить её в созданный удалённый репозиторий
 
РЕШЕНИЕ:
Создаём репозиторий test-repo с помощью web-интерфейса bitbucket.org

Далее, в локальной папке с проектом:
инициализируем git:
git init

смотрим результат:
git status

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

добавляем файлы в индекс (staged область):
git add .

делаем первый комит:
git commit -m "First version"

подключаем пустой удалённый репозиторий "test-repo"
git remote add origin https://my-projects@bitbucket.org/my-projects/test-repo.git

находясь на локальной ветке "master" подключаем удалённую ветку "master" как "вышестоящую" (т.е. которая будет отслеживаться локальной веткой "master"):
git push --set-upstream origin master

нет указателя HEAD
git log --oneline --decorate --graph --all
* 42e7029 (HEAD -> master, origin/master) First version

 
 
1. Создаём директорию в которую будем клонировать
 
2. Переходим в эту директорию и пишем в командной строке:
git clone https://my-projects@bitbucket.org/my-projects/my-site.git . 
(клонируется ветка master)

3. Теперь установим vendor с зависимостями:
composer install

4. в каталоге /config создать фаил db.php типа:
<?php

return [
    'class' => 'yii\db\Connection',
    
    'dsn' => '
              mysql:host=localhost;
              dbname=my_db
             ',
    'username' => 'root',
    'password' => 'root',
    'charset' => 'utf8',
];
 
5. Предоставить права на запись для "apache2":
sudo chmod -R 770
 
6. Дополнительная ЗАДАЧА:
Добавим дополнительную ветку "editorial-template", обновим с удалённой веткой "editorial-template", настроим отслеживание (этих веток), и выполним слияние локальных веток "master" и "editorial-template" (последняя - опережает "master").

РЕШЕНИЕ:
6.1 создаём ветку:
git branch editorial-template
 
6.2 переходим в неё:
git checkout editorial-template
 
6.2.1 если имеются изменения которые не в индексе - можно их убрать, например: 
git checkout -- components/*
 
6.3 пушим всё из удалённой ветки в локальную:
git pull origin editorial-template

6.4 ставим отслеживание удалённой ветки:
git branch --set-upstream-to origin/editorial-template

6.5 сравниваю текущие изменения в удалённой ветке с текущими в локальной на всякий случай =)
git fetch
 
6.6 становимся на ветку "master"
git checkout master

6.7 выполняем слияние "editorial-template" в "master"
git merge editorial-template

Техническая


Понедельник 05 августа 2019

[Просмотров: 44]

Источник: code-info.ru