Skip to content

Latest commit

 

History

History
238 lines (164 loc) · 13.1 KB

git.md

File metadata and controls

238 lines (164 loc) · 13.1 KB

Вопросы по git с собеседований

  1. Что такое VCS? Что такое Git? Почему его используют?

    Ответ Version Control System (система контроля версий) — программное обеспечение для облегчения работы с изменяющейся информацией.

    https://ru.wikipedia.org/wiki/Система_управления_версиями

    Git — распределённая система контроля версий, которая даёт возможность разработчикам отслеживать изменения в файлах и работать совместно с другими разработчиками.

    Подход Git к хранению данных больше похож на набор снимков миниатюрной файловой системы. При каждом сохранении состояния своего проекта в Git, система запоминает, как выглядит каждый файл в этот момент, и сохраняет ссылку на этот снимок.

  2. Как создать репозиторий, подключить внешний репозиторий?

    Ответ На примере пользователя `username`, создавшего репозиторий `project` на Гитхабе.
    git init
    git add <cписок файлов>
    git commit -m "first commit"
    git remote add origin [email protected]:username/project.git
    git push -u origin master
    
  3. Как загрузить удаленный репозиторий?

    Ответ
    git clone [email protected]:username/project.git
    
  4. Что такое коммит? Как посмотреть историю коммитов?

    Ответ Коммит — подтверждение изменений.

    История коммитов

    git log
    

    https://git-scm.com/book/ru/v2/Основы-Git-Просмотр-истории-коммитов

  5. Какие состояния файлов существуют в системе Git

    Ответ В Git'е файлы могут находиться в одном из трёх состояний: зафиксированном, изменённом и подготовленном. "Зафиксированный" значит, что файл уже сохранён в вашей локальной базе. К изменённым относятся файлы, которые поменялись, но ещё не были зафиксированы. Подготовленные файлы — это изменённые файлы, отмеченные для включения в следующий коммит.

    Таким образом, в проектах, использующих Git, есть три части: каталог Git'а (Git directory), рабочий каталог (working directory) и область подготовленных файлов (staging area).

  6. Что такое ветка в Git?

    Ответ Организованная система ссылок на коммиты.

    Ветка по умолчанию в Git'е называется master. Когда вы создаёте коммиты на начальном этапе, вам дана ветка master, указывающая на последний сделанный коммит. При каждом новом коммите она сдвигается вперёд автоматически.

    Ответвление от основной ветки осуществляется для работы с определенной фичей.

  7. Отличия между командами merge и rebase?

    Ответ В Git'е есть два способа включить изменения из одной ветки в другую: `merge` (слияние) и `rebase` (перемещение).
    • merge

    Это более простая команда.

    Git создаёт новый снимок состояния, который является результатом трёхходового слияния, и автоматически создаёт новый коммит, который указывает на этот новый снимок состояния. Такой коммит называют коммит-слияние, так как он является особенным из-за того, что имеет больше одного предка.

    • rebase

    В этом случае находится общий предок для двух веток (на которой вы находитесь сейчас и на которую вы выполняете перемещение); для каждого из коммитов в текущей ветке берётся его дельта и сохраняется во временный файл; текущая ветка устанавливается на тот же коммит, что и ветка, на которую выполняется перемещение; и, наконец, одно за другим применяются все изменения. Таким образом, все коммиты переписываются с новыми значениями хешей.

    При этом история коммитов становится более аккуратной и красивой. Она выглядит как линейная последовательность коммитов, когда в действительности она выполнялась параллельно.

    https://git-scm.com/book/ru/v1/Ветвление-в-Git-Перемещение

  8. Золотое правило rebase?

    Ответ Не перемещайте коммиты, которые вы уже отправили в публичный репозиторий.

    Если вы будете следовать этому указанию, всё будет хорошо. Если нет — люди возненавидят вас, вас будут презирать ваши друзья и семья.

    Правило вытекает из свойства rebase переписывать историю коммитов.

  9. Как загрузить последние изменения с определенной ветки?

    Ответ
    git pull --rebase
    
  10. Как отправить свои изменения на удаленный репозиторий?

    Ответ
    git add <cписок файлов>
    git commit -m "Commit message"
    git push
    
  11. Как добавить изменения в уже созданный коммит? изменить название такого коммита?

    Ответ
    git add <cписок файлов>
    git commit --amend`
    
  12. Как удалить ветку локально и с удаленного репозитория?

    Ответ
    git branch -d new-branch
    git branch -d origin new-branch
    git push origin :new-branch
    
  13. Что такое запросы на слияние (pull requests)? Как их создавать?

    Ответ Удобная система взаимодействия между автором внесения изменений и хозяином репозитория, позволяющая обсуждать изменения и вносить правки по их ходу.

    https://www.youtube.com/watch?v=M7ZYkjOWr6g

    https://www.youtube.com/watch?v=Wz7RDh6CylI

  14. Как перенести изменения из одной ветку в другую (2 способа)?

    Ответ Использовать cherry-pick

    https://www.youtube.com/watch?v=BP53rBf1PUE

    https://www.youtube.com/watch?v=-fDa6ntlBXg

    Второй способ немного сложнее, нужно сделать ответвление и затем смержить в обе ветки код.

  15. Разница между git и svn (если есть)?

    Ответ Главное отличие Git от Subversion заключается в том, что Git — распределенная система контроля версий.
    • Сервер вообще не нужен. Можно работать локально.
    • В отличие от Subversion, если сервер с «главным» репозиторием, куда пушат свои изменения все разработчики (хотя формально в Git нет никакого «главного» репозитория), вдруг прилег — ничего страшного. Делаем коммиты в локальный репозиторий и ждем, когда сервер вернется.
    • Git дает нам нормальное шифрование «из коробки», безо всяких танцев с бубнами, как в случае с Subversion.
    • Git не раскидывает по каталогам служебную информацию (файл «.svn»?), вместо этого она хранится только в корне репозитория.
  16. Для чего нужен SSH-ключ?

    Ответ SSH-ключи используются для облегчённой авторизации на различных сервисах.

    SSH-ключ состоит из двух частей

    • id_rsa — закрытая часть, которая должна быть доступна только вам, ни кому и ни когда нельзя давать к ней доступ, этот файл можно переносить с компа на ком. так чтобы был у вас был только 1 ключ, но тут свои риски, например у вас в одном месте кто-то получил доступ к $HOME, следовательно все ваши аккаунты потенциально взломали
    • id_rsa.pub — открытая часть, бесполезна без закрытой, её можно показывать всем, можно даже повесить на своём сайте, чтобы желающие дать вам доступ на свой сервер могли быстро добавить ваш открытый ключ в файл ~/.ssh/authorized_keys.
  17. git commit — в каких случаях писать -am, -a и -m?

    Ответ Создание коммита с сообщением (**m**essage) для файлов, находящихся в staging area, которые предварительно туда добавлены:
    git add some.file
    git commit -m "Your message here"
    

    Создание коммита для индексированных (отслеживаемых) файлов автоматически (без предварительной команды add). Новые файлы в коммит не попадут:

    git commit -a -m "Your message here"
    

    Можно просто

    git commit -am "Your message here"
    
  18. Что такое gitflow?

    Ответ Ветвление — это основное понятие в git. Весь GitHub Flow основан именно на нём и согласно ему есть только одно правило: всё, что находится в master-ветке — гарантированно стабильно и готово к деплою в любой момент. Поэтому чрезвычайно важно, чтобы любая ваша новая ветвь создавалась именно от mastera.

Где искать ответы: