Git базовые операции

Здесь опишу базовые операции работы с гитом.
Для удобства создадим репозиторий на гитхабе.

После зальем туда наш проект. Для этого в корне проекта выполняем команду

 git init

Появиться новая дир-я .git

Проверим статус

 git status

Довольно частая и полезная команда, к-я показывает на какой ты ветке, какие файлы отслеживаются, а какие нет, т.е. не добавлены в индекс.

Добавим удаленный репозитарий, который мы создали недавно на гитхабе и присвоим ему псевдоним origin.


git remote add origin https://github.com/user/repo

git status показал красным неотслеживаемые файлы. Добавим их в индекс.


// все сразу
git add .
// или отд. взятый файл
git add /path/to/file

Также можно посмотреть изменения для файла


git diff file

Итак файлы добавлены, осталось все это закомитить.


// откроется редактор для сообщения комита
git commit
// без редактора
git commit -m "message"
git commit -m "autoupdate `date +%F-%T`"

Если открыли в редакторе nano, сохраняется сообщение Ctrl + O, Ctrl + X для выхода.
Готово, отправим комит в удаленный репозитарий origin. Делается это командой push.


git push origin master

origin это удаленная ветка, master — это локальная. Других веток у вас пока нет.
Откатиться к некоторому комиту


git reset --hard f5d22d39

откат к удаленной ветке

git reset —hard origin/master

Создание веток.

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

Переключиться на ветку надо командой checkout


git checkout branchname

Эта же команда кстати восстановит удаленые файлы


// восстановит все
git checkout .
// восстановит отд. взятый
git checkout /path/to/file

Итак, мы переключились на нужную ветку. Отпочковаться можно командой branch или checkout -b


// автоматом переключит на новую ветку
git checkout -b name_of_my_new_branch
// или последовательно
git branch name_of_my_new_branch
git checkout name_of_my_new_branch

Согласитесь git checkout -b намного удобнее.
Вывести список всех локальных веток можно


git branch

Звездочкой укажет на ту ветку, где вы сейчас. HEAD сейчас на этой ветке.
Список всех удаленных веток


git branch -r

Пуш для новой ветки будет уже таким


git push origin name_of_my_new_branch

Теперь эта ветка на удал. репозитории тоже есть.

разрешение конфликтов.

Чтобы получить все удаленные ветки, надо их извлечь.


git fetch

Теперь если посмотреть список всех удаленных веток, появятся новые


git branch -r

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


подсказка:  Заберите и слейте внешние изменения 
подсказка: (например, с помощью «git pull …») перед повторной попыткой отправки
подсказка: изменений.

Надо сделать pull(вообще делать пул это хорошая манера)


git pull origin name_of_current_branch

Если появились конфликты, разрешаем их. Выглядят они так


<<<<<<< HEAD и здесь код ======= какой то код >>>>>>> cb32e6c8741018bb00afece62c8e205bc0d53581

Есть много утилит для этого, а также можно мануально. Я предпочитаю phpstorm — Git — Resolve conflicts. Думаю самый удобный.
После разрешения конфликта надо заново сделать комит. Теперь пул должен выдать Already up-to-date. Если нет — значит кто то шустрый успел наделать еще конфликта))
Делаем пуш.


git push origin current_branch

СЛИЯНИЕ ВЕТОК

Допустим вы создавали ветки на каждую задачу. А ветка релиза, или develop версии как хотитие — одна, и она должна собирать в себе все это. Надо сливать ветки. Делаем merge.


// переключаемся на базовую ветку
git checkout master
// сливаем нужную
git merge some_branch
// заливаем слитие
git push origin master

Готово, ветка слита, на мастере появились правки с нужной ветки. Она теперь особо не нужна, можно удалить.


git branch -d some_branch
git push --delete origin some_branch
// проверяем
git branch -r

В списке этой ветки уже не будет.

Полезные команды


// посмотреть комиты
git log
// откатиться к комиту
git reset --hard 2c7051ae

Прятанье

// осторожно, откатывает все изменения!
git stash
git stash list
git stash apply stash@{2}

Leave a comment

Your email address will not be published.


*