Skip to content
3 changes: 0 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,7 +1,4 @@
# Коллекция полезных .gitignore от GitHub: https://github.com/github/gitignore

# Игнорирование всех markdown-файлов:
*.md

# Исключение из игнорирования конкретного файла:
!init.md
17 changes: 17 additions & 0 deletions branch.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
## S3. Манипуляции через ссылки, нет ссылки — в мусор
#### HEAD — текущая ссылка, tag — фиксированная ссылка, branch — движущаяся за HEAD ссылка
#### checkout — перемещение на ветку или коммит, reset — перемещение с веткой на коммит
#### Видно то, на что есть ссылки, остальное — мусор
- `git tag` — вывести список тегов
- `git tag <tagname>` — создать тег
- `git branch` — вывести список локальных веток
- `git branch -av` — вывести список локальных и удаленных веток
- `git branch <branchname>` — создать ветку
- `git branch -d <branchname>` — удалить ветку
- `git checkout <commit>` или `git switch --detach <commit>` — переместить HEAD на коммит, причем получится detached HEAD
- `git checkout <branch>`или `git switch <branch>` — переместить HEAD на ветку
- `git checkout -b <new_branch>` или `git switch -c <new_branch>` — создать ветку и перейти на нее
- `git reset --hard <commit>` — переместить HEAD и текущую ветку на `<commit>`
- `git reflog show <ref>` — показать лог действий со ссылкой
- `git reflog` = `git reflog show HEAD` — показать лог действий с HEAD
- `git gc` — удалить ненужные файлы и оптимизировать локальный репозиторий
20 changes: 20 additions & 0 deletions commit.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
## S2. Хранятся состояния директории, постепенная сборка коммита
#### Хранятся файлы, разница вычисляется на лету
#### Commit index для сборки коммита
- `git add .` — добавить все измененные файлы в индекс
- `git commit -m <msg>` — записать изменения из индекса в репозиторий
- `git status -sb` — вывести состояние директории и индекса кратко с указанием текущей ветки
- `git restore .` или `git checkout .` — отменить изменения в директории по индексу
- `git restore -S .` или `git reset .` — отменить изменения индекса по коммиту (отмена `git add .`)
- `git rm <filename>` — удалить файл из индекса, чтобы перестать хранить его историю в репозитории
- `git show <commit>` — показать содержимое коммита
- `git log --oneline --decorate --graph` — вывести историю коммитов от HEAD в виде дерева
- `git log --oneline --decorate --graph --all` — вывести историю всех коммитов в виде дерева
- `gitk` — открыть графическое представление репозитория
- `git clean` — удалить неотслеживаемые файлы из директории
- `git add .` — добавить все измененные файлы в индекс
- `git commit -m <msg>` — записать изменения из индекса в репозиторий
- `git status -sb` — вывести состояние директории и индекса кратко с указанием текущей ветки
- `git restore .` или `git checkout .` — отменить изменения в директории по индексу
- `git restore -S .` или `git reset .` — отменить изменения индекса по коммиту (отмена `git add .`)
- `git rm <filename>` — удалить файл из индекса, чтобы перестать хранить его историю в репозитории
5 changes: 5 additions & 0 deletions fetch.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
## R1. Доступен fetch коммитов любого репозитория в любой момент
- `git remote -v` — вывести список удаленных репозиториев с их адресами
- `git remote add <name> <url>` — добавить удаленный репозиторий с URL и дать ему указанное имя
- `git fetch` = `git fetch origin` — получить содержимое основного удаленного репозитория
- `git fetch --all` — получить содержимое всех удаленных репозиториев из списка
28 changes: 28 additions & 0 deletions help.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
## H1. Гибкое конфигурирование и качественная документация
### Гибкая настройка под любой процесс
- `git config -e --system` — редактировать настройки системы
- `git config -e --global` — редактировать настройки пользователя
- `git config -e` — редактировать настройки репозитория
- `git config --global user.name "<name>"` — задать имя пользователя
- `git config --global user.email "<email>"` — задать почту пользователя

### Документация ко всем командам
- `git help` — список команд
- `git <command> -h` — помощь по команде в терминале
- `git <command> --help` — документация по команде в браузере

### Алиасы для краткости команд
- `git config --global alias.it "!git init && git commit -m 'Initial commit' --allow-empty"`
- `git config --global alias.st "status -sb"`
- `git config --global alias.call "!git add . && git commit -m"`
- `git config --global alias.commend "commit --amend --no-edit"`
- `git config --global alias.graph "log --oneline --decorate --graph --all"`
- `git config --global alias.to "checkout"`
- `git config --global alias.pushup "push -u origin HEAD"`
- `git config --global alias.please "push --force-with-lease"`
- `git config --global alias.puff "pull --ff-only"`
- `git config --global alias.pure "pull --rebase --autostash"`
- `git config --global alias.undo "reset --soft HEAD^"`

### Надо игнорировать все, кроме исходников
https://github.com/github/gitignore — .gitignore для разных языков
91 changes: 91 additions & 0 deletions index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
<html>
<head>
<script src="https://cdn.jsdelivr.net/npm/@webcomponents/webcomponentsjs@2/webcomponents-loader.min.js"></script>
<script type="module" src="https://cdn.jsdelivr.net/gh/zerodevx/zero-md@1/src/zero-md.min.js"></script>
<script>
window.ZeroMd = {
config: {
cssUrls: [
'/styles/marked.css',
'/styles/prism.css'
]
}
};
</script>
<style>

h1 {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
font-weight: 600;
line-height: 1.25;
text-align: center;
margin-top: 0px;
margin-bottom: 10px;
}

.header {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
line-height: 1.25;
height: 40px;
text-align: center;
margin-top: 0px;
margin-bottom: 10px;
}

.header a {
display: inline-block;
padding-top: 15px;
font-size: 14px;
font-weight: 600;
}

.page {
display: flex;
justify-content: space-between;
page-break-after: always;
margin: 30px;
}

.page .leftColumn {
margin: 0px 30px 0px 0px;
width: 100%;
}

.page .rightColumn {
margin: 0px 0px 0px 30px;
width: 100%;
}

.page .block {
margin: 10px;
width: 100%;
}
</style>
</head>
<body>
<div class="page">
<div class="leftColumn">
<div class="header"><a href="https://github.com/kontur-courses/git">https://github.com/kontur-courses/git</a></div>
<div class="block"><zero-md src="./help.md"/></div>
</div>
<div class="rightColumn">
<h1>Принципы Git</h1>
<div class="block"><zero-md src="./init.md"/></div>
<div class="block"><zero-md src="./commit.md"/></div>
<div class="block"><zero-md src="./branch.md"/></div>
</div>
</div>
<div class="page">
<div class="leftColumn">
<div class="block"><zero-md src="./merge.md"/></div>
<div class="block"><zero-md src="./rebase.md"/></div>
<div class="block"><zero-md src="./reset.md"/></div>
</div>
<div class="rightColumn">
<div class="block"><zero-md src="./fetch.md"/></div>
<div class="block"><zero-md src="./push.md"/></div>
<div class="block"><zero-md src="./upstream.md"/></div>
</div>
</div>
</body>
</html>
4 changes: 4 additions & 0 deletions init.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
## S1. Все локально
#### Все данные хранятся в локальных репозиториях, изменения между ними можно синхронизировать
- `git init` — создать пустой репозиторий
- `git clone <url>` — склонировать репозиторий в новую директорию
6 changes: 6 additions & 0 deletions merge.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
## A1. Трехсторонний merge в три шага
#### Два состояния можно объединить через merge, mergetool и commit
#### Участвуют три стороны: current, incoming и base
- `git merge <commit>` — объединить текущую ветку с другой
- `git mergetool` — разрешить имеющиеся конфликты
- `git merge --abort` — отменить слияние
9 changes: 9 additions & 0 deletions push.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
## R2. Удаленное изменение — это push
- `git push <remote> <local_branch>:<remote_branch>` — добавить изменения из локальной ветки `<local_branch>` и переместить ветку `<remote_branch>` удаленного репозитория
- `git push` = `git push origin HEAD` — добавить изменения из текущей локальной ветки и переместить соответствующую ветку удаленного репозитория
- `git push -f` — выполнить `push`, даже если удаленная ветка уже не является предком
- `git push --force-with-lease` — выполнить `push`, если является предком или удаленная ветка не сдвигалась (использовать вместо предыдущей команды)
- `git push <remote> -d <branch|tag>` — удалить ветку или тег в удаленном репозитории
- `git push <remote> tag <tag>` — отправить тег в удаленный репозиторий
- `git push <remote> --tags` — отправить все локальные теги в удаленный репозиторий
- `git push --mirror` — выполнить агрессивный `push` для всех тегов, веток и HEAD, подходит для создания удаленной копии локального репозитория
8 changes: 8 additions & 0 deletions rebase.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
## A2. rebase, cherry-pick и amend, чтобы пересоздать историю
#### Нельзя переписать историю — можно создать новую
- `git commit --amend --no-edit` — заменить последний коммит ветки на отредактированный с дополнительными изменениями без изменения сообщения
- `git rebase <upstream>` — применить все коммиты от общего родителя до текущего к `<upstream>`
- `git rebase -i <upstream>` — применить заново все коммиты, указав действие с каждым коммитом
- `git rebase --continue` — продолжить rebase после разрешения конфликтов
- `git rebase --abort` — отменить rabase
- `git cherry-pick <commit>` — применить указанный коммит к HEAD
3 changes: 3 additions & 0 deletions run.cmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
start npx http-server
timeout 10
start http://127.0.0.1:8080/index.html
Loading