Чтобы понять это, нам нужно немного понять, как работает git. Git-репозиторий - это древовидная структура, где узлы дерева являются коммитами. Вот пример очень простого хранилища:
![When you fork](https://i.stack.imgur.com/pBO9B.jpg)
он имеет четыре коммита в ветке master, и каждый коммит имеет идентификатор (в данном случае a, b, c и d). Вы заметите, что d в настоящее время является последним коммитом (или HEAD) главной ветки.
![enter image description here](https://i.stack.imgur.com/7klma.jpg)
Здесь у нас есть две ветви: 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. Вы можете выполнить слияние, но это приведет к тому, что ветвь будет содержать странные коммиты слияния, которые значительно усложняют просмотр запроса на извлечение. Вместо этого вы можете сделать ребаз.
![enter image description here](https://i.stack.imgur.com/W215d.jpg)
Когда вы перебазируете, git находит базу вашей ветви (в данном случае b), находит все коммиты между этой базой и HEAD (в данном случае e и f) и повторно воспроизводит эти коммиты на HEAD ветви, на которую вы перебазируете (в данном случае, мастер). Git фактически создает новые коммиты, которые представляют то, как ваши изменения выглядят поверх мастера: на диаграмме эти коммиты называются e ′ и f ′. Git не стирает ваши предыдущие коммиты: e и f остаются нетронутыми, и если что-то пойдет не так с ребазой, вы можете вернуться к тому, что было раньше.
Когда над проектом симулируют много разных людей, запросы на извлечение могут быстро устареть. «Устаревший» пулл-запрос - это тот, который больше не соответствует основной линии разработки, и его необходимо обновить, прежде чем он может быть объединен с проектом. Самая распространенная причина, по которой запросы на извлечение данных устаревают, связана с конфликтами: если два запроса на извлечение изменяют одинаковые строки в одном и том же файле, и один запрос на извлечение объединяется, то в неразрешенном запросе на получение теперь будет конфликт. Иногда запрос на удаление может устареть без конфликтов: возможно, изменения в другом файле в кодовой базе требуют соответствующих изменений в вашем запросе на включение для соответствия новой архитектуре, или, возможно, ветвь была создана, когда кто-то случайно слил неудачные модульные тесты в мастер ветка. Независимо от причины, если ваш запрос на извлечение данных устарел, вам нужно будет перенастроить свою ветку на последнюю версию главной ветви, прежде чем ее можно будет объединить.