Найти тему

Вопросы на собеседовании автотестировщика про GIT

Оглавление

Вот список вопросов, которые часто задают тестировщику на собеседованиях или в повседневной работе, касающиеся системы контроля версий Git (обычно бывает не больше 3-4 вопросов):

Основные вопросы (ответы на основные вопросы ниже в статье):

1. Что такое Git и для чего он используется?

2. Как инициализировать новый репозиторий Git?

3. Что такое ветка (branch) в Git и зачем она нужна?

4. Как создать новую ветку в Git?

5. Как переключиться на другую ветку?

6. Что такое "merge" и как его выполнить?

7. Что такое "rebase" и как он отличается от "merge"?

8. Как посмотреть историю коммитов?

9. Что такое "staging area" и каковы её функции?

10. Как добавить изменения в индекс (staging area)?

11. Как выполнить коммит?

12. Что такое "pull" и чем он отличается от "fetch"?

13. Как отменить изменения, которые ещё не были закоммичены?

14. Как отменить последний коммит?

15. Как отобразить различия между двумя коммитами?

16. Что такое "fast-forward" в контексте слияния веток?

17. Как удалить ветку?

18. Что делать, если при слиянии веток возникает конфликт?

19. Как игнорировать определённые файлы при коммите? (Что такое файл .gitignore?)

20. Что такое "fork" и чем он отличается от "clone"?

21. Как клонировать удалённый репозиторий?

22. Что такое "remote" в Git и как его настроить?

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

24. Что такое "cherry-pick" и зачем он нужен?

25. Как безопасно отменить изменения в удалённой ветке?

26. Как объединить изменения из одной ветки в другую без слияния всей ветки?

27. Что делать, если случайно закоммитил что-то в неправильную ветку?

28. Как использовать теги (tags) в Git?

29. Что такое "squash" и как использовать его при слиянии веток?

30. Что такое "detached HEAD" и как работать с ним?

31. Как просмотреть список всех веток в репозитории?

32. Как восстановить файл до состояния определённого коммита?

33. Как можно отменить локальные изменения и вернуться к последнему коммиту?

34. В чем разница между "git reset" и "git revert"?

35. Как найти баг или проблемный коммит с помощью команды "git bisect"?

Вопросы о практике и командах работы (эти вопросы требуют рассуждения, возможно обсудим в отдельной статье):

  1. Какой у вас опыт работы с Git в командной разработке?
  2. Как вы решаете конфликты при слиянии веток?
  3. Как часто вы используете pull requests?
  4. Какие стратегии ветвления (branching) вы предпочитаете?
  5. Что такое Git Flow и как он используется в вашем проекте?
  6. Как вы работаете с удалёнными репозиториями?
  7. Как вы организуете работу с версиями и релизами в вашем проекте?
  8. Как вы интегрируете тестирование с Git (например, автоматические тесты после коммита)?
  9. Есть ли у вас опыт работы с CI/CD системами, связанными с Git?

1. Что такое Git и для чего он используется?

Git — это система контроля версий, которая позволяет отслеживать изменения в коде, работать в команде и управлять разными версиями проекта.

2. Как инициализировать новый репозиторий Git?

git init

Команда создаёт новый локальный репозиторий в текущей папке.

3. Что такое ветка (branch) в Git и зачем она нужна?

Ветка — это отдельная линия разработки. Она позволяет работать над новыми фичами или исправлениями, не затрагивая основную ветку.

4. Как создать новую ветку в Git?

git checkout -b <branch-name>

Создаёт и переключается на новую ветку.

5. Как переключиться на другую ветку?

git checkout <branch-name>

6. Что такое "merge" и как его выполнить?

Слияние веток — это объединение изменений из одной ветки в другую.

git checkout main
git merge <branch-name>

7. Что такое "rebase" и как он отличается от "merge"?

rebase переписывает историю коммитов, тогда как merge сохраняет историю слияния.

git checkout <branch-name>
git rebase main

8. Как посмотреть историю коммитов?

git log

9. Что такое "staging area" и каковы её функции?

Это область, где хранятся файлы, готовые для коммита. Сначала изменения попадают в staging, а затем фиксируются (commit).

10. Как добавить изменения в индекс (staging area)?

git add <file>

или

git add .

(последний вариант (с точкой на конце) для добавления сразу всех измененных файлов в индекс)

11. Как выполнить коммит?

git commit -m "Сообщение коммита"

12. Что такое "pull" и чем он отличается от "fetch"?

git pull и git fetch — это две команды Git, которые используются для взаимодействия с удалёнными репозиториями

git pull = git fetch + git merge.

fetch загружает изменения, но не сливает их.

git fetch origin

git pull загружает изменения и автоматически сливает их с текущей веткой.

git pull origin main

13. Как отменить изменения, которые ещё не были закоммичены?

git checkout -- <file>

14. Как отменить последний коммит?

git reset --soft HEAD~1

Это вернёт изменения в staging, но удалит коммит.

15. Как отобразить различия между двумя коммитами?

git diff <commit1> <commit2>

16. Что такое "fast-forward" в контексте слияния веток?

Это слияние, при котором изменения просто "перематываются" вперёд без создания нового коммита слияния.

17. Как удалить ветку?

git branch -d <branch-name>

18. Что делать, если при слиянии веток возникает конфликт?

  1. Ручная правка конфликтов в файлах.
  2. После разрешения конфликта:
git add <file>
git commit

19. Как игнорировать определённые файлы при коммите?

Создать файл .gitignore и добавить в него имена или шаблоны файлов:

*.log
/temp/

20. Что такое "fork" и чем он отличается от "clone"?

fork — это создание копии репозитория на уровне сервера (например, GitHub).
clone — это копирование репозитория на локальный компьютер.

git clone <url>

21. Как клонировать удалённый репозиторий?

git clone <url>

22. Что такое "remote" в Git и как его настроить?

remote — это ссылка на удалённый репозиторий. Настроить новый удалённый репозиторий можно так:

git remote add origin <url>

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

git push origin <branch-name>

24. Что такое "cherry-pick" и зачем он нужен?

cherry-pick применяется для выбора и применения конкретного коммита из одной ветки в другую.

git cherry-pick <commit-hash>

25. Как безопасно отменить изменения в удалённой ветке?

Используйте git revert, чтобы сделать обратный коммит:

git revert <commit-hash>

26. Как объединить изменения из одной ветки в другую без слияния всей ветки?

Используйте git cherry-pick для выбора конкретных коммитов.

27. Что делать, если случайно закоммитил что-то в неправильную ветку?

Перенесите коммит в нужную ветку:

  1. Переключитесь на нужную ветку.
  2. Используйте
git cherry-pick <commit-hash>

28. Как использовать теги (tags) в Git?

Теги используются для создания меток на определённых коммитах, например, для релизов.

git tag <tag-name>

Для отправки тегов:

git push origin <tag-name>

29. Что такое "squash" и как использовать его при слиянии веток?

squash объединяет несколько коммитов в один при слиянии.

git merge --squash <branch-name>

30. Что такое "detached HEAD" и как работать с ним?

detached HEAD — это состояние, когда вы находитесь на конкретном коммите, а не на ветке. Чтобы вернуться на ветку:

git checkout <branch-name>

31. Как просмотреть список всех веток в репозитории?

git branch

32. Как восстановить файл до состояния определённого коммита?

git checkout <commit-hash> -- <file>

33. Как можно отменить локальные изменения и вернуться к последнему коммиту?

git reset --hard HEAD

34. В чем разница между "git reset" и "git revert"?

  • git reset изменяет историю коммитов и перемещает указатель ветки.
  • git revert создаёт новый коммит, который отменяет изменения предыдущего коммита.

35. Как найти баг или проблемный коммит с помощью команды "git bisect"?

Команда git bisect используется для поиска проблемного коммита, который привел к появлению ошибки или бага в проекте. Она помогает быстро найти коммит, в котором впервые появился баг, используя бинарный поиск.

Как работает git bisect:

1. Запуск поиска:
Сначала в репозитории запускается процесс поиска с помощью команды:

git bisect start

2. Указание "хорошего" и "плохого" коммитов:
Нужно указать коммит, когда код был исправным (без бага), и коммит, в котором баг уже проявляется:
"Плохой" коммит (тот, где баг уже есть):

git bisect bad <коммит_с_багом>

"Хороший" коммит (тот, где бага еще не было):

git bisect good <коммит_без_бага>

3. Бинарный поиск:

После этого git bisect начинает бинарный поиск, автоматически переключаясь на середину между "хорошим" и "плохим" коммитами.
После каждой итерации вы проверяете, проявляется ли баг в текущем состоянии кода (например, запуская тесты или приложение вручную).

В зависимости от результата выполняется одна из следующих команд:
Если баг присутствует в текущем коммите:

git bisect bad

Если баг отсутствует:

git bisect good

4. Поиск продолжается:

git bisect повторяет процесс, каждый раз делая бинарный поиск, пока не останется один коммит — тот, который впервые привел к проявлению бага.

5. Завершение поиска:
Когда проблемный коммит найден, вы можете завершить процесс командой:

git bisect reset

Эта команда вернет репозиторий в исходное состояние (на тот коммит, с которого вы начинали).

Пример использования:

Допустим, у вас есть репозиторий, где несколько сотен коммитов, и вы знаете, что баг появился где-то между коммитами abc123 (хороший коммит) и def456 (плохой коммит).

1. Запускаете процесс:

git bisect start

2. Указываете коммит с багом:

git bisect bad def4561

3. Указываете последний хороший коммит:

git bisect good abc1231

4. Теперь git bisect переключит вас на один из коммитов в середине. Вы проверяете, присутствует ли баг, и в зависимости от результата:
Если баг есть:

git bisect bad
Если бага нет:

git bisect good

  1. Повторяете процесс, пока не найдете проблемный коммит.

Для чего используется каждая команда:

  • git bisect start — запускает процесс бинарного поиска.
  • git bisect bad <коммит> — указывает на коммит, где баг уже присутствует.
  • git bisect good <коммит> — указывает на коммит, где бага еще не было.
  • git bisect reset — завершает процесс бинарного поиска и возвращает репозиторий в исходное состояние.

Вместо оглавления. Что вы найдете на канале QA Helper - справочник тестировщика?

Не забудьте подписаться на канал, чтобы не пропустить полезную информацию: QA Helper - справочник тестировщика

Пишите в комментариях какой пункт было бы интересно рассмотреть более подробно.

Обязательно прочитайте: Что должен знать и уметь тестировщик

Также будет интересно почитать: Вопросы которые задают на собеседовании тестировщикам