Мануал по работе с GIT

Установка Git Linux https://git-scm.com/download/linux Windows https://git-scm.com/download/win MacOS https://git-scm.com/download/mac При установке выбираем «Использовать Git из командной строки» (Use Git from... the Command Prompt). Стартовые настройки Откройте терминал и выполните команду: В ответе увидите сообщение: git version 2.25.1 #версия вашего GIT Основные данные о вашем профиле хранятся в файле .gitconfig, чтобы другие разработчики понимали с кем они работают внесети туда данные. Для этого выполните следующие команды: git config --global user.name "YouNikName" #напишите в кавычки свой ник или имя git config --global user.email youmail@youmail.com #напишите свой e-mail Проверяем, что получилось: git config --list В вывводе увидите свои данные внесенные в конфиг GIT. Создание нового локального репозитория GIT хранит свои файлы и историю прямо в папке проекта. Чтобы создать новый репозиторий, нам нужно создать директорию с проектом зайти в папку нашего проекта и выполнить команду init. В этой конкретной папке GIT создаст скрытую директорию .git, где будет храниться история репозитория и настройки. Выполните следующие команды: mkdir Desktop/git_project/ cd Desktop/git_project/ git init Командная строка вернет примерно такой результат: Initialized empty Git repository in /home/user/Desktop/git_project/.git/ Ваши файлы в GIT могут находится в одном из четырёх состояний: неотслеживаемый , добавленный в индекс, изменённый, закоммиченный. Изначально файлы находящиеся в вашем репозитории находятся в состоянии "неотслеживаемый", чтобы GIT стал учитывать изменения в файле его нужно добавить в индекс и он меняет состояние на "добавленный в индекс", если на этом этапе внести в него изменения он поменяет статус на "изменённый", для того чтобы сохранить изменения и была возможность к ним вернуться мы сохранем их коммитом и он переходит в состояние "закоммиченный". Создание нового удаленного репозитория После создания локального репозитория нам нужно создать удаленный репозиторий на GitHub с которым мы будем работать. Есть два способа, как вы можете создать репозиторий в своем аккаунте на GitHub: Вы заходите в свой аккаунт и создаете новый репозиторий, довольно простая процедура, которую не вижу смысла описывать. Создание форка основного репозитория с которым вы собираетесь работать и последующаю отправка туда pull request (функция Github, позволяющая вносить изменения в ветку из других веток или репозиториев). В данном мануале будем использовать именно этот вариант. Выполните следующие шаги: 1. Зайдите на основной репозиторий https://github.com/freecode-academy/freecode.academy 2. В правой верхней части страницы есть три кнопки Watch, Star, Fork. Вам нужно нажать кнопку Fork в вашем аккаунте появится новый репозиторий. 3. Склонируйте ваш репозиторий в локальный репозиторий, для этого выполните следующие шаги в командной строке: cd Desktop/git_project/ #перейдите в папку вашего проекта git clone git@github.com:YouName/YouFork.git #в команду git clone вставьте ссылку вашего форка (ссылка находиться в вашем репозитории зеленая кнопка Code) После клонирования на компьютере появится папка с репозиторием. Определение состояния Полезна команда git status позволяет вам определить в каком состоянии вы находитесь в любой непонятной ситуации вызывайте git status: В терминале выполните следующую команду: git status Если нет изменений вывод будет примерно такой: На ветке Master Ваша ветка обновлена в соответствии с «origin/Master». нечего коммитить, нет изменений в рабочем каталоге Если есть изменения вывод будет примерно такой: На ветке master Ваша ветка обновлена в соответствии с «origin/master». Неотслеживаемые файлы: (используйте «git add <файл>…», чтобы добавить в то, что будет включено в коммит) src/GlobalStyle.ts ничего не добавлено в коммит, но есть неотслеживаемые файлы (используйте «git add», чтобы отслеживать их) Обычная отправка коммитов в ваш удаленный репозиторий Если вы изменили в файлы в проекте и хотите отправить сохраненные изменения в свой репозиторий на GitHub. Вам нужно выполнить следующие команды: git add . # добавляем в индекс все измененные файлы git commit -m "My first commit" # отправляем коммит и пишем название вашего коммита git push # отправляем изменения в удаленный репозиторий Продвинутая отправка коммитов в удаленный репозиторий Название "продвинутый" будет описывать алгоритм отправки измененний в основной репозиторий из которого вы делали fork для того чтобы ваши изменения могли внести в основной репозиторий. Здесь мы используем имменно такой алгоритм отправки коммитов перед началом работой с задачей вам нужно ознокомиться с этим алгоритмом и предерживаться его. 1. Перед началом выполнения задачи вам нужно переключиться в ветку мастер и сделать git pull с основного проекта для того чтобы обновить коммиты, которые появились на основном проекте. Выполните следующие команды: git branch В моем случае вывод такой: * LineBreak master Я нахожусь в ветке LineBreak Чтобы переключиться на master выполняем следующую команду: git checkout master В моем случае вывод такой: Переключено на ветку «master» Ваша ветка обновлена в соответствии с «origin/master». Далее выполняем следующую команду: git pull git@github.com:freecode-academy/freecode.academy.git master #загружаем все изменения с основного проекта 2. Создаем новую ветку. Выполните следующую команду: git checkout -b YouBranch #создаем новую ветку и заходим в нее (YouBranch меняем на ваше название) 3. Добовляем измения в индекс, коммитим и делаем пуш в гитхаб. git add . # добавляем в индекс все измененные файлы git commit -m "My first commit" # отправляем коммит и пишем название вашего коммита git push origin branchname # отправляем изменения в удаленный репозиторий 4. Отправляем pull request (функция Github, позволяющая вносить изменения в ветку из других веток или репозиториев). Чтобы создать Pull Request, зайдём на страницу вашего форка в GitHub. Справа внизу после названия вашего форка, есть вкладка Pull request заходите в нее, если у вас есть коммит для отпрваки вы увидите окно с заголовком и комментарием там будет стоять название вашего коммита с правой стороны будет зеленая кнопка «New pull request» нажимаете эту кнопку ваш pull request будет отправлен. Проверить отправку можно в основном проекте заходите в основной проект во вкладке Pull request будут отображаться цифры с отправленными pull request, если вы туда зайдете сможете увидеть свой pull request. 5. После принятия pull request локально удаляете эту ветку и забываете про нее. Для этого выполните следующую команду: git branch -D YouBranch #YouBranch меняем на ваше название Создаем бранч из коммита для обучения на готовых задачах Вот еще подсказка: если тебе хочется изучить код решения, но не очень удобно на гитхабе диффы смотреть, да еще хочется с кодом поиграться, можно же создать ветку из конкретного коммита. Все, вот ты в бранче test_branch и ровно в этой точке. Запускай yarn dev, иди в код этих файлов и играйся с кодом.

Супер! Как раз плаваю в гите) Спасибо, Олег!

Поправил

Хорошая картинка. Только судя по всему, в данной логике основная локальная ветка - dev. Это далеко не всегда так. К примеру у нас - master (а гитхаб при создании новой репы предлагает по умолчанию ветку main). И если не имея ветки dev попытаться переключиться git checkout dev, получите ошибку. Так что здесь надо понимать под dev - основную ветку, которую вы получили при клонировании проекта.

Вообщем ситуация следующая, пытаюсь встраивать в себя продвинутый алгоритм размещения на GitHub. Но постояно спотыкаюсь об один момент, вместо того, чтобы перед началом работы зайти и создать новый бранч залазию в старый бранч и начинаю вносить изменения там, потом вспоминаю, что нужно было создать новый бранч. Первый раз просто убил все изменения, а вчера сделал много изменений и попытался их перенести в новый бранч по следующему алгоритму: git stash git checkout master git checkout -b "New_branch" git stash apply В итоге столкнулся с двумя проблемамами: 1. После того, как я спрятал изменения в git stash и хотел переключиться на мастер получал ошибку: error: Ваши локальные изменения в указанных файлах будут перезаписаны при переключении на состояние: .eslintcache Сделайте коммит или спрячьте ваши изменения перед переключением веток. Прерываю Вобщем вроде спрятал, но начал вылазить .eslintcache, потом он еще много раз вылазил, победил его тоже сохранив в git stash, но потом он все равно выдовал везде ошибку, когда создал ветку он опять вылез здесь я уже воспользовался git reset --hard HEAD в новой ветке ибо достал он меня:) 2. В итоге когда я сделал git stash apply в новой ветке у меня VSC очень много файлов перекрасилось в фиолетовый цвет в одном файле вылетело сообщение типо подтвердите изменения я подтвердил во вкладке git в VSC все выделенные файлы фиолетовым были зачеркнуты, я их добавил нажав на плюс. Но в итоге оказалось, что помимо этих проблем он мне снес все css файлы, которые у меня были в проекте. Короче в итоге я решил сделать git pull и делать все изменения заново, потому-что все превратилось в какую-то кашу. Собственно вопрос вот в чем, как все-таки правильно поступать в таких случаях, если уже начал изменять в старой ветке, которую нужно было удалить и перенести эти изменения в новую ветку без потери кусков проекта. И можно ли как-то успокоить .eslintcache, чтобы он не лез во все щели в локальном репо, в .gitignor я его добавил, но как его подуспокоить локально не понимаю.

Собственно вопрос вот в чем, как все-таки правильно поступать в таких случаях.... Независимо от того, какой у тебя случай возникает, ты никогда не сможешь поступить правильно, если не сделал перед этим git status. То есть в твоем случае скорее всего получилось следующее: после очередной операции у тебя гит-проект был измененным, то есть git status наверняка показывал изменения (вероятней всего как раз этой твоей .eslintcache). В таком случае попытка переключения как раз и обламывалась. Почему слетели css файлы? Они явно были в состоянии измененном или в текущем подготовленном коммите, который так и не удалось сохранить через git commit (то есть git add . сделал, а git commit нет (или не смог)). В таком случае git reset --hard удалит и эти файлы. >> в .gitignor я его добавил, но как его подуспокоить локально не понимаю. Если ты добавил .gitignor, то это не успокоит, потому что надо .gitignore:) Но даже если ты добавил .gitignore и даже правильно прописал игнор, это не поможет, если папка или файл уже отслеживаются. Надо вычистить из кеша гита. git rm --cached (если папка, то еще и флаг -r надо добавить и очень важно: путь не должен завершаться на слеш / ). https://git-scm.com/docs/git-rm В общем, с гитом, даже не надейся, что уже скоро будет все точно понятно и не будет ошибок :) Так что всегда будь внимателен и обдумывай каждый шаг. Даже я, уже не первый год с ним работаю, иногда делаю ошибки. Пару месяцев назад вот тоже снес кучу изменений незакоммиченных. А git stash от тебя вот узнал :) (Всегда просто делал git checkout -b newBranch просто на горячую, все изменения уходили в новую ветку и там коммитились, а прошлая ветка забывала про это). А еще ведь есть черепик, ребейз и прочее мракобесие :)