diff options
| author | vlapa <vlapa@ya.ru> | 2026-06-13 20:33:26 +0300 |
|---|---|---|
| committer | vlapa <vlapa@ya.ru> | 2026-06-13 20:33:26 +0300 |
| commit | e5abc1fe99340b979b18864d978179f71fe8f5c5 (patch) | |
| tree | 98fd0ad7c6d0744894d6e74e446daacd9e6dd1b5 /GIT.md | |
First
Diffstat (limited to 'GIT.md')
| -rw-r--r-- | GIT.md | 252 |
1 files changed, 252 insertions, 0 deletions
@@ -0,0 +1,252 @@ +![[GIT_шпаргалка.jpg]] + +```sh +sudo apt install git +git config --global --edit +git config --global user.name "Name_Name" +git config --global user.email email@example.com +git config --list + +# Создание "своего чистого" репозитория: +git init --bare ~/git/RadSens.git + +git clone vlapa@178.20.46.157:~/git/...... +# По умолчанию git clone загружает всю историю изменений, что может быть медленно и требовать много места. Если история не нужна, используйте: +git clone <repo_url> --depth=1 + +git commit -a -m + -m "text_commit" + -a (заменяет git add) + --amend - заменить/исправить последний commit + +git init +git add . # добавить все файлы +git commit -m "first commit" +git branch -M main +git remote add origin vlapa@178.20.46.157:~/git/...... +git push -u origin main + +git remote set-url origin new.git.url/here + +git@89.110.92.137:/home/git/my/esp8266/8266-clock_ws2812.git + +====================== +======= FLENOV ======= +====================== + +git checkout -b имяветки база +# git checkout говорит, что мы должны переключиться на репозиторий. Ключик -b говорит, что нужно не просто переключиться, а создать новую ветку с именем =имяветки=. +# После имени бренча через пробел идет база - по документации необязательный параметр - от какой ветки вы хотите создать свою. Я рекомендую всегда указывать этот параметр. Если вы не укажите базу, то в качестве нее будет выступать текущая ветка. Чаще всего ветки нужно создавать от основной master, а не от текущей. Если только вы явно не хотите создать свою ветку от какой-то другой, команда создания будет + +git checkout -b имяветки origin/master + +# Стоп, еще немного о именовании. В данном случае я указываю origin/master и это удаленный ствол. На это указывает слово origin. Если мы создаем новую ветку fixdone/345321, то это локальная копия на нашем диске. Удаленная копия на сервере git в репозитории будет иметь имя origin/fixdone/345321. Когда мы создаем новые ветки, то желательно создавать от удаленной версии master, но у нас ее пока нет, поэтому если попытаться выполнить такую команду, то она завершиться ошибкой. + +# Да, я рекомендую всегда использовать в качестве базы удаленную версию origin/master, которая указывает на версию на сервере, но если ее нет, то придется использовать локальную – просто master. Мы пока создали только локальный репозиторий. Пока нет удаленного, придется использовать локальный. Как только появиться удаленный, всегда используйте его. О удаленных ветках мы поговорим в следующий раз. + +# Итак, пока нет удаленного мастера, давайте создадим новую ветку от локального: +git checkout -b initialwork master + +# Я назвал ветку initialwork. В результате выполнения команды вы должны увидеть что-то типа: +Switched to a new branch 'initialwork' + +# Теперь мы находимся в ветке, где мы можем исправлять баг или работать над новым функционалом. Давайте создадим файл index.html. Вы можете воспользоваться для этого любым текстовым редактором. + +git add i* # все файлы начинающиеся с =i= +git add -u # все измененные файлы + +git checkout master +git merge initialwork + +git branch # отображает все ветки созданные локально + -M # переименовать ветку + -a # все ветки: локальные и удаленные + +echo "# demo" >> README.md +git init +git add README.md +git commit -m "first commit" +# git branch -M main +git remote add origin vlapa@178.20.46.157:~/git/name.git +git push -u origin master # main + +# Работа на другом компьютере: +git clone vlapa@178.20.46.157:~/git/name.git + +# или: +git init +git remote add origin vlapa@178.20.46.157:~/git/name.git +# получить последние изменения: +git fetch + +git checkout secondone +# изменеяем файл, далее: +git diff # file_name +git add -u +git commit -m "commit" +git push origin secondone +# теперь на сервере есть 2 ветки + +# на еще одном компьютере: +git checkout -b origin/secondone +git merge origin/secondone + + + + +============== +git show +git commit --amend # дополнение и изменение коммита +git commit --amend -m "новое название" # переименовать +git checkout file_name # откатить последние изменения +git reset --hard # сбросить все последние изменения +git status + # untracked - неотслеживаемый + # modified - в рабочей директории есть более новая версия по сравнению с хранящейся в HEAD или в области подготовленных файлов (изменения не находятся в следующем коммите). + # staget - в рабочей директории и области подготовленных файлов есть более новая версия по сравнению с хранящейся в HEAD (готов к коммиту). + # Без изменений — одна версия файла во всех разделах, т. е. в последнем коммите содержится актуальная версия. + +# Файл может быть одновременно в состоянии «изменён» и «подготовлен», если версия в рабочей директории новее, чем в области подготовленных файлов, которая в свою очередь новее версии в HEAD. + +# Мы можем использовать опцию -s для команды git status, чтобы получить более компактный вывод (по строке на файл). +# Если файл не отслеживается, то будет выведено ??; если он был изменён, то его имя будет красным, а если подготовлен — зелёным. + +# Чтобы посмотреть сами изменения, а не изменённые файлы, можно использовать следующие команды: + +git diff +# — посмотреть что добавилось или сравнение рабочей директории с областью подготовленных файлов; + +git diff --staged +# — сравнение области подготовленных файлов с HEAD. + +# Если использовать аргумент <файл/папка>, то diff покажет изменения только для указанных файлов/папок, например git diff src/. + +.gitignore +# Чтобы отметить файлы, которые мы хотим игнорировать, можно использовать шаблоны поиска (считайте их упрощёнными регулярными выражениями): + +# /... — позволяет избежать рекурсивности — соответствует файлам только в текущей директории; +# .../ — соответствует всем файлам в указанной директории; +# *... — соответствует всем файлам с указанным окончанием; +# ! — игнорирование файлов, попадающих под указанный шаблон; +# [...] — соответствует любому символу из указанных в квадратных скобках; +# ? — соответствует любому символу; +# /**/ — соответствует вложенным директориям, например a/**/d соответствует a/d, a/b/d, a/b/c/d и т. д. + +# Мы даже можем использовать шаблоны поиска при указании файла/папки в других командах. Например: +git add src/*.css +# добавит все файлы .css в папке src. + +git log # - можно передать разные опции: + --oneline # короткий лог + -p # показывает изменения в каждом коммите; + --stat # показывает сокращённую статистику для коммитов, например изменённые файлы и количество добавленных/удалённых строк в каждом их них; + -n # показывает n последних коммитов; + --since=___ и --until=___ # позволяет отфильтровать коммиты по промежутку времени, например --since="2019-01-01" покажет коммиты с 1 января 2019 года; + --pretty # позволяет указать формат логов (например, --pretty=oneline), также можно использовать --pretty=format для большей кастомизации, например --pretty=format:"%h %s"; + --grep и -S # фильтруют коммиты с сообщениями/изменениями кода, которые содержат указанную строку, например, git log -S имя_функции позволяет посмотреть добавление/удаление функции; + --no-merges # пропускает коммиты со слиянием веток; +ветка1..ветка2 # позволяет посмотреть, какие коммиты из ветки 2 не находятся в ветке 1 (полезно при слиянии веток). Например, `git log master..test` покажет, каких коммитов из ветки test нет в master (о ветках поговорим чуть позже). + --left-right # ветка1...ветка2 показывает коммиты, которые есть либо в ветке 1, либо в ветке 2, но не в обеих; знак < обозначает коммиты из ветка1, а > — из ветка2. Обратите внимание: используется три точки, а не две; + -L # принимает аргумент начало,конец:файл или :функция:файл и показывает историю изменений переданного набора строк или функции в файле. + +``` + +# Свой GIT +```sh +# Server: +sudo apt install git +sudo useradd git +sudo passwd git +ssh-keygen # - ??? +mkdir repo1.git +git init --bare +git init --bare ~/git/repo1.git +#------------------------ +# Client: +sudo apt install git +ssh-copy-id git@server_adresses + +git config --global --edit +git config --global user.name "Name_Name" +git config --global _user.email email@example.com +git config --global core.editor "vim" # устанавливаем редактор по умолчанию +git config --list + +mkdir /home/user/repo1 +cd /home/user/repo +git init +git add . +git commit -m "commit1" +git remote add origin git@addresses_server:/home/git/repo1.git +git push -u origin master + +#------------------------- +# Создаем свою ветку: +git branch # смотрим ветку +git branch -a # - смотрим все ветки +git branch new_branch # - создаем ветку new_branch +git checkout -b new_branch # - так тоже можно создать +git checkout new_branch # - переключаемся на нее +git diff # - посмотреть изменения +git status + +vim .gitignore # добавляем в игнор все лишнее +# .idea/ +# .vscode/ +# .pio +git add . +git commit -m "modified .gitignore" +git reset HEAD <file> # - убрать файл из индекса +git push --set-upstream origin new_branch + # установить ветку new_branch как origin + # указывается только при первом PUSH + +git checkout <hash> # - переход на другой commit + +# Сливаемся: +git checkout master # переключаемся на ветку master +git checkout -b new-branch # создаём новую ветку +git merge new_branch # сливаемся: master/new_branch +git branch -d new_branch +git branch -r +git branch -d -r origin/new_branch +git push --set-upstream origin new-branch + +# Удалить файл удаленно и локально: +git branch -D new-branch # удаляем лишнюю ветку локально +git rm 'file name' +git rm -r 'folder name' +git commit -m 'message' +git push -u origin branch + +# Удалить файл только удаленно: +git push --delete origin new-branch # удаляем ветку в репозитории +git rm --cached 'file name' +git rm -r 'folder name' +git commit -m'message' +git push -u origin branch + +#===================================== + +git fetch # - загружает коммиты, файлы и ссылки из удаленного репозитория в ваш локальный репозиторий. + +# Извлеките данные с помощью команды fetch, если хотите увидеть, над чем работают остальные. Эта команда похожа на команду `svn update` и позволяет увидеть прогресс в центральном репозитории, но при этом не вынуждает вас выполнять слияние изменений с вашим репозиторием. + +git pull # - слить локальную и удаленную версию на локальной машине (на самом деле представляет собой комбинацию двух других команд: git fetch и git merge) + +git log --oneline # короткий LOG + +git reset --... +# -- soft HEAD~ - на 1 commit назад без удаления последних изменений +# -- mixed HEAD~ - на 1 commit назад без удаления последних изменений и не внесенными предпоследними изменениями +# -- hard HEAD~ - на 1 commit назад с удалением ВСЕХ последних изменений + +git rm file.name # - удаление и сразу git add . (если просто самому удалить файл из папки - то нужно самому git add .) + +git mv file.name new_file.name # - переименование и сразу git add . (если просто самому переименовать файл из папки - то нужно самому git add .) + +git restore file.name # - откат всех последних изменений до commit +--staged # убирает файл из зоны индекса + +``` + |
