16. Git, част 2

16. Git, част 2

16. Git, част 2

1 декември 2014

Първи тест тази сряда

организация

Първи тест тази сряда

структура

Първи тест - материал и подготовка

Следващи домашни

Оставащ материал

Въпрос 1

За какво се използва staging областта?

Съхранява файловете, които ще бъдат добавени в следващия commit.

Въпрос 2

Как можем да видим списък от направените commit-и? Ами да разгледаме промените, направени в commit?

  • git log
  • git show

Въпрос 3

Можем ли да променим commit обект?

Не, защото ще му се промени хешът. Можем да създадем нов, който да заеме неговото място.

Въпрос 4

Какво е branch?

  • Разклонение на кода
  • История от commit-и
  • Файл, съдържащ хеш на commit

Сливане на разклонения

git merge killer-feature
git merge --squash killer-feature

Различни стратегии на сливане. Основните са 2:

Fast-Forward стратегия

Просто премества указателя за клона

Fast-Forward стратегия

Просто премества указателя за клона

Recursive стратегия

Слива 2 разделили се клона с обща история.

Recursive стратегия

Жълтото e merge commit-a. Той съдържа промените и от двата клона.

Обновяване 2

git pull == git fetch && git merge origin/master

Изтриване на branch

git branch -d killer-feature
git push origin --delete killer-feature # Ако сте го push-нали
git push origin :killer-feature         # В по-стари версии

Изтриване на branch

Типичен процес на работа

Заради "евтините" branch-ове на git можем да направим следното:

Типичен процес на работа

Типичен процес на работа

Резултат

Машината на времето

Или как да върнем "безвъзвратно" загубените промени.

git reset
git checkout
git commit --amend
git revert
git reflog

Машината на времето

git reset <commit> <files>
git reset HEAD lectures/git.slim

Машината на времето

git checkout <files>
git checkout <commit> <files>
git checkout <branch> <files>

Машината на времето

git commit --amend
git push --force   # Ако вече сте push-нали

Машината на времето

git revert <commit>

Машината на времето

git reflog

Игнориране на файлове

.gitignore

Игнориране на файлове

Формат на .gitignore

/bin            # Файла/директорията bin в главната директория на проекта
bin             # Всички файлове и директории с име bin
bin/            # Всички директории с име bin
compiled/*.html # Всички файлове с разширение html в compiled-lectures
lib/**/*.txt    # Всички текстови файлове в lib или нейна поддиректория
*.exe           # Всички изпълними файлове за Windows

Git rebase

Най-мощният инструмент за пренаписване на историята

git checkout killer-feature
git rebase master
git rebase -i master
git rebase -i HEAD~4
git pull --rebase

Git blame

"Кой написа това?"

git blame lectures/index.yml

Акценти

Защо git по този начин?

Изводи

Искайте помощ:

Графичен интерфейс

GitX

Графичен интерфейс

TortoiseGit

Графичен интерфейс

GitHub

Материали

Въпроси по Git?

Сега е добър момент да ги зададете.

Въпроси