Чтобы понять это, нам нужно немного понять, как работает git. Git-репозиторий - это древовидная структура, где узлы дерева являются коммитами. Вот пример очень простого хранилища:
он имеет четыре коммита в ветке master, и каждый коммит имеет идентификатор (в данном случае a, b, c и d). Вы заметите, что d в настоящее время является последним коммитом (или HEAD) главной ветки.
Здесь у нас есть две ветви: master и my-branch. Вы можете видеть, что master и my-branch содержат коммиты a и b, но затем они начинают расходиться: master содержит c и d, а my-branch содержит e и f. Говорят, что b является «базой слияния» my-branch по сравнению с master - или, чаще, просто «base». Это имеет смысл: вы можете видеть, что my-branch основывался на предыдущей версии master.
Итак, допустим, что моя ветка устарела, и вы хотите обновить ее до последней версии master. Другими словами, my-branch должна содержать c и d. Вы можете выполнить слияние, но это приведет к тому, что ветвь будет содержать странные коммиты слияния, которые значительно усложняют просмотр запроса на извлечение. Вместо этого вы можете сделать ребаз.
Когда вы перебазируете, git находит базу вашей ветви (в данном случае b), находит все коммиты между этой базой и HEAD (в данном случае e и f) и повторно воспроизводит эти коммиты на HEAD ветви, на которую вы перебазируете (в данном случае, мастер). Git фактически создает новые коммиты, которые представляют то, как ваши изменения выглядят поверх мастера: на диаграмме эти коммиты называются e ′ и f ′. Git не стирает ваши предыдущие коммиты: e и f остаются нетронутыми, и если что-то пойдет не так с ребазой, вы можете вернуться к тому, что было раньше.
Когда над проектом симулируют много разных людей, запросы на извлечение могут быстро устареть. «Устаревший» пулл-запрос - это тот, который больше не соответствует основной линии разработки, и его необходимо обновить, прежде чем он может быть объединен с проектом. Самая распространенная причина, по которой запросы на извлечение данных устаревают, связана с конфликтами: если два запроса на извлечение изменяют одинаковые строки в одном и том же файле, и один запрос на извлечение объединяется, то в неразрешенном запросе на получение теперь будет конфликт. Иногда запрос на удаление может устареть без конфликтов: возможно, изменения в другом файле в кодовой базе требуют соответствующих изменений в вашем запросе на включение для соответствия новой архитектуре, или, возможно, ветвь была создана, когда кто-то случайно слил неудачные модульные тесты в мастер ветка. Независимо от причины, если ваш запрос на извлечение данных устарел, вам нужно будет перенастроить свою ветку на последнюю версию главной ветви, прежде чем ее можно будет объединить.