Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Solved #5

Open
wants to merge 20 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
# Коллекция полезных .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` — удалить ненужные файлы и оптимизировать локальный репозиторий
14 changes: 14 additions & 0 deletions commit.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
## 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` — удалить неотслеживаемые файлы из директории
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
15 changes: 15 additions & 0 deletions reset.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
## A3. stash, reset, revert для управления изменениями
#### Изменения можно временно припрятать
#### Можно получить разницу между любыми коммитами
#### Коммит можно отменить другим коммитом
- `git stash` — сохранить все модифицированные файлы в виде набора изменений
- `git stash pop` — восстановить последний сохраненный набор изменений и удалить его из списка
- `git stash list` — показать список сохраненных наборов изменений
- `git reset --hard <commit>` — переместить текущую ветку на `<commit>`, задать индекс и директорию согласно коммиту, устранив всю разницу
- `git reset --mixed <commit>` — переместить текущую ветку на `<commit>`, задать индекс согласно коммиту, оставить разницу между исходным и новым состоянием в директории
- `git reset --soft <commit>` — переместить текущую ветку на `<commit>`, не задавать индекс и директорию согласно коммиту, а оставить разницу между исходным и новым состоянием в индексе и директории
- `git reset --hard HEAD~1` — отменить последний коммит
- `git revert <commit>` — создать коммит, отменяющий изменения из коммита
- `git diff <from_commit> [<to_commit>]` — вывести разницу между двумя коммитами
- `git diff --name-status <from_commit> [<to_commit>]` — список измененных файлов
- `git difftool <from_commit> [<to_commit>]` - вывести разницу с помощью difftool из настроек
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