Я пишу информационный бюллетень для учащихся под названием Mighty Knowledge. Каждый новый выпуск содержит ссылки и основные уроки из самого лучшего контента, включая цитаты, книги, статьи, подкасты и видео. Каждый выбран специально для того, чтобы научиться жить более мудрой, счастливой и полной жизнью. Зарегистрируйтесь здесь.
Вы недавно начали использовать Git? Или, может быть, вы использовали его какое-то время, но его многие загадки все еще сбивают с толку.
Git - это прежде всего система контроля версий и основа любого проекта разработки программного обеспечения. Обычно он служит двум основным целям: резервное копирование кода и управление версиями кода. Вы можете работать над кодом шаг за шагом, сохраняя прогресс каждого шага на тот случай, если вам понадобится откат к резервной копии!
Распространенная проблема заключается в том, что Git сложно использовать. Бывают случаи, когда версии и ветки не синхронизированы, и вы тратите много времени, просто пытаясь продвинуть свой код! Хуже того, незнание того, как именно работают определенные команды, может легко привести к случайному удалению или перезаписи битов кода!
Вот почему я подготовил это руководство, чтобы научить вас правильно использовать git, чтобы мы все могли приступить к программированию!
Установить и настроить
Установка
Прежде всего, мы должны установить git, чтобы использовать его! Мы можем сделать это быстро и легко с помощью apt:
sudo apt install git-all
Базовая настройка
При желании вы можете сохранить свое имя пользователя и адрес электронной почты git, чтобы вам не приходилось вводить их снова для будущих команд git.
git config --global user.name "User Name" git config --global user.email "email"
Цвета
Изящный трюк, который некоторые люди часто упускают, заключается в том, что вы можете включить дополнительную раскраску для git, чтобы вам было легче читать вывод команд!
git config --global color.ui true
Базовый контроль версий
Инициализация git
Теперь мы можем приступить к управлению версиями нашего проекта. Идите дальше и перейдите в каталог, для которого вы хотите настроить контроль версий в терминале, используя стандартную команду «cd». Теперь вы можете инициализировать репозиторий git следующим образом:
git init
Это создает новый подкаталог с именем .git, содержащий все необходимые файлы репозитория - скелет репозитория Git. На данный момент в вашем проекте еще ничего не отслеживается.
Добавление и фиксация
Чтобы начать управление версиями существующих файлов, вы должны начать с отслеживания этих файлов и выполнить первоначальную фиксацию. Для этого вы начинаете с добавления в git файлов, которые хотите прикрепить к своему проекту git.
git add <file> git commit -m 'first commit'
Удаленное резервное копирование
Большой! Вы начали создавать версии своего проекта GitHub локально. Если вы хотите сохранить и сделать резервную копию своего проекта удаленно, вам необходимо создать удаленный репозиторий на GitHub (это бесплатно!). Итак, сначала зайдите на github.com и создайте репозиторий. Затем используйте ссылку репозитория, чтобы добавить его в качестве origin вашего локального проекта git, то есть где этот код будет храниться.
### General example git remote add origin \ https://github.com/user/repo.git ### An example with a repository of mine git remote add origin \ https://github.com/GeorgeSeif/Semantic-Segmentation-Suite.git
Затем вы можете отправить свой код на GitHub… альт! Вы создали резервную копию своего кода!
git push origin master
Работа с вашими файлами
Проверка статуса
Главный инструмент, который вы используете для определения того, какие файлы в каком состоянии находятся, - это команда git status
. Это позволяет вам видеть, какие из ваших файлов уже зафиксированы, а какие нет. Если вы запустите эту команду, когда все файлы уже зафиксированы и отправлены, вы должны увидеть что-то вроде этого:
$ git status # On branch master nothing to commit (working directory clean)
Если вы добавляете новый файл в свой проект, а этот файл раньше не существовал, при запуске $ git status
вы должны увидеть неотслеживаемый файл следующим образом:
$ git status # On branch master # Untracked files: # (use "git add <file>..." to include in what will be committed) # # README nothing added to commit but untracked files present (use "git add" to track)
Это делает $ git status
действительно полезным для быстрой проверки того, что вы уже скопировали, а что есть только локально.
Расширенное добавление файлов
Есть еще несколько дополнительных способов добавления файлов в Git, которые сделают ваш рабочий процесс более эффективным. Вместо того, чтобы искать все файлы с изменениями и добавлять их один за другим, мы можем сделать следующее:
### Adding files one by one git add filename ### Adding all files in the current directory git add -A ### Adding all files changes in the current directory git add . ### Choosing what changes to add (this will got through all your ### changes and you can 'Y' or 'N' the changes) git add -p
Продвинутые коммиты
Ранее мы видели, что можем зафиксировать файл в Git, используя $ git commit -m "commit message"
. Это нормально для коротких сообщений о фиксации, но если вы хотите сделать что-то более сложное, вам понадобится немного больше:
### Commit staged file(s) ### This is typically used for shorter commit messages git commit -m 'commit message' ### Add file and commit in one shot git commit filename -m 'commit message' ### Add file and commit staged file git commit -am 'insert commit message' ### Changing your most recent commit message git commit --amend 'new commit message' # Combine a sequence of commits together into a single one ### You might use this to organise a messy commit history git rebase -i ### This will give you an interface on your core editor: # Commands: # p, pick = use commit # r, reword = use commit, but edit the commit message # e, edit = use commit, but stop for amending # s, squash = use commit, but meld into previous commit # f, fixup = like "squash", but discard this commit's log message # x, exec = run command (the rest of the line) using shell
Ветвление и слияние
Ветвь master вашего репозитория GitHub всегда должна содержать рабочий и стабильный код. Однако вы можете также сделать резервную копию некоторого кода, над которым вы сейчас работаете, но который не является полностью стабильным. Может быть, вы добавляете новую функцию, много экспериментируете и ломаете код, но все же хотите сохранить резервную копию, чтобы сохранить свой прогресс!
Ветвление позволяет вам работать с отдельной копией вашего кода, не затрагивая главную ветвь. Когда вы впервые создаете ветку, под новым именем создается полный клон вашей главной ветки. Затем вы можете независимо изменить код в этой новой ветке, включая фиксацию файлов и т. Д. После того, как новая функция будет полностью интегрирована и код станет стабильным, вы объедините ее в главную ветку!
Разветвление
Вот все, что вам нужно для создания ветки и работы с ней:
### Create a local branch to work on git checkout -b branchname ### Switching between 2 branches git checkout branch_1 git checkout branch_2 ### Pushing your new local branch to remote as backup git push -u origin branch_2 ### Deleting a local branch - this won't let you delete a branch ### that hasn't been merged yet git branch -d branch_2 ### Deleting a local branch - this WILL delete a branch even if it ### hasn't been merged yet! git branch -D branch_2 ### Viewing all current branches for the repository, including both ### local and remote branches. Great to see if you already have a ### branch for a particular feature addition, especially on bigger ### projects git branch -a ### Viewing all branches that have been merged into your current ### branch, including local and remote. Great for seeing where all ### your code has come from! git branch -a --merged ### Viewing all branches that haven't been merged into your current ### branch, including local and remote git branch -a --no-merged ### Viewing all local branches git branch ### Viewing all remote branches git branch -r # Rebase master branch into local branch $ git rebase origin/master # Pushing local branch after rebasing master into local branch $ git push origin +branchname
Слияние
Большой! Теперь вы узнали, как создать ветку и работать с этим кодом! Когда вы закончите добавлять новую функцию в свою ветку, вы захотите снова объединить ее с главной веткой, чтобы у вашего мастера были все новейшие функции кода.
Вот как это сделать:
### First make sure you're looking at master branch git checkout master ### Now merge your branch to master git merge branch_2
Вот и все! возможно, вам придется исправить любые конфликты кода между вашей веткой и мастером, но Git покажет вам, как это сделать, после того, как вы введете эту команду слияния.
Исправление ошибок и возврат
Ошибки случаются…. и они часто случаются с кодированием! Важно то, что мы можем их исправить.
Здесь не бойтесь! В Git есть все, что вам нужно на случай, если вы ошиблись с введенным кодом, что-то перезаписали или просто хотите исправить что-то, что вы нажали.
### Switch to the version of the code of the most recent commit git reset HEAD git reset HEAD -- filename # for a specific file ### Switch to the version of the code before the most recent commit git reset HEAD^ -- filename git reset HEAD^ -- filename # for a specific file ### Switch back 3 or 5 commits git reset HEAD~3 -- filename git reset HEAD~3 -- filename # for a specific file git reset HEAD~5 -- filename git reset HEAD~5 -- filename # for a specific file ### Switch back to a specific commit ### Where the '0766c053
' is the commit ID git reset0766c053
-- filename git reset0766c053
-- filename # for a specific file ### The previous commands were what's known as "soft" resets. Your ### code is reset, but git will still keep a copy of the other code ### handy in case you need it. On the other hand, the --hard flag ### tells Git to overwrite all changes in the working directory. git reset --hard0766c053
Полезные советы и рекомендации для Git
Мы все закончили с мелкими мелочами! Вот еще несколько советов и приемов Git, которые могут оказаться полезными для улучшения рабочего процесса!
Searching
### Searches for parts of strings in a directory git grep 'something' ### Searches for parts of strings in a directory and the -n prints ### out the line numbers where git has found matches git grep -n 'something' ### Searches for parts of string with some context (some lines ### before and some after the 'something' we are looking for) git grep -C<number of lines> 'something' ### Searches for parts of string and also shows lines BEFORE it git grep -B<number of lines> 'something' ### Searches for parts of string and also shows lines AFTER it git grep -A<number of lines> 'something'
Видя, кто что написал
### Show alteration history of a file with the name of the author git blame 'filename' ### Show alteration history of a file with the name of the author ### and the git commit ID git blame 'filename' -l
логирование
### Show a list of all commits in a repository. This command shows ### everything about a commit, such as commit ID, author, date and ### commit message. git log ### List of commits showing only commit messages and changes git log -p ### List of commits with the particular string you are looking for git log -S 'something' ### List of commits by author git log --author 'Author Name' ### Show a summary of the list of commits in a repository. This ### shows a shorter version of the commit ID and the commit message. git log --oneline ### Show a list of commits in a repository since yesterday git log --since=yesterday ### Shows log by author and searching for specific term inside the ### commit message git log --grep "term" --author "name"