[{"data":1,"prerenderedAt":1097},["ShallowReactive",2],{"$f4oJ4Gsai0xPGbw8NHBIOISCMKWSztz3dqamtYOpHddA":3,"$fMMUdSFktwQFqMVGPrTtt3EC5yheBp7PzwIqznamFcMo":114,"$f1Prj1xEczHja_-L7FyIGgRHd5_cSWHo7r6AE5aheAik":117,"$fc0LoAJgqXDLbKKd2JS_NpM4SuzBK8EycUXINSg09CKU":443,"$fM3ea55k6lKMPOTM84llDB26VSQDVVbxiQuSBFQw9P_c":446,"$fI5fDmvm-5tr9wcH0eHaKZa1j3y_FQIQaHHPqbZxAHJE":690,"mdc-nlq6h3-key":710,"mdc--a5x51-key":722,"mdc-tc58q9-key":730,"mdc-tqxewo-key":738,"mdc--otva4x-key":746,"mdc-ljpavx-key":755,"mdc-ydl9b7-key":763,"mdc-qfeoux-key":808,"mdc-8dnwx9-key":835,"mdc--3j1n6t-key":843,"mdc-kq2i82-key":864,"mdc-of8pvq-key":885,"mdc--ak3o7b-key":903,"mdc--azw3sd-key":911,"mdc--a7n40g-key":931,"mdc--knh45e-key":963,"mdc-obl7n4-key":971,"mdc-27gd17-key":985,"mdc-xi8y9l-key":998,"mdc--m0f9ym-key":1089},{"content":4,"quizQuestionContent":85,"type":104,"pageMeta":105},[5,9,13,16,20,24,27,31,34,38,41,44,48,51,55,58,61,65,68,72,75,79,82],{"id":6,"value":7,"isTypeH1":8},"1862","Варианты слияния веток в Git и их отличия",true,{"id":10,"value":11,"anchor":12,"isTypeH2":8},"4231","Базовые понятия: что значит «влить ветку»","basic-concepts-what-it-means-to-integrate-a-branch",{"id":14,"value":15,"isTypeParagraph":8},"9756","Под «слиянием веток» обычно понимается интеграция изменений из одной линии разработки в другую так, чтобы целевая ветка получила нужные правки, а история коммитов осталась в понятной форме.\n\nДля различий между способами слияния важно разделять два вопроса:\n- «Какие изменения попадут в целевую ветку?» (итоговое содержимое файлов после операции).\n- «Как будет выглядеть история коммитов?» (граф коммитов, наличие merge-коммита, линейность, переписывание хэшей).",{"id":17,"description":18,"titleAlert":19,"isTypeAlertInfo":8},"594","В Git «ветка» — это подвижный указатель на коммит, а «история» — это ориентированный граф коммитов, где каждый коммит ссылается на родителя(ей).",null,{"id":21,"value":22,"anchor":23,"isTypeH2":8},"4232","Merge: обычный merge и fast-forward","merge-regular-merge-and-fast-forward",{"id":25,"value":26,"isTypeParagraph":8},"9757","`git merge` интегрирует изменения из указанной ветки (или коммита) в текущую ветку.\n\nЕсли ветки разошлись, создаётся новый merge-коммит с двумя родителями, который явно фиксирует факт объединения историй.\n",{"id":28,"value":29,"anchor":30,"isTypeH3":8},"4265","Схема: merge-коммит (true merge)","diagram-merge-commit-true-merge",{"id":32,"value":33,"isTypeParagraph":8},"9758","Ниже показан типичный случай, когда ветки разошлись и нужен merge-коммит.\n\n```\nA---B---C  feature\n     \\\n      D---E---F  main\n\n# На ветке main выполняется:\ngit checkout main\ngit merge feature\n\n# Результат (появляется merge-коммит M):\nA---B---C  feature\n     \\   \\\n      D---E---F---M  main\n```",{"id":35,"value":36,"anchor":37,"isTypeH3":8},"4266","Fast-forward как режим merge","fast-forward-as-a-merge-mode",{"id":39,"value":40,"isTypeParagraph":8},"9759","Если текущая ветка не имеет собственных новых коммитов после точки ветвления и целевая история является предком вливаемой, merge может выполниться как fast-forward: указатель ветки просто сдвигается вперёд, а новый merge-коммит не создаётся.\n\n```\n# Пример fast-forward:\n# main:    A---B\n# feature: A---B---C---D  (main является предком feature)\n\ngit checkout main\ngit merge feature\n# main станет указывать на D, нового merge-коммита не будет\n\n# Полезные режимы:\ngit merge --ff-only feature   # разрешать только fast-forward, иначе отказ\ngit merge --no-ff feature     # создавать merge-коммит даже если возможен fast-forward\n```",{"id":42,"description":43,"titleAlert":19,"isTypeAlertWarning":8},"651","При конфликте merge останавливается в «незавершённом» состоянии; требуется разрешить конфликты в файлах и затем завершить операцию или отменить её.",{"id":45,"value":46,"anchor":47,"isTypeH2":8},"4233","Rebase: перенос коммитов поверх новой базы","rebase-moving-commits-onto-a-new-base",{"id":49,"value":50,"isTypeParagraph":8},"9760","`git rebase` переносит последовательность коммитов текущей ветки на другую базу: создаётся список коммитов, затем они «проигрываются» по одному поверх выбранного коммита-основания.\n\nПростая модель для начинающего: rebase делает историю «ровнее», но платой за это становится переписывание истории (появляются новые коммиты с новыми хэшами).\n",{"id":52,"value":53,"anchor":54,"isTypeH3":8},"4267","Схема: rebase для линейной истории","diagram-rebase-for-linear-history",{"id":56,"value":57,"isTypeParagraph":8},"9761","Смысл rebase: сохранить изменения из feature, но сделать историю линейной, без merge-коммита.\n\n```\n# Было:\nA---B---C  feature\n     \\\n      D---E---F---G  main\n\n# На ветке feature:\ngit checkout feature\ngit rebase main\n\n# Стало (коммиты feature становятся \"новыми\" A',B',C' поверх main):\nD---E---F---G---A'---B'---C'  feature\n```\n\nТипичные команды:\n\n```\n# Перенос текущей ветки поверх main:\ngit rebase main\n\n# Интерактивный rebase для упорядочивания/объединения коммитов:\ngit rebase -i \u003Cafter-this-commit>\n```",{"id":59,"description":60,"titleAlert":19,"isTypeAlertWarning":8},"652","Rebase меняет историю: прежние коммиты заменяются новыми, поэтому при совместной работе опасно выполнять rebase над веткой, которую уже используют другие участники (часто это ветка, отправленная в общий удалённый репозиторий), так как это усложняет синхронизацию и может привести к дублированию коммитов.",{"id":62,"value":63,"anchor":64,"isTypeH2":8},"4234","Squash merge: «слить всё одним коммитом»","squash-merge-combine-into-one-commit",{"id":66,"value":67,"isTypeParagraph":8},"9762","Squash merge означает «взять итог всех изменений ветки и оформить одним коммитом в целевой ветке», скрыв промежуточные шаги разработки.\n\nВ командной строке это часто делается как подготовка изменений без создания merge-коммита, а затем вручную создаётся один обычный коммит.\n",{"id":69,"value":70,"anchor":71,"isTypeH3":8},"4268","Мини-сценарий squash merge","mini-scenario-squash-merge",{"id":73,"value":74,"isTypeParagraph":8},"9763","```\n# На целевой ветке (например, main):\ngit checkout main\n\n# \"Склеить\" изменения ветки feature в индекс/рабочее дерево без merge-коммита:\ngit merge --squash feature\n\n# Затем создать один коммит:\ngit commit -m \"Добавлена функциональность X (squash)\"\n```\n",{"id":76,"value":77,"anchor":78,"isTypeH3":8},"4269","Таблица различий: merge vs rebase vs squash merge","differences-table-merge-vs-rebase-vs-squash-merge",{"id":80,"value":81,"isTypeParagraph":8},"9764","| Способ | Как меняется история и коммиты | Когда обычно подходит |\n|---|---|---|\n| Merge | Добавляется merge-коммит (если не fast-forward), сохраняется ветвление; все коммиты из feature сохраняются как отдельные. | Когда важно сохранить контекст ветки и факт слияния, удобно для командной разработки и просмотра истории. |\n| Rebase | Коммиты feature «перепроигрываются» поверх новой базы и пересоздаются, поэтому меняются хэши; история становится линейной. | Когда нужна линейная история и аккуратная последовательность коммитов перед интеграцией (с учётом риска переписывания истории). |\n| Squash merge | Итог всех изменений feature попадает в целевую ветку одним новым коммитом; отдельные коммиты feature в целевой истории не сохраняются. | Когда нужен один «логический» коммит без промежуточных шагов разработки и не важна детализация коммитов feature. |\n",{"id":83,"value":84,"isTypeParagraph":8},"9765","Итого: корректный набор «способов интеграции ветки» — merge, rebase и squash merge; merge может быть fast-forward или с merge-коммитом, rebase пересоздаёт коммиты поверх новой базы (переписывает историю), а squash merge превращает серию коммитов в один итоговый коммит в целевой ветке.",{"id":86,"options":87,"hint":101,"solution":102,"description":103},"1109",[88,91,95,98],{"id":89,"label":90,"isCorrect":8},"4564","Merge, Rebase, Squash Merge",{"id":92,"label":93,"isCorrect":94},"4565","Merge, Rebase, Cherry-pick",false,{"id":96,"label":97,"isCorrect":94},"4566","Merge, Rebase, Fast-forward",{"id":99,"label":100,"isCorrect":94},"4567","Merge, Rebase, Stash ","Следует отличать «операции интеграции ветки» (merge, rebase, squash merge) от «режимов merge» (fast-forward) и от «переноса отдельных коммитов» (cherry-pick).","**Правильный ответ: 1** - Merge, Rebase, Squash Merge\n\nПочему именно он: в практических workflow (включая Pull Request в популярных хостингах репозиториев) обычно выделяются три «способа интеграции изменений» — обычный merge-коммит, squash merge (слияние одной «сводной» фиксацией) и rebase (перенос/«перепроигрывание» коммитов поверх другой базы, часто с последующим fast-forward).\n\nПочему остальные варианты хуже подходят под формулировку «варианты слияния веток»:\n- Cherry-pick — это перенос отдельных коммитов, а не слияние веток как целых линий истории (хотя rebase концептуально похож на последовательность cherry-pick по одному коммиту).\n- Fast-forward — это не отдельная «третья операция рядом с merge и rebase», а один из режимов выполнения merge (когда возможно просто передвинуть указатель ветки без merge-коммита).\n- Stash — это временное сохранение незакоммиченных изменений рабочей директории и индекса, а не слияние веток.","В git есть несколько вариантов слияния веток, какие? Чем отличаются.","quizQuestion",{"title":7,"description":106,"ogTitle":7,"ogDescription":106,"ogImageUrl":107,"canonical":19,"ogLocale":108,"ogSiteName":109,"ogImageType":110,"ogImageWidth":111,"ogImageHeight":112,"ogType":113,"ogUrl":19},"Разбор вариантов слияния веток в Git и их отличий, с примерами команд и схемами истории","/og-image.png","ru_RU","goodwebjob.ru","image_jpeg","1200","630","article",{"siteName":115,"siteUrl":116},"GOOD WEB JOB!","https://goodwebjob.ru",{"slugs":118},[119,122,125,128,131,134,137,140,143,146,149,152,155,158,161,164,167,170,173,176,179,182,185,188,191,194,197,200,203,206,209,212,215,218,221,224,227,230,233,236,239,242,245,248,251,254,257,260,263,266,269,272,275,278,281,284,287,290,293,296,299,302,305,308,311,314,317,320,323,326,329,332,335,338,341,344,347,350,353,356,359,362,365,368,371,374,377,380,383,386,389,392,395,398,401,404,407,410,413,416,419,422,425,428,431,434,437,440],{"name":120,"value":121},"Теоретические задания","theoretical-tasks",{"name":123,"value":124},"Что вернёт этот код: typeof (function(){})()","what-this-code-will-return-typeof-function",{"name":126,"value":127},"С чего начать?","where-to-begin",{"name":129,"value":130},"Почему опасно писать прямо в прототипы базовых типов?","why-is-it-dangerous-to-write-directly-to-the-prototypes-of-basic-types",{"name":132,"value":133},"Backend","backend",{"name":135,"value":136},"Frontend","frontend",{"name":138,"value":139},"Какие логические значения в console.log будут получены?","prototype-what-logical-values-will-be-received-in-console-log",{"name":141,"value":142},"Нечётные числа должны отсортироваться по возрастанию, а чётные должны остаться на своих местах","odd-numbers-should-be-sorted-in-ascending-order-and-even-numbers-should-remain-in-their-original-positions",{"name":144,"value":145}," Найти в массиве неповторяющиеся числа","find-non-repeating-numbers-in-an-array",{"name":147,"value":148},"arr.push(0) повлияет на массив так же, как если бы мы выполнили...","arr-push-0-will-affect-the-array-in-the-same-way-as-if-we-performed",{"name":150,"value":151},"Дана строка: 'one.two.three.four.five'. Необходимо из строки сделать вложенный объект","the-string-one-two-three-four-five-is-given-it-is-necessary-to-make-a-nested-object-out-of-the-string",{"name":153,"value":154},"Реализовать функцию, похоже как в Jquery","implement-a-function-similar-to-jquery",{"name":156,"value":157},"Для каждого вложенного объекта нужно добавить свойство level, которое равняется числу - номер вложенности","for-each-nested-object-you-need-to-add-the-level-property-which-is-equal-to-a-number-the-nesting-number",{"name":159,"value":160},"Какое значение выведет консоль с object.property?","what-value-will-the-console-output-with-object-property",{"name":162,"value":163},"Что выведется в console.log([arr[0](), arr[0]()])?","what-will-be-displayed-in-console-log-arr-0-arr-0",{"name":165,"value":166},"Вернуть массив от 1 до n, где числа, кратные 3, заменены на 'fizz', кратные 5 - на 'buzz', а кратные и 3, и 5 одновременно - на 'fizzbuzz'","returns-an-array-from-1-to-n-replacing-numbers-that-are-multiples-of-3-with-fizz-numbers-that-are-multiples-of-5-with-buzz-and-numbers-that-are-multiples-of-both-3-and-5-with-fizzbuzz",{"name":168,"value":169},"Необходимо проверить, являются ли две строки анаграммами друг друга","checks-whether-two-strings-are-anagrams-of-each-other",{"name":171,"value":172},"Определить, является ли слово палиндромом","determines-whether-a-word-is-a-palindrome",{"name":174,"value":175},"Есть массив, в котором лежат объекты с датами, необходимо отсортировать даты по возрастанию","there-is-an-array-containing-objects-with-dates-that-need-to-be-sorted-by-date",{"name":177,"value":178},"Реализовать функцию, принимающую аргументы \"*\", \"1\", \"b\", \"1c\" и возвращающую строку \"1*b*1c\"","implement-a-function-that-accepts-arguments-1-b-1c-and-the-return-string-1-b-1c",{"name":180,"value":181},"Дано дерево (вложенный объект), надо найти сумму всех вершин","given-a-tree-nested-object-it-is-necessary-to-find-the-sum-of-all-vertices",{"name":183,"value":184},"Для каждой ветви дерева записать номер вложенности данной ветви","for-each-branch-of-the-tree-write-down-the-nesting-number-of-this-branch",{"name":186,"value":187},"Есть слова в массиве, необходимо определить, состоят ли они из одних и тех же букв","there-are-words-in-the-array-it-is-necessary-to-determine-whether-they-consist-of-the-same-letters",{"name":189,"value":190},"Числа от 1 до 100 находятся в массиве, они хаотично перемешанные, но в нём не хватает одного числа из этой последовательности. Необходимо найти его","the-numbers-from-1-to-100-are-in-the-array-they-are-randomly-mixed-but-it-lacks-one-number-from-this-sequence-it-is-necessary-to-find-him",{"name":192,"value":193},"Есть строка, состоящая из разных скобок, необходимо проверить, закрыты ли все","there-is-a-string-consisting-of-different-brackets-it-is-necessary-to-check-whether-all-are-closed",{"name":195,"value":196},"Напишите функцию, который сделает из массива объект","write-a-function-that-will-make-an-object-out-of-an-array",{"name":198,"value":199},"Что выведет console.log в результате выполнения цикла while?","what-will-console-log-output-as-a-result-of-executing-the-while-loop",{"name":201,"value":202},"Есть функция и объект. Напишите все известные вам способы, чтобы вывести в консоли значение x из объекта, используя функцию","there-is-a-function-and-an-object-write-all-the-ways-you-know-to-output-the-value-of-x-from-an-object-in-the-console-using-the-function",{"name":204,"value":205},"Что выведет консоль в случае присвоения свойства массиву по строковому отрицательному индексу?","what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-negative-string-index",{"name":207,"value":208},"Что выведет консоль в случае удаления элемента массива с помощью оператора delete?","what-will-the-console-output-if-an-array-element-is-deleted-using-the-delete-operator",{"name":210,"value":211},"Уникализация значений в массиве","unifying-values-in-an-array",{"name":213,"value":214},"«Расплющивание» массива","flattening-the-array",{"name":216,"value":217},"Что вернёт метод book.getUpperName()?","what-will-the-book-get-upper-name-method-return",{"name":219,"value":220},"Сжатие строк","string-compression",{"name":222,"value":223},"Что выведет консоль в случае присвоения свойства массиву по строковому положительному индексу?","what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-positive-string-index",{"name":225,"value":226},"Что получится в результате передачи объекта как аргумента в функцию и выполнения кода?","what-will-happen-when-an-object-is-passed-as-an-argument-to-a-function-and-the-code-is-executed",{"name":228,"value":229},"Как браузер после ввода домена понимает, откуда брать сайт?","how-does-the-browser-know-where-to-get-the-website-after-entering-the-domain",{"name":231,"value":232},"Как домен попадает в DNS в таблицу соответствия: домен – ip","how-does-a-domain-get-into-the-dns-mapping-table-domain-ip",{"name":234,"value":235},"Как браузер решает, какое соединение ему открывать, TCP или UDP?","how-does-a-browser-decide-whether-to-open-a-tcp-or-udp-connection",{"name":237,"value":238},"Ключевые отличия TCP и UDP","key-differences-between-tcp-and-udp",{"name":240,"value":241},"\"TCP/IP\" - кем является TCP, а кем IP в данном случае?","tcp-ip-who-is-tcp-and-who-is-ip-in-this-case",{"name":243,"value":244},"Что такое HTTP и из чего состоит?","what-is-http-and-what-does-it-consist-of",{"name":246,"value":247},"Что такое заголовки в HTTP и зачем они нужны?","what-are-http-headers-and-why-do-we-need-them",{"name":249,"value":250},"Что такое параметры в HTTP?","what-are-http-parameters",{"name":252,"value":253},"Где находится HTML-код в структуре HTTP-ответа?","where-is-the-html-code-located-in-the-http-response-structure",{"name":255,"value":256},"Что такое HTML?","what-is-html",{"name":258,"value":259},"Чем отличаются 1.0, 1.1, 2.0, 3.0 версии HTTP?","what-are-the-differences-between-http-versions-1-0-1-1-2-0-and-3-0",{"name":261,"value":262},"Пользователь авторизован на сайте. Как сервер узнает об этом с последующими другими заходами, что «я – авторизованный пользователь»?","the-user-is-logged-in-on-the-website-how-does-the-server-know-that-i-am-an-authorized-user-when-the-user-logs-in-again",{"name":264,"value":265},"Что такое cookie?","what-is-a-cookie",{"name":267,"value":268},"Кто является инициатором записи cookie в браузере?","who-initiates-the-cookie-recording-in-the-browser",{"name":270,"value":271},"Есть ли возможность с клиента (с браузера) управлять cookie?","is-it-possible-to-manage-cookies-from-the-client-browser",{"name":273,"value":274},"Лайвкодинг","livecoding",{"name":276,"value":277},"Что вернёт следующий код? Object.create(null).hasOwnProperty('toString')","what-will-the-following-code-return-object-create-null-has-own-property-to-string",{"name":279,"value":280},"Всё, что идет по HTTPS – оно защищено?","is-everything-that-goes-through-https-secure",{"name":282,"value":283},"Все данные зашифрованы, используется https. Хакер взламывает dns и делает подмену одного ip на другой, на фишинговый сайт. В этом случае, злоумышленник может получить данные (логин \\ пароль)?","all-data-is-encrypted-https-is-used-let-s-assume-a-hacker-hacks-the-dns-and-makes-a-substitution-of-one-ip-for-another-a-phishing-site",{"name":285,"value":286},"Есть веб-приложение. Помимо HTTP, какие протоколы того же уровня (Application Layer) можно дополнительно использовать в веб-приложении в браузере?","there-is-a-web-application-in-addition-to-http-what-other-protocols-of-the-same-level-application-layer-can-be-used-in-the-web-application-in-browser",{"name":288,"value":289},"Как браузер парсит JavaScript и изображения при рендеринге?","how-the-browser-parses-javascript-and-images-when-rendering",{"name":291,"value":292},"Что происходит, когда HTTP прислал HTML? Что браузер дальше делает c HTML с учетом того, что она валидная?","what-happens-when-http-sends-html-what-does-the-browser-do-with-this-html-given-that-it-is-valid",{"name":294,"value":295},"Что в браузере блокирует рендеринг страницы?","what-is-blocking-the-page-rendering-in-the-browser",{"name":297,"value":298},"Что такое DOM в браузере? Что такое CSSOM?","what-is-dom-in-a-browser-what-is-cssom",{"name":300,"value":301},"Что является узлами в DOM?","what-are-nodes-in-the-dom",{"name":303,"value":304},"Из чего состоит CSSOM?","what-does-cssom-consist-of",{"name":306,"value":307},"Дан HTML-код. Какой будет цвет у текста «Some dummy text»?","the-html-code-is-given-what-will-be-the-color-of-the-some-dummy-text",{"name":309,"value":310},"Есть шаблон HTML и CSS кода. Какой будет цвет у текста «Таким образом, постоянное»?","there-is-a-template-for-html-and-css-code-what-color-will-the-text-thus-constant-have",{"name":312,"value":313},"Есть шаблон вложенного HTML кода. Какой будет цвет у текста «One more dummy text»?","there-is-a-template-for-embedded-html-code-what-will-be-the-color-of-the-one-more-dummy-text",{"name":315,"value":316},"Есть шаблон вложенного HTML кода. Будет ли display:block у body влиять на span?","there-is-a-template-for-embedded-html-code-will-there-be-a-display-does-bodys-block-affect-span",{"name":318,"value":319},"Есть HTML код. Будет ли font-weight на span влиять?","there-is-an-html-code-will-font-weight-affect-span",{"name":321,"value":322},"Flexbox и Grid, чем отличаются друг от друга?","what-are-the-differences-between-flexbox-and-grid",{"name":324,"value":325},"Заменяют ли Flexbox и Grid друг друга?","do-flexbox-and-grid-replace-each-other",{"name":327,"value":328},"Есть CSS и JS анимация. Какая между ними разница, что быстрее, что более удобно?","there-are-css-and-js-animations-what-is-the-difference-between-them-and-which-is-faster-and-more-convenient",{"name":330,"value":331},"Сборник задач","tasks",{"name":333,"value":334},"Какие способы объявления функции есть в JavaScript?","what-are-the-ways-to-declare-a-function-in-javascript",{"name":336,"value":337},"Что такое this в JavaScript?","what-is-this-in-javascript",{"name":339,"value":340},"Что такое Event Loop, как работает?","what-is-an-event-loop-and-how-does-it-work",{"name":342,"value":343},"Что будет, если вызвать typeof на необъявленной переменной?","what-happens-if-you-call-typeof-on-an-undeclared-variable",{"name":345,"value":346},"Что показывает оператор typeof в JavaScript?","what-does-the-typeof-operator-show-in-javascript",{"name":348,"value":349},"Какие типы данных существует в JavaScript?","what-types-of-data-exist-in-javascript",{"name":351,"value":352},"Какую структуру использовать для хранения упорядоченного списка строк в JavaScript?","what-is-the-best-structure-to-use-for-storing-an-ordered-list-of-strings-in-javascript",{"name":354,"value":355},"Что вернет typeof для массива?","what-will-typeof-return-for-an-array",{"name":357,"value":358},"Почему оператор typeof, применённый к массиву, возвращает объект?","why-does-the-typeof-operator-applied-to-an-array-return-an-object",{"name":360,"value":361},"Если нужно хранить список уникальных строк, какую структуру данных выбрать?","if-you-need-to-store-a-list-of-unique-strings-which-data-structure-should-i-choose",{"name":363,"value":364},"Что возвращает typeof для new Set в JavaScript?","what-does-typeof-return-for-new-set-in-javascript",{"name":366,"value":367},"Для чего нужен React, какие он решает проблемы?","what-is-react-used-for-and-what-problems-does-it-solve",{"name":369,"value":370},"Если убрать в React VDOM/Fiber, и вручную изменять DOM, разве это не оптимально?","if-you-remove-the-vdom-fiber-in-react-and-manually-change-the-dom-isn-t-that-optimal",{"name":372,"value":373},"Есть блок кода. Что в реальном DOM изменится после нажатия на кнопку?","there-is-a-block-of-code-what-changes-in-the-real-dom-after-clicking-the-button",{"name":375,"value":376},"Есть код, в котором список и кнопка. Что в реальном DOM изменится после нажатия на кнопку?","there-is-a-code-in-which-there-is-a-list-and-a-button-what-will-change-in-the-real-dom-after-clicking-on-the-button",{"name":378,"value":379},"Зачем нужен Redux (Mobx/Effector)? Зачем нужен менеджер состояния? Какие проблемы решает?","why-do-we-need-redux-mobx-effector-why-do-we-need-a-state-manager-what-problems-does-it-solve",{"name":381,"value":382},"Как диагностировать и исправить нежелательное изменение цвета фона по клику на кнопку, если исходный код сайта запутан и недоступен для прямого чтения?","how-can-diagnose-and-fix-unwanted-background-color-changes-when-clicking-on-a-button-if-the-source-code-of-the-site-is-confusing-and-inaccessible-to-direct-reading",{"name":384,"value":385},"Разрабатывал, взял закоммитил, запушил. Оказалось, что запушил не в ту ветку, точнее, коммит не в ту ветку. Какие действия?","developed-it-committed-it-and-launched-it-it-turned-out-that-i-had-pushed-it-to-the-wrong-branch-or-rather-the-commit-was-in-the-wrong-branch-what-actions",{"name":387,"value":388},"В git есть несколько вариантов слияния веток, какие? Чем отличаются?","git-has-several-options-for-merging-branches-which-ones-how-are-they-different",{"name":390,"value":391},"Какие существуют стратегии ветвления для работы команды? Что это такое?","what-are-the-branching-strategies-for-the-team-what-is-it",{"name":393,"value":394},"По каким характеристикам, ревьюер понимает, что данный код - хороший, а этот код - плохой?","how-does-a-reviewer-know-which-code-is-good-and-which-code-is-bad",{"name":396,"value":397},"Дан фрагмент bash-скрипта: cd ~; mkdir foo... Что в нем происходит?","here-is-a-fragment-of-a-bash-script-cd-mkdir-foo-what-is-happening-in-this-script",{"name":399,"value":400},"Дан фрагмент bash-скрипта: target=$(ps -Af | grep $1 | head -n 1)...","here-is-a-fragment-of-a-bash-script-target-ps-af-grep-1-head-n-1",{"name":402,"value":403},"Что такое алгоритмическая сложность?","what-is-algorithmic-complexity",{"name":405,"value":406},"Какая алгоритмическая сложность у \"быстрой сортировки\"?","what-is-the-algorithmic-complexity-of-quick-sort",{"name":408,"value":409},"Почему в JavaScript два объекта с одинаковым содержимым при сравнении возвращают false?","why-do-two-objects-with-the-same-content-return-false-when-compared-in-javascript",{"name":411,"value":412},"Каким способом может выполняться авторизация пользователя на сайте?","how-can-a-user-be-authorized-on-a-website",{"name":414,"value":415},"В чем разница между микро- и макро-тасками в JavaScript?","what-is-the-difference-between-micro-and-macro-tasks-in-javascript",{"name":417,"value":418},"В комнате три человека. Какова вероятность того, что хотя бы двое из них одного пола? То есть два и более.","there-are-three-people-in-the-room-what-is-the-probability-that-at-least-two-of-them-are-of-the-same-sex-that-is-two-or-more",{"name":420,"value":421},"Есть монета. Ее подбрасывают пять раз подряд. Каждый раз записывается, что выпало - орел или решка. Сколько разных последовательностей орлов и решек может при этом получиться?","there-is-a-coin-it-is-tossed-five-times-in-a-row-each-time-it-is-recorded-whether-it-lands-on-heads-or-tails-how-many-different-sequences-of-heads-and-tails-can-be-obtained",{"name":423,"value":424},"Как гарантированно найти лёгкую фальшивую монету среди 8 за минимальное число взвешиваний на чашечных весах?","how-can-you-guarantee-to-find-an-easy-fake-coin-among-8-in-the-minimum-number-of-weighings-on-a-balance-scale",{"name":426,"value":427},"Подготовка к тех.интервью","technical-interview",{"name":429,"value":430},"Верно ли утверждение, что злоумышленник, контролирующий роутер и прослушивающий трафик, может получить логины и пароли от сайтов, на которые заходит клиент?","is-it-true-that-an-attacker-who-controls-a-router-and-listens-to-traffic-can-obtain-logins-and-passwords-from-websites-that-a-client-visits",{"name":432,"value":433},"Что такое DNS, как DNS находит нужный IP-адрес?","what-is-dns-and-how-does-dns-find-the-correct-ip-address",{"name":435,"value":436},"Переменные объявлены следующим образом: a=3; b=«hello»;. Укажите правильное утверждение","variables-are-declared-as-follows-specify-the-correct-statement",{"name":438,"value":439},"Какой механизм лежит в основе оптимизации обновлений DOM в React?","what-is-the-underlying-mechanism-for-optimizing-dom-updates-in-react",{"name":441,"value":442},"Что мешает организовать централизованное состояние без менеджера состояния? Если организовать состояние механизмами реакта: контекстом, стейтом, в чем проблема? Что менеджеры состояния привносят?","what-prevents-you-from-organizing-a-centralized-state-without-a-state-manager-if-you-organize-the-state-using-react-context-and-state-mechanisms-what-is-the-problem-what-do-state-managers-add",[444],{"label":426,"slug":427,"to":445},"/technical-interview/where-to-begin",{"navigationList":447,"navigationSublist":453},[448,450],{"path":445,"isActive":94,"name":126,"icon":449,"isNavbarMobileDisabled":8},"material-symbols:visibility-outline-rounded",{"path":451,"isActive":8,"name":330,"icon":452,"isNavbarMobileDisabled":94},"/technical-interview/tasks","material-symbols:task-outline",[454,461,480,489,494,589,606,613,618,661,676,681],{"title":455,"list":456,"isOpened":94},"Bash",[457,459],{"name":396,"path":458,"isActive":94},"/technical-interview/tasks/here-is-a-fragment-of-a-bash-script-cd-mkdir-foo-what-is-happening-in-this-script",{"name":399,"path":460,"isActive":94},"/technical-interview/tasks/here-is-a-fragment-of-a-bash-script-target-ps-af-grep-1-head-n-1",{"title":462,"list":463,"isOpened":94},"CSS",[464,466,468,470,472,474,476,478],{"name":306,"path":465,"isActive":94},"/technical-interview/tasks/the-html-code-is-given-what-will-be-the-color-of-the-some-dummy-text",{"name":309,"path":467,"isActive":94},"/technical-interview/tasks/there-is-a-template-for-html-and-css-code-what-color-will-the-text-thus-constant-have",{"name":312,"path":469,"isActive":94},"/technical-interview/tasks/there-is-a-template-for-embedded-html-code-what-will-be-the-color-of-the-one-more-dummy-text",{"name":315,"path":471,"isActive":94},"/technical-interview/tasks/there-is-a-template-for-embedded-html-code-will-there-be-a-display-does-bodys-block-affect-span",{"name":318,"path":473,"isActive":94},"/technical-interview/tasks/there-is-an-html-code-will-font-weight-affect-span",{"name":321,"path":475,"isActive":94},"/technical-interview/tasks/what-are-the-differences-between-flexbox-and-grid",{"name":324,"path":477,"isActive":94},"/technical-interview/tasks/do-flexbox-and-grid-replace-each-other",{"name":327,"path":479,"isActive":94},"/technical-interview/tasks/there-are-css-and-js-animations-what-is-the-difference-between-them-and-which-is-faster-and-more-convenient",{"title":481,"list":482,"isOpened":94},"Git",[483,485,487],{"name":384,"path":484,"isActive":94},"/technical-interview/tasks/developed-it-committed-it-and-launched-it-it-turned-out-that-i-had-pushed-it-to-the-wrong-branch-or-rather-the-commit-was-in-the-wrong-branch-what-actions",{"name":387,"path":486,"isActive":94},"/technical-interview/tasks/git-has-several-options-for-merging-branches-which-ones-how-are-they-different",{"name":390,"path":488,"isActive":94},"/technical-interview/tasks/what-are-the-branching-strategies-for-the-team-what-is-it",{"title":490,"list":491,"isOpened":94},"HTML",[492],{"name":255,"path":493,"isActive":94},"/technical-interview/tasks/what-is-html",{"title":495,"list":496,"isOpened":94},"JavaScript",[497,499,501,503,505,507,509,511,513,515,517,519,521,523,525,527,529,531,533,535,537,539,541,543,545,547,549,551,553,555,557,559,561,563,565,567,569,571,573,575,577,579,581,583,585,587],{"name":138,"path":498,"isActive":94},"/technical-interview/tasks/prototype-what-logical-values-will-be-received-in-console-log",{"name":129,"path":500,"isActive":94},"/technical-interview/tasks/why-is-it-dangerous-to-write-directly-to-the-prototypes-of-basic-types",{"name":276,"path":502,"isActive":94},"/technical-interview/tasks/what-will-the-following-code-return-object-create-null-has-own-property-to-string",{"name":159,"path":504,"isActive":94},"/technical-interview/tasks/what-value-will-the-console-output-with-object-property",{"name":162,"path":506,"isActive":94},"/technical-interview/tasks/what-will-be-displayed-in-console-log-arr-0-arr-0",{"name":198,"path":508,"isActive":94},"/technical-interview/tasks/what-will-console-log-output-as-a-result-of-executing-the-while-loop",{"name":201,"path":510,"isActive":94},"/technical-interview/tasks/there-is-a-function-and-an-object-write-all-the-ways-you-know-to-output-the-value-of-x-from-an-object-in-the-console-using-the-function",{"name":216,"path":512,"isActive":94},"/technical-interview/tasks/what-will-the-book-get-upper-name-method-return",{"name":435,"path":514,"isActive":94},"/technical-interview/tasks/variables-are-declared-as-follows-specify-the-correct-statement",{"name":222,"path":516,"isActive":94},"/technical-interview/tasks/what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-positive-string-index",{"name":204,"path":518,"isActive":94},"/technical-interview/tasks/what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-negative-string-index",{"name":207,"path":520,"isActive":94},"/technical-interview/tasks/what-will-the-console-output-if-an-array-element-is-deleted-using-the-delete-operator",{"name":123,"path":522,"isActive":94},"/technical-interview/tasks/what-this-code-will-return-typeof-function",{"name":225,"path":524,"isActive":94},"/technical-interview/tasks/what-will-happen-when-an-object-is-passed-as-an-argument-to-a-function-and-the-code-is-executed",{"name":333,"path":526,"isActive":94},"/technical-interview/tasks/what-are-the-ways-to-declare-a-function-in-javascript",{"name":336,"path":528,"isActive":94},"/technical-interview/tasks/what-is-this-in-javascript",{"name":339,"path":530,"isActive":94},"/technical-interview/tasks/what-is-an-event-loop-and-how-does-it-work",{"name":342,"path":532,"isActive":94},"/technical-interview/tasks/what-happens-if-you-call-typeof-on-an-undeclared-variable",{"name":345,"path":534,"isActive":94},"/technical-interview/tasks/what-does-the-typeof-operator-show-in-javascript",{"name":348,"path":536,"isActive":94},"/technical-interview/tasks/what-types-of-data-exist-in-javascript",{"name":351,"path":538,"isActive":94},"/technical-interview/tasks/what-is-the-best-structure-to-use-for-storing-an-ordered-list-of-strings-in-javascript",{"name":354,"path":540,"isActive":94},"/technical-interview/tasks/what-will-typeof-return-for-an-array",{"name":357,"path":542,"isActive":94},"/technical-interview/tasks/why-does-the-typeof-operator-applied-to-an-array-return-an-object",{"name":360,"path":544,"isActive":94},"/technical-interview/tasks/if-you-need-to-store-a-list-of-unique-strings-which-data-structure-should-i-choose",{"name":363,"path":546,"isActive":94},"/technical-interview/tasks/what-does-typeof-return-for-new-set-in-javascript",{"name":408,"path":548,"isActive":94},"/technical-interview/tasks/why-do-two-objects-with-the-same-content-return-false-when-compared-in-javascript",{"name":414,"path":550,"isActive":94},"/technical-interview/tasks/what-is-the-difference-between-micro-and-macro-tasks-in-javascript",{"name":147,"path":552,"isActive":94},"/technical-interview/tasks/arr-push-0-will-affect-the-array-in-the-same-way-as-if-we-performed",{"name":165,"path":554,"isActive":94},"/technical-interview/tasks/returns-an-array-from-1-to-n-replacing-numbers-that-are-multiples-of-3-with-fizz-numbers-that-are-multiples-of-5-with-buzz-and-numbers-that-are-multiples-of-both-3-and-5-with-fizzbuzz",{"name":150,"path":556,"isActive":94},"/technical-interview/tasks/the-string-one-two-three-four-five-is-given-it-is-necessary-to-make-a-nested-object-out-of-the-string",{"name":180,"path":558,"isActive":94},"/technical-interview/tasks/given-a-tree-nested-object-it-is-necessary-to-find-the-sum-of-all-vertices",{"name":156,"path":560,"isActive":94},"/technical-interview/tasks/for-each-nested-object-you-need-to-add-the-level-property-which-is-equal-to-a-number-the-nesting-number",{"name":183,"path":562,"isActive":94},"/technical-interview/tasks/for-each-branch-of-the-tree-write-down-the-nesting-number-of-this-branch",{"name":174,"path":564,"isActive":94},"/technical-interview/tasks/there-is-an-array-containing-objects-with-dates-that-need-to-be-sorted-by-date",{"name":186,"path":566,"isActive":94},"/technical-interview/tasks/there-are-words-in-the-array-it-is-necessary-to-determine-whether-they-consist-of-the-same-letters",{"name":192,"path":568,"isActive":94},"/technical-interview/tasks/there-is-a-string-consisting-of-different-brackets-it-is-necessary-to-check-whether-all-are-closed",{"name":144,"path":570,"isActive":94},"/technical-interview/tasks/find-non-repeating-numbers-in-an-array",{"name":195,"path":572,"isActive":94},"/technical-interview/tasks/write-a-function-that-will-make-an-object-out-of-an-array",{"name":168,"path":574,"isActive":94},"/technical-interview/tasks/checks-whether-two-strings-are-anagrams-of-each-other",{"name":141,"path":576,"isActive":94},"/technical-interview/tasks/odd-numbers-should-be-sorted-in-ascending-order-and-even-numbers-should-remain-in-their-original-positions",{"name":171,"path":578,"isActive":94},"/technical-interview/tasks/determines-whether-a-word-is-a-palindrome",{"name":213,"path":580,"isActive":94},"/technical-interview/tasks/flattening-the-array",{"name":177,"path":582,"isActive":94},"/technical-interview/tasks/implement-a-function-that-accepts-arguments-1-b-1c-and-the-return-string-1-b-1c",{"name":219,"path":584,"isActive":94},"/technical-interview/tasks/string-compression",{"name":210,"path":586,"isActive":94},"/technical-interview/tasks/unifying-values-in-an-array",{"name":189,"path":588,"isActive":94},"/technical-interview/tasks/the-numbers-from-1-to-100-are-in-the-array-they-are-randomly-mixed-but-it-lacks-one-number-from-this-sequence-it-is-necessary-to-find-him",{"title":590,"list":591,"isOpened":94},"React",[592,594,596,598,600,602,604],{"name":366,"path":593,"isActive":94},"/technical-interview/tasks/what-is-react-used-for-and-what-problems-does-it-solve",{"name":438,"path":595,"isActive":94},"/technical-interview/tasks/what-is-the-underlying-mechanism-for-optimizing-dom-updates-in-react",{"name":369,"path":597,"isActive":94},"/technical-interview/tasks/if-you-remove-the-vdom-fiber-in-react-and-manually-change-the-dom-isn-t-that-optimal",{"name":372,"path":599,"isActive":94},"/technical-interview/tasks/there-is-a-block-of-code-what-changes-in-the-real-dom-after-clicking-the-button",{"name":375,"path":601,"isActive":94},"/technical-interview/tasks/there-is-a-code-in-which-there-is-a-list-and-a-button-what-will-change-in-the-real-dom-after-clicking-on-the-button",{"name":378,"path":603,"isActive":94},"/technical-interview/tasks/why-do-we-need-redux-mobx-effector-why-do-we-need-a-state-manager-what-problems-does-it-solve",{"name":441,"path":605,"isActive":94},"/technical-interview/tasks/what-prevents-you-from-organizing-a-centralized-state-without-a-state-manager-if-you-organize-the-state-using-react-context-and-state-mechanisms-what-is-the-problem-what-do-state-managers-add",{"title":607,"list":608,"isOpened":94},"Алгоритмы",[609,611],{"name":402,"path":610,"isActive":94},"/technical-interview/tasks/what-is-algorithmic-complexity",{"name":405,"path":612,"isActive":94},"/technical-interview/tasks/what-is-the-algorithmic-complexity-of-quick-sort",{"title":614,"list":615,"isOpened":94},"Дебаггинг",[616],{"name":381,"path":617,"isActive":94},"/technical-interview/tasks/how-can-diagnose-and-fix-unwanted-background-color-changes-when-clicking-on-a-button-if-the-source-code-of-the-site-is-confusing-and-inaccessible-to-direct-reading",{"title":619,"list":620,"isOpened":94},"Компьютерные сети",[621,623,625,627,629,631,633,635,637,639,641,643,645,647,649,651,653,655,657,659],{"name":228,"path":622,"isActive":94},"/technical-interview/tasks/how-does-the-browser-know-where-to-get-the-website-after-entering-the-domain",{"name":432,"path":624,"isActive":94},"/technical-interview/tasks/what-is-dns-and-how-does-dns-find-the-correct-ip-address",{"name":231,"path":626,"isActive":94},"/technical-interview/tasks/how-does-a-domain-get-into-the-dns-mapping-table-domain-ip",{"name":234,"path":628,"isActive":94},"/technical-interview/tasks/how-does-a-browser-decide-whether-to-open-a-tcp-or-udp-connection",{"name":237,"path":630,"isActive":94},"/technical-interview/tasks/key-differences-between-tcp-and-udp",{"name":240,"path":632,"isActive":94},"/technical-interview/tasks/tcp-ip-who-is-tcp-and-who-is-ip-in-this-case",{"name":243,"path":634,"isActive":94},"/technical-interview/tasks/what-is-http-and-what-does-it-consist-of",{"name":246,"path":636,"isActive":94},"/technical-interview/tasks/what-are-http-headers-and-why-do-we-need-them",{"name":249,"path":638,"isActive":94},"/technical-interview/tasks/what-are-http-parameters",{"name":252,"path":640,"isActive":94},"/technical-interview/tasks/where-is-the-html-code-located-in-the-http-response-structure",{"name":258,"path":642,"isActive":94},"/technical-interview/tasks/what-are-the-differences-between-http-versions-1-0-1-1-2-0-and-3-0",{"name":261,"path":644,"isActive":94},"/technical-interview/tasks/the-user-is-logged-in-on-the-website-how-does-the-server-know-that-i-am-an-authorized-user-when-the-user-logs-in-again",{"name":264,"path":646,"isActive":94},"/technical-interview/tasks/what-is-a-cookie",{"name":267,"path":648,"isActive":94},"/technical-interview/tasks/who-initiates-the-cookie-recording-in-the-browser",{"name":270,"path":650,"isActive":94},"/technical-interview/tasks/is-it-possible-to-manage-cookies-from-the-client-browser",{"name":429,"path":652,"isActive":94},"/technical-interview/tasks/is-it-true-that-an-attacker-who-controls-a-router-and-listens-to-traffic-can-obtain-logins-and-passwords-from-websites-that-a-client-visits",{"name":279,"path":654,"isActive":94},"/technical-interview/tasks/is-everything-that-goes-through-https-secure",{"name":282,"path":656,"isActive":94},"/technical-interview/tasks/all-data-is-encrypted-https-is-used-let-s-assume-a-hacker-hacks-the-dns-and-makes-a-substitution-of-one-ip-for-another-a-phishing-site",{"name":285,"path":658,"isActive":94},"/technical-interview/tasks/there-is-a-web-application-in-addition-to-http-what-other-protocols-of-the-same-level-application-layer-can-be-used-in-the-web-application-in-browser",{"name":411,"path":660,"isActive":94},"/technical-interview/tasks/how-can-a-user-be-authorized-on-a-website",{"title":662,"list":663,"isOpened":94},"Отрисовка в браузере",[664,666,668,670,672,674],{"name":291,"path":665,"isActive":94},"/technical-interview/tasks/what-happens-when-http-sends-html-what-does-the-browser-do-with-this-html-given-that-it-is-valid",{"name":288,"path":667,"isActive":94},"/technical-interview/tasks/how-the-browser-parses-javascript-and-images-when-rendering",{"name":294,"path":669,"isActive":94},"/technical-interview/tasks/what-is-blocking-the-page-rendering-in-the-browser",{"name":297,"path":671,"isActive":94},"/technical-interview/tasks/what-is-dom-in-a-browser-what-is-cssom",{"name":300,"path":673,"isActive":94},"/technical-interview/tasks/what-are-nodes-in-the-dom",{"name":303,"path":675,"isActive":94},"/technical-interview/tasks/what-does-cssom-consist-of",{"title":677,"list":678,"isOpened":94},"Ревью кода",[679],{"name":393,"path":680,"isActive":94},"/technical-interview/tasks/how-does-a-reviewer-know-which-code-is-good-and-which-code-is-bad",{"title":682,"list":683,"isOpened":94},"Теория вероятности",[684,686,688],{"name":417,"path":685,"isActive":94},"/technical-interview/tasks/there-are-three-people-in-the-room-what-is-the-probability-that-at-least-two-of-them-are-of-the-same-sex-that-is-two-or-more",{"name":420,"path":687,"isActive":94},"/technical-interview/tasks/there-is-a-coin-it-is-tossed-five-times-in-a-row-each-time-it-is-recorded-whether-it-lands-on-heads-or-tails-how-many-different-sequences-of-heads-and-tails-can-be-obtained",{"name":423,"path":689,"isActive":94},"/technical-interview/tasks/how-can-you-guarantee-to-find-an-easy-fake-coin-among-8-in-the-minimum-number-of-weighings-on-a-balance-scale",{"cooperation":691,"copyright":694,"reportError":695,"socialNetwork":697},{"link":692,"title":693},"https://t.me/baurinanton","Сотрудничество","© “GOOD WEB JOB!”",{"label":696,"link":692},"Сообщить об ошибке",{"label":698,"socialNetworkList":699},"Мы в соцсетях:",[700,703,706],{"icon":19,"link":701,"title":702},"https://max.ru/u/f9LHodD0cOKMaukdnnahTeL5pwvjrPfUaZ4S8_1rsNy9I9qsmc9Ar3kP_y8","Max",{"icon":704,"link":692,"title":705},"ic:baseline-telegram","Telegram",{"icon":707,"link":708,"title":709},"ri:vk-fill","https://vk.com/baurinanton","VK",{"data":711,"body":712},{},{"type":713,"children":714},"root",[715],{"type":716,"tag":717,"props":718,"children":719},"element","p",{},[720],{"type":721,"value":103},"text",{"data":723,"body":724},{},{"type":713,"children":725},[726],{"type":716,"tag":717,"props":727,"children":728},{},[729],{"type":721,"value":90},{"data":731,"body":732},{},{"type":713,"children":733},[734],{"type":716,"tag":717,"props":735,"children":736},{},[737],{"type":721,"value":93},{"data":739,"body":740},{},{"type":713,"children":741},[742],{"type":716,"tag":717,"props":743,"children":744},{},[745],{"type":721,"value":97},{"data":747,"body":748},{},{"type":713,"children":749},[750],{"type":716,"tag":717,"props":751,"children":752},{},[753],{"type":721,"value":754},"Merge, Rebase, Stash",{"data":756,"body":757},{},{"type":713,"children":758},[759],{"type":716,"tag":717,"props":760,"children":761},{},[762],{"type":721,"value":101},{"data":764,"body":765},{},{"type":713,"children":766},[767,778,783,788],{"type":716,"tag":717,"props":768,"children":769},{},[770,776],{"type":716,"tag":771,"props":772,"children":773},"strong",{},[774],{"type":721,"value":775},"Правильный ответ: 1",{"type":721,"value":777}," - Merge, Rebase, Squash Merge",{"type":716,"tag":717,"props":779,"children":780},{},[781],{"type":721,"value":782},"Почему именно он: в практических workflow (включая Pull Request в популярных хостингах репозиториев) обычно выделяются три «способа интеграции изменений» — обычный merge-коммит, squash merge (слияние одной «сводной» фиксацией) и rebase (перенос/«перепроигрывание» коммитов поверх другой базы, часто с последующим fast-forward).",{"type":716,"tag":717,"props":784,"children":785},{},[786],{"type":721,"value":787},"Почему остальные варианты хуже подходят под формулировку «варианты слияния веток»:",{"type":716,"tag":789,"props":790,"children":791},"ul",{},[792,798,803],{"type":716,"tag":793,"props":794,"children":795},"li",{},[796],{"type":721,"value":797},"Cherry-pick — это перенос отдельных коммитов, а не слияние веток как целых линий истории (хотя rebase концептуально похож на последовательность cherry-pick по одному коммиту).",{"type":716,"tag":793,"props":799,"children":800},{},[801],{"type":721,"value":802},"Fast-forward — это не отдельная «третья операция рядом с merge и rebase», а один из режимов выполнения merge (когда возможно просто передвинуть указатель ветки без merge-коммита).",{"type":716,"tag":793,"props":804,"children":805},{},[806],{"type":721,"value":807},"Stash — это временное сохранение незакоммиченных изменений рабочей директории и индекса, а не слияние веток.",{"data":809,"body":810},{},{"type":713,"children":811},[812,817,822],{"type":716,"tag":717,"props":813,"children":814},{},[815],{"type":721,"value":816},"Под «слиянием веток» обычно понимается интеграция изменений из одной линии разработки в другую так, чтобы целевая ветка получила нужные правки, а история коммитов осталась в понятной форме.",{"type":716,"tag":717,"props":818,"children":819},{},[820],{"type":721,"value":821},"Для различий между способами слияния важно разделять два вопроса:",{"type":716,"tag":789,"props":823,"children":824},{},[825,830],{"type":716,"tag":793,"props":826,"children":827},{},[828],{"type":721,"value":829},"«Какие изменения попадут в целевую ветку?» (итоговое содержимое файлов после операции).",{"type":716,"tag":793,"props":831,"children":832},{},[833],{"type":721,"value":834},"«Как будет выглядеть история коммитов?» (граф коммитов, наличие merge-коммита, линейность, переписывание хэшей).",{"data":836,"body":837},{},{"type":713,"children":838},[839],{"type":716,"tag":717,"props":840,"children":841},{},[842],{"type":721,"value":18},{"data":844,"body":845},{},{"type":713,"children":846},[847,859],{"type":716,"tag":717,"props":848,"children":849},{},[850,857],{"type":716,"tag":851,"props":852,"children":854},"code",{"className":853},[],[855],{"type":721,"value":856},"git merge",{"type":721,"value":858}," интегрирует изменения из указанной ветки (или коммита) в текущую ветку.",{"type":716,"tag":717,"props":860,"children":861},{},[862],{"type":721,"value":863},"Если ветки разошлись, создаётся новый merge-коммит с двумя родителями, который явно фиксирует факт объединения историй.",{"data":865,"body":866},{},{"type":713,"children":867},[868,873],{"type":716,"tag":717,"props":869,"children":870},{},[871],{"type":721,"value":872},"Ниже показан типичный случай, когда ветки разошлись и нужен merge-коммит.",{"type":716,"tag":874,"props":875,"children":879},"pre",{"className":876,"code":878,"language":721},[877],"language-text","A---B---C  feature\n     \\\n      D---E---F  main\n\n# На ветке main выполняется:\ngit checkout main\ngit merge feature\n\n# Результат (появляется merge-коммит M):\nA---B---C  feature\n     \\   \\\n      D---E---F---M  main\n",[880],{"type":716,"tag":851,"props":881,"children":883},{"__ignoreMap":882},"",[884],{"type":721,"value":878},{"data":886,"body":887},{},{"type":713,"children":888},[889,894],{"type":716,"tag":717,"props":890,"children":891},{},[892],{"type":721,"value":893},"Если текущая ветка не имеет собственных новых коммитов после точки ветвления и целевая история является предком вливаемой, merge может выполниться как fast-forward: указатель ветки просто сдвигается вперёд, а новый merge-коммит не создаётся.",{"type":716,"tag":874,"props":895,"children":898},{"className":896,"code":897,"language":721},[877],"# Пример fast-forward:\n# main:    A---B\n# feature: A---B---C---D  (main является предком feature)\n\ngit checkout main\ngit merge feature\n# main станет указывать на D, нового merge-коммита не будет\n\n# Полезные режимы:\ngit merge --ff-only feature   # разрешать только fast-forward, иначе отказ\ngit merge --no-ff feature     # создавать merge-коммит даже если возможен fast-forward\n",[899],{"type":716,"tag":851,"props":900,"children":901},{"__ignoreMap":882},[902],{"type":721,"value":897},{"data":904,"body":905},{},{"type":713,"children":906},[907],{"type":716,"tag":717,"props":908,"children":909},{},[910],{"type":721,"value":43},{"data":912,"body":913},{},{"type":713,"children":914},[915,926],{"type":716,"tag":717,"props":916,"children":917},{},[918,924],{"type":716,"tag":851,"props":919,"children":921},{"className":920},[],[922],{"type":721,"value":923},"git rebase",{"type":721,"value":925}," переносит последовательность коммитов текущей ветки на другую базу: создаётся список коммитов, затем они «проигрываются» по одному поверх выбранного коммита-основания.",{"type":716,"tag":717,"props":927,"children":928},{},[929],{"type":721,"value":930},"Простая модель для начинающего: rebase делает историю «ровнее», но платой за это становится переписывание истории (появляются новые коммиты с новыми хэшами).",{"data":932,"body":933},{},{"type":713,"children":934},[935,940,949,954],{"type":716,"tag":717,"props":936,"children":937},{},[938],{"type":721,"value":939},"Смысл rebase: сохранить изменения из feature, но сделать историю линейной, без merge-коммита.",{"type":716,"tag":874,"props":941,"children":944},{"className":942,"code":943,"language":721},[877],"# Было:\nA---B---C  feature\n     \\\n      D---E---F---G  main\n\n# На ветке feature:\ngit checkout feature\ngit rebase main\n\n# Стало (коммиты feature становятся \"новыми\" A',B',C' поверх main):\nD---E---F---G---A'---B'---C'  feature\n",[945],{"type":716,"tag":851,"props":946,"children":947},{"__ignoreMap":882},[948],{"type":721,"value":943},{"type":716,"tag":717,"props":950,"children":951},{},[952],{"type":721,"value":953},"Типичные команды:",{"type":716,"tag":874,"props":955,"children":958},{"className":956,"code":957,"language":721},[877],"# Перенос текущей ветки поверх main:\ngit rebase main\n\n# Интерактивный rebase для упорядочивания/объединения коммитов:\ngit rebase -i \u003Cafter-this-commit>\n",[959],{"type":716,"tag":851,"props":960,"children":961},{"__ignoreMap":882},[962],{"type":721,"value":957},{"data":964,"body":965},{},{"type":713,"children":966},[967],{"type":716,"tag":717,"props":968,"children":969},{},[970],{"type":721,"value":60},{"data":972,"body":973},{},{"type":713,"children":974},[975,980],{"type":716,"tag":717,"props":976,"children":977},{},[978],{"type":721,"value":979},"Squash merge означает «взять итог всех изменений ветки и оформить одним коммитом в целевой ветке», скрыв промежуточные шаги разработки.",{"type":716,"tag":717,"props":981,"children":982},{},[983],{"type":721,"value":984},"В командной строке это часто делается как подготовка изменений без создания merge-коммита, а затем вручную создаётся один обычный коммит.",{"data":986,"body":987},{},{"type":713,"children":988},[989],{"type":716,"tag":874,"props":990,"children":993},{"className":991,"code":992,"language":721},[877],"# На целевой ветке (например, main):\ngit checkout main\n\n# \"Склеить\" изменения ветки feature в индекс/рабочее дерево без merge-коммита:\ngit merge --squash feature\n\n# Затем создать один коммит:\ngit commit -m \"Добавлена функциональность X (squash)\"\n",[994],{"type":716,"tag":851,"props":995,"children":996},{"__ignoreMap":882},[997],{"type":721,"value":992},{"data":999,"body":1000},{},{"type":713,"children":1001},[1002],{"type":716,"tag":1003,"props":1004,"children":1005},"table",{},[1006,1030],{"type":716,"tag":1007,"props":1008,"children":1009},"thead",{},[1010],{"type":716,"tag":1011,"props":1012,"children":1013},"tr",{},[1014,1020,1025],{"type":716,"tag":1015,"props":1016,"children":1017},"th",{},[1018],{"type":721,"value":1019},"Способ",{"type":716,"tag":1015,"props":1021,"children":1022},{},[1023],{"type":721,"value":1024},"Как меняется история и коммиты",{"type":716,"tag":1015,"props":1026,"children":1027},{},[1028],{"type":721,"value":1029},"Когда обычно подходит",{"type":716,"tag":1031,"props":1032,"children":1033},"tbody",{},[1034,1053,1071],{"type":716,"tag":1011,"props":1035,"children":1036},{},[1037,1043,1048],{"type":716,"tag":1038,"props":1039,"children":1040},"td",{},[1041],{"type":721,"value":1042},"Merge",{"type":716,"tag":1038,"props":1044,"children":1045},{},[1046],{"type":721,"value":1047},"Добавляется merge-коммит (если не fast-forward), сохраняется ветвление; все коммиты из feature сохраняются как отдельные.",{"type":716,"tag":1038,"props":1049,"children":1050},{},[1051],{"type":721,"value":1052},"Когда важно сохранить контекст ветки и факт слияния, удобно для командной разработки и просмотра истории.",{"type":716,"tag":1011,"props":1054,"children":1055},{},[1056,1061,1066],{"type":716,"tag":1038,"props":1057,"children":1058},{},[1059],{"type":721,"value":1060},"Rebase",{"type":716,"tag":1038,"props":1062,"children":1063},{},[1064],{"type":721,"value":1065},"Коммиты feature «перепроигрываются» поверх новой базы и пересоздаются, поэтому меняются хэши; история становится линейной.",{"type":716,"tag":1038,"props":1067,"children":1068},{},[1069],{"type":721,"value":1070},"Когда нужна линейная история и аккуратная последовательность коммитов перед интеграцией (с учётом риска переписывания истории).",{"type":716,"tag":1011,"props":1072,"children":1073},{},[1074,1079,1084],{"type":716,"tag":1038,"props":1075,"children":1076},{},[1077],{"type":721,"value":1078},"Squash merge",{"type":716,"tag":1038,"props":1080,"children":1081},{},[1082],{"type":721,"value":1083},"Итог всех изменений feature попадает в целевую ветку одним новым коммитом; отдельные коммиты feature в целевой истории не сохраняются.",{"type":716,"tag":1038,"props":1085,"children":1086},{},[1087],{"type":721,"value":1088},"Когда нужен один «логический» коммит без промежуточных шагов разработки и не важна детализация коммитов feature.",{"data":1090,"body":1091},{},{"type":713,"children":1092},[1093],{"type":716,"tag":717,"props":1094,"children":1095},{},[1096],{"type":721,"value":84},1775735655417]