инструмент, который помогает отслеживать и управлять изменениями в файлах проекта
система управления версиями, предназначенная для отслеживания изменений в коде
копия проекта хранится на компьютере пользователя
каждая версия сохраняется и может быть восстановлена
git следит не за файлами, а за изменениями в них
Линусом Торвальдсом
в 2005 годухранилище проекта с полным набором всех файлов и историей изменений
точки изменений в проекте
gitGraph commit
независимая линия разработки
gitGraph commit commit commit commit
сервер, на котором хранится репозиторий
объединение изменений из одной ветви в другую
gitGraph commit branch dev commit checkout main merge dev
создание копии удалённого репозитория на локальной машине
область подготовки, где хранятся файлы, которые будут включены в следующий коммит
PS C:\Users\pasha> winget install git.git
pasha@localhost:~ sudo apt install git
pasha@localhost:~ sudo pacman install git
$ git init [название проекта]
Можно инициировать без [название проекта]
$ git clone [url-адрес]
[url-адрес]
- адрес репозитория на GitHub, GitLab и тд.
$ git add [файл]
Можно использовать .
, чтобы проиндексировать все измененные файлы
$ git commit -m "[сообщение с описанием]"
git diff
Можно указать файл, если нужно смотреть разницу не всего проекта
$ git status
$ git diff --staged
$ git reset [файл]
$ git diff
Можно указать файл, если нужно смотреть разницу не всего проекта
$ git status
$ git diff --staged
$ git reset [файл]
$ git branch
$ main ± git branch
* main
gitGraph commit
$ git branch [имя ветки]
$ main ± git branch dev
$ main ± git branch
dev
* main
gitGraph commit branch dev
$ git checkout [имя ветки]
$ ~/my-code main ± git checkout dev
Switched to branch 'dev'
$ ~/my-code dev ± git branch
* dev
main
gitGraph commit branch dev checkout dev
$ git merge [имя ветки]
$ ~/my-code dev ± git checkout main
Switched to branch 'main'
Your branch is up to date with 'origin/main'.
$ ~/my-code main ± git merge dev
gitGraph commit branch dev commit checkout main merge dev
$ git log
$ ~/my-code main(1) 130 ± git log --oneline
5f230c7 (HEAD -> feature/tests) sync commit
8bda223 fix: fix tests for factorial functions
c4e9e7f test: add tests to factorial function
7978f95 (origin/main, origin/HEAD, main, dev) update: created comment
81495d6 feature: create factorial calculator
Можно использовать без oneline
$ git checkout [хэш коммита]
$ ~/my-code main ± git checkout 7978f95
Note: switching to '7978f95'.
You are in 'detached HEAD' state.
HEAD is now at 7978f95 update: created comment
$ ~/my-code 7978f95 ±
git fetch
git push -u origin [ветка]
git pull
pull = fetch + merge
git revert
pull = fetch + merge
$ git config --global user.name "Kutikov Pavel"
$ git config --global user.email "kutikovpasha@gmail.com"
commit 43ba095677a0f1806bc5d69fbc8afaf76578904f (HEAD -> test_test, origin/main, origin/HEAD, test-test, main)
Author: Pasha Kutikov kutikovpasha@gmail.com
cd "название папки"
$ cd my-code
my-code
└── factorial.py
git init
$ ~/my-code git init
hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint:
hint: git config --global init.defaultBranch name
hint:
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint:
hint: git branch -m name
Initialized empty Git repository in /home/pasha/my-code/.git/
$ ~/my-code master* ±
git add .
$ ~/my-code master* ± git add .
.
- добавить все файлы в папке
Можно и желательно потом добавлять только те файлы, которые подходят под тему коммита
$ ~/my-code master* ± git add factorial.py
$ ~/my-code master ± git commit -m "{название коммита}"
[master (root-commit) 81495d6] feature: create factorial calculator
1 file changed, 1 insertion(+)
create mode 100644 factorial.py
-m "..."
- название коммита обязательно, должно быть кратким и содержательным
$ ~/my-code master ± git commit
У вас откроется терминальный текстовый редактор
{название коммита}
{описание коммита}
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# On branch master
# Changes to be committed:
# modified: factorial.py
#
1
- пишем название репозитория
$ ~/my-code master ± git remote add origin git@github.com:ktkv419/my-code.git
main
$ ~/my-code master ± git branch -M main
$ ~/my-code main ± git push -u origin main
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 246 bytes | 246.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To github.com:ktkv419/my-code.git
* [new branch] main -> main
Branch 'main' set up to track remote branch 'main' from 'origin'.
git add .
$ ~/my-code master* ± git add .
$ ~/my-code master ± git commit -m "{название коммита}"
[master (root-commit) 81495d6] feature: create factorial calculator
1 file changed, 1 insertion(+)
create mode 100644 factorial.py
$ ~/my-code main ± git push -u origin main
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 246 bytes | 246.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To github.com:ktkv419/my-code.git
* [new branch] main -> main
Branch 'main' set up to track remote branch 'main' from 'origin'.
Если у вас добавлен ssh
ключ, то лучше используйте SSH вместо HTTPS
$ ~ git clone https://github.com/ktkv419/my-code.git
[master (root-commit) 81495d6] feature: create factorial calculator
1 file changed, 1 insertion(+)
create mode 100644 factorial.py
$ ~ ls
my-code
Если нужно "переехать" в другой репозиторий:
$ ~/my-code master ± git remote add origin {ссылка на ваш репозиторий}
модель ветвления для работы с системой контроля версий Git, разработанная для удобного управления ветками в больших и средних проектах
gitGraph commit branch dev commit branch feature/one commit commit commit checkout dev commit branch feature/two commit commit checkout dev commit merge feature/two merge feature/one checkout main merge dev checkout dev commit
main
основная ветка, содержащая стабильную и готовую к выпуску версию продукта
dev
ветка, в которой ведётся основная разработка
gitGraph commit branch dev commit commit commit checkout main merge dev checkout dev commit commit checkout main merge dev checkout dev commit
feature
Ветви, создаваемые для работы над отдельной функциональностью
feature/название-фичи
dev
dev
hotfix
используются для срочного исправления критических ошибок в продакшн-версии продукта, которые нужно устранить как можно быстрее
hotfix/название-бага
gitGraph commit branch dev commit branch feature/one commit commit commit checkout dev commit branch feature/two commit commit checkout dev commit merge feature/two merge feature/one checkout main merge dev checkout dev commit checkout main commit branch hotfix/unresponsive-ui commit checkout main merge hotfix/unresponsive-ui
main
или
dev
$ ~/my-code feature/tests ± git log --oneline
5f230c7 (HEAD -> feature/tests) sync commit
8bda223 fix: fix tests for factorial functions
c4e9e7f dsajdklas djkasldjkl asdjkl
7978f95 (origin/main, origin/HEAD, main, dev) update: created comment
81495d6 feature: create factorial calculator
$ git rebase -i 81495d
pick 7978f95 update: created comment
pick c4e9e7f dsajdklas djkasldjkl asdjkl
pick 8bda223 fix: fix tests for factorial functions
pick 5f230c7 sync commit
Изменить сообщение коммита
Объединяет коммит с предыдущим
Объединяет коммит с предыдущим и создает на их новый коммит
pick 7978f95 update: created comment
reword c4e9e7f dsajdklas djkasldjkl asdjkl
pick 8bda223 fix: fix tests for factorial functions
squash 5f230c7 sync commit
$ ~/my-code feature/tests ± git log --oneline
212584b (HEAD -> feature/tests) Combine two into one
d3ea25f feat: add tests to factorial function
7978f95 (origin/main, origin/HEAD, main, dev) update: created comment
81495d6 feature: create factorial calculator
Позволяет выбирать коммиты из другой ветки в текущую
$ ~/my-code main ± git branch
feature/tests
* main
$ ~/my-code main ± git log --oneline
ded5648 (HEAD -> main, origin/main, origin/HEAD) change: change logic of factorial function
212584b (feature/tests) Combine two into one
d3ea25f feat: add tests to factorial function
7978f95 update: created comment
81495d6 feature: create factorial calculator
gitGraph commit commit branch feature/tests commit commit checkout main commit checkout feature/tests
$ git checkout feature/tests
$ git cherry-pick ded5684
gitGraph commit commit branch feature/tests commit commit checkout main commit checkout feature/tests commit
$ ~/my-code feature/tests ± git checkout main
Switched to branch 'main'
Your branch is up to date with 'origin/main'.
$ ~/my-code main ± git checkout master
$ ~/my-code main ± git reset HEAD~1
gitGraph commit commit branch feature/tests commit commit commit
просматривает историю изменения голов веток на протяжении вашей работы для поиска коммитов, которые вы могли внезапно потерять, переписывая историю
$ ~/my-code main ± git log --oneline
a570707 (HEAD -> main, origin/main, origin/HEAD) feat: commit 3
bb7409e feat: commit 2
e17d7c5 feat: commit 1
81495d6 feature: create factorial calculator
gitGraph commit commit commit commit
$ git reset --hard e17d7c5
gitGraph commit commit
$ main ± git reflog
e17d7c5 (HEAD -> main) HEAD@{0}: reset: moving to e17d7c5 <----------------
a570707 (origin/main, origin/HEAD) HEAD@{1}: commit: feat: commit 3
bb7409e HEAD@{2}: commit: feat: commit 2
...
$ git reset e17d7c5
gitGraph commit commit commit commit
Позволяет хранить чужие библиотеки (с контролем версий) в своем репозитории
$ main ± tree
.
├── index.js
└── lib
$ main ± cd lib
$ main ± git submodule add https://github.com/lodash/lodash.git
$ ~/my-code main(+0/-0) ± tree
.
├── index.js
└── lib
└── lodash
├── ...
...
$ main ± git clone https://github.com/ktkv419/my-code.git
$ main ± tree
.
├── index.js
└── lib
$ main ± git submodule update --init --recursive
recurse-submodules
, чтобы автоматически скачивать и подмодули
$ main ± git clone --recurse-submodules https://github.com/ktkv419/my-code.git
$ ~/my-code main(+0/-0) ± tree
.
├── index.js
└── lib
└── lodash
├── ...
...
git log -L{строка},{строка}:{название файла}
$ ~/homeserver-docker main ± git log -L186,186:docker-compose.yml
commit 7728d452e826b698a8be590c7560ba7cfca98ecc (HEAD -> main, origin/main, origin/HEAD)
@@ -186,22 +186,1 @@
+ # wireguard:
commit c5afc483322f1165388a5365624b900f1fc7e495
@@ -209,13 +186,22 @@
+ wireguard: