summaryrefslogtreecommitdiff
path: root/GIT.md
diff options
context:
space:
mode:
authorvlapa <vlapa@ya.ru>2026-06-13 20:33:26 +0300
committervlapa <vlapa@ya.ru>2026-06-13 20:33:26 +0300
commite5abc1fe99340b979b18864d978179f71fe8f5c5 (patch)
tree98fd0ad7c6d0744894d6e74e446daacd9e6dd1b5 /GIT.md
First
Diffstat (limited to 'GIT.md')
-rw-r--r--GIT.md252
1 files changed, 252 insertions, 0 deletions
diff --git a/GIT.md b/GIT.md
new file mode 100644
index 0000000..be92c2a
--- /dev/null
+++ b/GIT.md
@@ -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 # убирает файл из зоны индекса
+
+```
+