Friday, October 6, 2017

some notes to work with git

git checkout -- file
відміняє зміни зроблені в файлі, стягує попередній контент файла, до редагування
замість git stash  - затягує тільки цей файл який вказаний (якщо є конфлікти)


git cherry-pick <id_of_commit>
для того щоб не мержити вєтки я просто скопіювати коміти з одної вєтки в другу.

переключаємось на вєтку в яку потрібно перенести коміти
достаємо список айдішніків в хронологічному порядку
в консолі git cherry-pick <id_of_commit>
потім гіт пуш

мержим в консолі.
переключаємось на гілку в яку потрібно змердити
$ git checkout master
і мержимо потрібну гілку
$ git merge hotfix

Конфлікти.
<<<<<<< HEAD:index.html
<div id="footer">contact : email.support@github.com</div>
=======
<div id="footer">
  please contact us at support@github.com
</div>
>>>>>>> iss53:index.html

верня частина над ====
це версія файла в поточній гілці.
нижня, з іншої гілки.
редагуємо конфліктний файл, удаляємо спец символи
і робимо git add file_name
коли все ок, робимо git commit


(або рішаємо конфлікт вручну:
робимос бекапи обох файлів з обох вєток,
переключаємсь на вєтку 2 (яку потім будемо мержити в 1), заміняємо проблемний файл, файлом з вєтки 1, комітимо йго,
і мержимо вєтку 2 у вєтку 1 - конфліктів не повинно буть, так як файл однаковий.
переключаємось на вєтку 2, і вносимо всі зміни в той файл, на основі даних з бекапного файла (тобто вручну відновлюємо контент з бекапа)
комітимо файл у вєтку 2 і знов мержиомо вєтку 2 у вєтку 1)


git branch -v  - показує останні коміти по кожній вєтці.

----
Віддалені репозиторії

git fetch origin - синхронізує  origin/master, витягує все нове з сервера ( origin/master - це вказівник на мастер вєтку на сервері - не на локалці)

git remote - показує всі віддалені репозиторії
git remote -v


git remote add somename git_url  - якщо є різні репозиторії, для різних команд розробників. можна добавити нову удальонну вєтку (somename)
яка буде скороченим імям на повний гіт урл

git fetch somename - для того щоб локальн затягнути все що є на сервері по цій гілці.




--
Зміни

git rm --cached readme.txt  - удаляєм файл з індекса але не удаляємо фізично (якщо помилково його добавили в гіт раніше)


git commit --amend  - заміняє попередній коміт. наприклад ми закомітили, але забули добавить файл який мав буть в цьому коміті. замість того
щоб робить новий коміт, можем типу так

 git commit -m 'initial commit'
 git add forgotten_file
 git commit --amend


відміна індексації файла
ситуація коли ми випадково добавили файл через git add але ще не закомітили. тому
git reset HEAD <file>
видаляє файл з індекса