Programming, electronics, lifestyle

13 Dec 2020

Заметка по работе с GIT

Работа с Submodule

https://git-scm.com/book/ru/v1/Инструменты-Git-Подмодули

git submodule init
git submodule update

Полезные ссылки

  • Удаление первого коммита stackoverflow.com
  • Отмена последнего коммита в git evtuhovich.ru
  • Объединение репозиториев eax.me
  • Конфликт при объединении несвязных историй --allow-unrelated-histories stackoverflow.com
  • Продвинутое слияние git-scm.com
  • Работа с удалёнными репозиториями git-scm.com
  • Теория GIT habrahabr.ru
  • Раскрытие тайн reset git-scm.com
  • Объединение репозиториев qaru.site

Первоначальная настройка git

Все очень хорошо изложено в этой статье, не вижу смысла копировать

https://git-scm.com/book/ru/v2/Введение-Первоначальная-настройка-Git

Базовые команды

# Rebase 3х верхних коммитов в интерактивном режиме (через текстовый редактор)
git rebase -i HEAD~3
# Перетереть историю в текущем remote
git push --force
# Снести верхние 3 коммита (без удаления изменений), для полного удаления коммитов - флаг `--hard`
git reset HEAD~3
# Застейджить все изменения
git add .
# Добавить изменения к предыдущему коммиту
git commit --amend
# Стянуть коммиты в свою историю, расходящиеся коммиты в своей ветке перенести вверх
git pull --rebase
# Добавить пустой коммит
git commit --allow-empty -m "Empty commit"

Смена автора коммита

Замена автора в конкретном коммите с помощью переписывания коммита:

git commit --amend --author="John Doe <[email protected]>"

Замена одного автора на другого во всем репозитории:

OLD_EMAIL="[email protected]"
NEW_EMAIL="[email protected]"
NEW_NAME="John Doe"

git filter-branch --env-filter '
  if test "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL"
  then
    GIT_AUTHOR_EMAIL=$NEW_EMAIL
    GIT_AUTHOR_NAME=$NEW_NAME
  fi

  if test "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL"
  then
    GIT_COMMITTER_EMAIL=$NEW_EMAIL
    GIT_COMMITTER_NAME=$NEW_NAME
  fi
' -- --all

Источник: codeconcisely.com.

Настроить пользователя можно как для локального репозитория так и глобально:

Глобально:

git config --global user.name "Your Name"
git config --global user.email "[email protected]"

Локально:

# посмотреть текущие настройки локального репозитория
git config --list
# изменить настройки пользователя в локальном репо
git config user.email "[email protected]"
git config user.name "Your Name"
git config user.password "your password"

также это можно сделать вручную в файле .git/config

[user]
        name = John Doe
        email = [email protected]

Источник: rwsite.ru

Удаление файла из истории

Найти в каких коммитах менялся файл:

git log -- example.txt

Переписать историю и удалить файл:

git filter-branch --tree-filter 'rm -f путь/к/удаляемому/файлу' -- --all

Также если версия git cтарше 2.22:

git filter-repo --path путь/к/удаляемому/файлу --invert-paths