{"id":293043,"date":"2019-08-06T15:01:05","date_gmt":"2019-08-06T15:01:05","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=293043"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=293043","title":{"rendered":"auto git bisect \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u044f\u0434\u0440\u0430 Linux"},"content":{"rendered":"\n<div class=\"post__text post__text-html js-mediator-article\">\n<p>\u0414\u0430\u043d\u043d\u0430\u044f \u0437\u0430\u043c\u0435\u0442\u043a\u0430 \u0438\u043c\u0435\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0446\u0435\u043b\u044c \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 <strong>git bisect<\/strong> \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u044f\u0434\u0440\u0430 Linux. \u0421 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043f\u043e\u0438\u0441\u043a\u043e\u043c \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u0441\u0451 \u043f\u043e\u043b\u043e\u043c\u0430\u043b\u043e\u0441\u044c \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0445\u043e\u0440\u043e\u0448\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/hy\/dh\/ed\/hydhedmt-30al-rpcgnyv8dav6k.png\" alt=\"Git\"><\/p>\n<p><a name=\"habracut\"><\/a>  <\/p>\n<h1 id=\"opisanie-instrumentariya\">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f<\/h1>\n<p>  <\/p>\n<p>\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439[^7] \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u044f\u0434\u0440\u0430 \u0438 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0441 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u043e\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u044b\u043c \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0432 qemu, \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e busybox, \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432.<\/p>\n<p>  <\/p>\n<ul>\n<li>gcc \ud83d\ude09<\/li>\n<li>binutils<\/li>\n<li>make<\/li>\n<li>qemu<\/li>\n<li>expect (\u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u0432\u044b \u0441\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c bisect \u0438\u0437 \u043f\u0440\u0438\u043c\u0435\u0440\u0430)<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u042f\u0434\u0440\u043e \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043e\u0431\u0440\u0430\u0437\u043e\u043c <strong>initramsfs<\/strong> \u0437\u0430\u0440\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <strong>qemu<\/strong>:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">    $ qemu-system-x86_64 -cpu host \\     -kernel build-linux\/arch\/x86\/boot\/bzImage \\     -initrd initramfs.cpio.xz \\     -nographic -append \"nokaslr console=ttyS0 root=\/dev\/ram\" \\     -enable-kvm -serial mon:stdio<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u0430\u0440\u043e\u043b\u044f \u043d\u0435\u0442 \u0438 \u043d\u0430\u0441 \u0441\u0440\u0430\u0437\u0443 \u0432\u044b\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c.<\/p>\n<p>  <\/p>\n<p>\u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d \u043f\u0440\u043e\u0441\u0442\u043e\u0439 bisect [^1].<\/p>\n<p>  <\/p>\n<blockquote><p>\u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435! \u0415\u0441\u043b\u0438 \u0432\u044b \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u043d\u0438\u0436\u0435, \u0438\u043b\u0438 \u0431\u0443\u0434\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u043e\u0441\u043d\u043e\u0432\u0443 \u0434\u043b\u044f \u0441\u0432\u043e\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0438\u043c\u0435\u0439\u0442\u0435 \u0432\u0432\u0438\u0434\u0443:  <\/p>\n<ol>\n<li>\u044f\u0434\u0440\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0432\u0435\u0440\u0441\u0438\u0438 <strong>gcc<\/strong> \u0438 <strong>binutils<\/strong>, \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f\u0434\u0440\u0430<br \/>  \u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 gcc, \u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0441<br \/>  \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438 \u043f\u0440\u0430\u0432\u043a\u0430\u043c\u0438 \u0438\u043b\u0438 \u043f\u043e\u0434\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043e\u0448\u0438\u0431\u043e\u043a \u0438\u043b\u0438 \u043d\u0435 \u0441\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0432\u043e\u043e\u0431\u0449\u0435<\/li>\n<li>\u0441 \u043d\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 binutils (\u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u0432\u0435\u0440\u0441\u0438\u0438 2.31) \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441<br \/>  \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u043d\u0430 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 \u044f\u0434\u0440\u0430 \u0434\u043e v4.16-rc3<\/li>\n<\/ol>\n<p>  \u0412\u0435\u0440\u0441\u0438\u0438 gcc 7.3.0 \u0438 binutils 2.30 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u0438 \u043c\u043d\u0435 \u0431\u0435\u0437 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0438<br \/>  \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u0438 \u044f\u0434\u0440\u0430 \u0441 v4.14 \u043f\u043e v5.3-rc2.<\/p><\/blockquote>\n<p>  <\/p>\n<h1 id=\"postanovka-zadachi\">\u041f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0437\u0430\u0434\u0430\u0447\u0438<\/h1>\n<p>  <\/p>\n<p>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0437\u0434\u0435\u0441\u044c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430, \u0440\u0435\u0448\u0435\u043d\u043d\u0430\u044f \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0431\u044b\u043b\u043e \u0440\u0435\u0448\u0435\u043d\u043e \u0432\u0437\u044f\u0442\u044c \u0437\u0430 \u043e\u0441\u043d\u043e\u0432\u0443 \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430.<\/p>\n<p>  <\/p>\n<p>\u0412 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u0443\u0442\u044c \u0432 <strong>debugfs<\/strong> \u043f\u043e\u043c\u0435\u043d\u044f\u043b \u0441\u0432\u043e\u0451 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0432 \u0432\u0435\u0440\u0441\u0438\u0438 <strong>v4.14<\/strong>:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">    # ls \/sys\/kernel\/debug\/     gpio-mockup-event     # ls \/sys\/kernel\/debug\/gpio-mockup-event     gpio-mockup-A<\/code><\/pre>\n<p>  <\/p>\n<p>\u041d\u0430 (\u0437\u0430\u043c\u0435\u0447\u0435\u043d\u043e \u043d\u0430 \u0432\u0435\u0440\u0441\u0438\u0438 <strong>v5.3-rc2<\/strong>):<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">    # ls \/sys\/kernel\/debug\/     gpio-mockup     # ls \/sys\/kernel\/debug\/gpio-mockup     gpiochip1<\/code><\/pre>\n<p>  <\/p>\n<p>\u0427\u0442\u043e \u0441\u043b\u043e\u043c\u0430\u043b\u043e \u043c\u043d\u0435 \u0442\u0435\u0441\u0442\u044b \u0434\u043b\u044f \u043c\u043e\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u0438 \u0437\u0430\u0434\u0430\u0447\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c \u0447\u0442\u043e \u0431\u044b \u043d\u0430\u0439\u0442\u0438 \u043a\u043e\u0433\u0434\u0430, \u0433\u0434\u0435 \u0438 \u043a\u0442\u043e, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c &lt;&lt;\u0445\u043e\u0440\u043e\u0448\u0443\u044e&gt;&gt; \u0438 &lt;&lt;\u043f\u043b\u043e\u0445\u0443\u044e&gt;&gt; \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u044f\u0434\u0440\u0430.<\/p>\n<p>  <\/p>\n<h1 id=\"reshenie-s-pomoschyu-git-bisect-run\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e git bisect run<\/h1>\n<p>  <\/p>\n<p>\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043e\u043f\u044b\u0442\u0430 \u043d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">$ git submodule update --init<\/code><\/pre>\n<p>  <\/p>\n<p><strong>bisect.sh<\/strong> \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0447\u0435\u0440\u0435\u0437 <strong>git bisect run<\/strong>, \u0441\u0430\u043c \u0436\u0435 \u0441\u043a\u0440\u0438\u043f\u0442 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442 \u0438 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0442\u0440\u0451\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439:<\/p>\n<p>  <\/p>\n<ol>\n<li>\n<p>\u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0432\u0441\u0451<\/p>\n<p>  <\/li>\n<li>\n<p>\u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0432\u0441\u0451<\/p>\n<p>  <\/li>\n<li>\n<p>\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c <strong>tests\/bisect.expect<\/strong> (\u0441\u043a\u0440\u0438\u043f\u0442 \u0434\u043b\u044f expect)<\/p>\n<p>  <\/li>\n<\/ol>\n<p>  <\/p>\n<p>\u0422\u0435\u0441\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 qemu, \u0436\u0434\u0451\u0442 \u043f\u0440\u043e\u043c\u0442\u0430, \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u043c\u043e\u0434\u0443\u043b\u044c <strong>gpio-mockup<\/strong> \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0439 \u0432 <strong>\/sys\/debug\/kernel<\/strong>.<br \/>  \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 (\u043e\u043d \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u043a\u0430\u043a \u0438 \u0434\u043b\u044f \u0440\u0443\u0447\u043d\u043e\u0433\u043e bisect \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0448\u0430\u0433\u0430) :<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">    $ git -C linux bisect start     $ git -C linux bisect good v4.14        # \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043b\u044e\u0431\u043e\u0439 \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u043a\u043e\u043c\u043c\u0438\u0442     $ git -C linux bisect bad v5.3-rc2      # \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043b\u044e\u0431\u043e\u0439 \u043f\u043b\u043e\u0445\u043e\u0439 \u043a\u043e\u043c\u043c\u0438\u0442     Bisecting: 73727 revisions left to test after this (roughly 16 steps)     [798bba01b44b0ddf8cd6e542635b37cc9a9b739c]      RDMA\/core: Fail early if unsupported QP is provided<\/code><\/pre>\n<p>  <\/p>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c <strong>git bisect run<\/strong>:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">    $ time git -C linux bisect run ..\/bisect.sh # \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043d\u0430\u0448 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u043a\u0440\u0438\u043f\u0442<\/code><\/pre>\n<p>  <\/p>\n<p>\u0416\u0434\u0435\u043c\u2026 \u0416\u0434\u0435\u043c\u2026 \u0416\u0434\u0435\u043c\u2026 \u0412 \u043e\u0431\u0449\u0435\u043c \u0434\u0430\u0436\u0435 \u043d\u0435 \u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u043f\u043e\u043f\u044b\u0442\u043a\u0443 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441\u0431\u043e\u0440\u043a\u0438 \u0443 \u043c\u0435\u043d\u044f \u043e\u0434\u043d\u0430 \u0441\u0431\u043e\u0440\u043a\u0430 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">    $ time ..\/bisec.sh     real    2m1.695s     user    11m7.409s     sys     2m0.751s<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u043e \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043e\u0446\u0435\u043d\u043a\u0435 <strong>git bisect<\/strong> \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u0437\u0430 16 \u0448\u0430\u0433\u043e\u0432.<\/p>\n<p>  <\/p>\n<p>\u0418 \u0432\u043e\u0442 \u043d\u0430\u043a\u043e\u043d\u0435\u0446-\u0442\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">    d51ee07a8de7d6d3f7738a5e74861133fd2d46a0 is the first bad commit     commit d51ee07a8de7d6d3f7738a5e74861133fd2d46a0     Author: Bartosz Golaszewski &lt;bgolaszewski@baylibre.com&gt;     Date:   Thu Jan 17 15:04:23 2019 +0100          gpio: mockup: don't create the debugfs link named after the label          User-space tests no longer use it and we're breaking the interface         anyway.          Signed-off-by: Bartosz Golaszewski &lt;bgolaszewski@baylibre.com&gt;      :040000 040000 c1a1873f4cfcecace123b72fb036c3861151c9b9 61917a273f4f1f078639463a29acb8a103d50b41 M      drivers     bisect run success      real    42m6.873s     user    192m39.291s     sys     33m55.932s<\/code><\/pre>\n<p>  <\/p>\n<p>\u0427\u0442\u043e\u0436 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0434\u0430\u043b \u043d\u0430\u043c \u043d\u043e\u043c\u0435\u0440 \u043a\u043e\u043c\u043c\u0438\u0442\u0430 \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u0441\u0451 \u043f\u0440\u043e\u043f\u0430\u043b\u043e:<br \/>  <strong>d51ee07a8de7d6d3f7738a5e74861133fd2d46a0<\/strong>. <\/p>\n<p>  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445 \u043f\u0440\u043e\u0434\u0435\u043b\u0430\u043d\u043d\u044b\u0445 <strong>git bisect<\/strong> \u0448\u0430\u0433\u043e\u0432:<\/p>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">git bisect log<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"plaintext\">    $ git bisect log     git bisect start     # good: [bebc6082da0a9f5d47a1ea2edc099bf671058bd4]      Linux 4.14     git bisect good bebc6082da0a9f5d47a1ea2edc099bf671058bd4     # bad: [609488bc979f99f805f34e9a32c1e3b71179d10b]      Linux 5.3-rc2     git bisect bad 609488bc979f99f805f34e9a32c1e3b71179d10b      # good: [798bba01b44b0ddf8cd6e542635b37cc9a9b739c]      RDMA\/core: Fail early if unsupported QP is provided     git bisect good 798bba01b44b0ddf8cd6e542635b37cc9a9b739c      # good: [e266ca36da7de45b64b05698e98e04b578a88888]      Merge tag 'staging-5.1-rc1' of git:\/\/git.kernel.org\/pub\/scm\/linux\/kernel\/git\/gregkh\/staging     git bisect good e266ca36da7de45b64b05698e98e04b578a88888      # bad: [318222a35bfb0ae9b5ff3e359a583463e6cfcd94]      Merge branch 'akpm' (patches from Andrew)     git bisect bad 318222a35bfb0ae9b5ff3e359a583463e6cfcd94      # bad: [962d5ecca101e65175a8cdb1b91da8e1b8434d96]      Merge tag 'regmap-v5.2' of git:\/\/git.kernel.org\/pub\/scm\/linux\/kernel\/git\/broonie\/regmap     git bisect bad 962d5ecca101e65175a8cdb1b91da8e1b8434d96      # bad: [f47d633134f7033e3d0c667419d9f8afd69e308d]      Merge tag 'tag-chrome-platform-for-v5.1' of git:\/\/git.kernel.org\/pub\/scm\/linux\/kernel\/git\/chrome-platform\/linux     git bisect bad f47d633134f7033e3d0c667419d9f8afd69e308d      # good: [6c3f98faddc7f07981c5365ba2f45905ad75fcaa]      Merge branch 'i2c\/for-5.1' of git:\/\/git.kernel.org\/pub\/scm\/linux\/kernel\/git\/wsa\/linux     git bisect good 6c3f98faddc7f07981c5365ba2f45905ad75fcaa      # bad: [2901752c14b8e1b7dd898d2e5245c93e531aa624]      Merge tag 'pci-v5.1-changes' of git:\/\/git.kernel.org\/pub\/scm\/linux\/kernel\/git\/helgaas\/pci     git bisect bad 2901752c14b8e1b7dd898d2e5245c93e531aa624      # bad: [1a29e857507046e413ca7a4a7c9cd32fed9ea255]      Merge tag 'docs-5.1' of git:\/\/git.lwn.net\/linux     git bisect bad 1a29e857507046e413ca7a4a7c9cd32fed9ea255      # bad: [3601fe43e8164f67a8de3de8e988bfcb3a94af46]      Merge tag 'gpio-v5.1-1' of git:\/\/git.kernel.org\/pub\/scm\/linux\/kernel\/git\/linusw\/linux-gpio     git bisect bad 3601fe43e8164f67a8de3de8e988bfcb3a94af46      # good: [cf2e8c544cd3b33e9e403b7b72404c221bf888d1]      Merge tag 'mfd-next-5.1' of git:\/\/git.kernel.org\/pub\/scm\/linux\/kernel\/git\/lee\/mfd     git bisect good cf2e8c544cd3b33e9e403b7b72404c221bf888d1      # good: [8fab3d713ca36bf4ad4dadec0bf38f5e70b8999d]      Merge tag 'gpio-v5.1-updates-for-linus' of git:\/\/git.kernel.org\/pub\/scm\/linux\/kernel\/git\/brgl\/linux into devel     git bisect good 8fab3d713ca36bf4ad4dadec0bf38f5e70b8999d      # bad: [9aac1e336c3ab3824f646224f4b2309b63c51668]      Documentation: gpio: legacy: Don't use POLLERR for poll(2)     git bisect bad 9aac1e336c3ab3824f646224f4b2309b63c51668      # good: [0248baca03b8f188eccbb991bda2caec4c330975]      Merge tag 'intel-gpio-v5.1-1' of git:\/\/git.kernel.org\/pub\/scm\/linux\/kernel\/git\/andy\/linux-gpio-intel into devel     git bisect good 0248baca03b8f188eccbb991bda2caec4c330975      # bad: [e09313ce7ea1706d1642c7d5af103915e69fc6d0]      gpio: mockup: change the signature of unlocked get\/set helpers     git bisect bad e09313ce7ea1706d1642c7d5af103915e69fc6d0      # good: [cbf1e092f2d86e6d7cdb7f9ff8a333f52c826232]      gpio: mockup: implement get_multiple()     git bisect good cbf1e092f2d86e6d7cdb7f9ff8a333f52c826232      # bad: [83336668b94eb44ecd78a0b7840e43f0859e05cb]      gpio: mockup: change the type of 'offset' to unsigned int     git bisect bad 83336668b94eb44ecd78a0b7840e43f0859e05cb      # bad: [d51ee07a8de7d6d3f7738a5e74861133fd2d46a0]      gpio: mockup: don't create the debugfs link named after the label     git bisect bad d51ee07a8de7d6d3f7738a5e74861133fd2d46a0     # first bad commit: [d51ee07a8de7d6d3f7738a5e74861133fd2d46a0] gpio: mockup: don't create the debugfs link named after the label<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<p>\u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u044d\u0442\u043e \u043f\u0440\u043e\u0432\u0430\u043b \u043f\u0435\u0440\u0432\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 (\u0434\u0430 \u2014 \u0432 \u0442\u0435\u0441\u0442\u0435 \u0438\u0445 \u0434\u0432\u0435):<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">    send \"ls \/sys\/kernel\/debug\/\\r\"     expect {         \"gpio-mockup-event\" {}         timeout  { puts \"gpio-mockup-event not found\"; exit 1 }     }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0414\u0440\u0443\u0433\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043b\u043e\u043c\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u043c\u0438\u0442\u043e\u043c <strong>2a9e27408e12de455b9fcf66b5d0166f2129579e<\/strong> (\u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0438\u0445 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u043e \u043b\u0435\u043d\u0438\u0432, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043b \u043a\u043e\u043c\u043c\u0438\u0442\u044b &lt;&lt;\u0440\u044f\u0434\u043e\u043c&gt;&gt;):<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">    send \"ls \/sys\/kernel\/debug\/gpio-mockup-event\/\\r\"      expect {         \"gpio-mockup-A\" { puts \"gpio-mockup-A found\" }         timeout  { puts \"gpio-mockup-A not found\"; exit 1 }     }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0427\u0442\u043e \u0436 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u044b\u044f\u0441\u043d\u0438\u043c \u043a\u043e\u0433\u0434\u0430 \u043a\u043e\u043c\u043c\u0438\u0442 <strong>d51ee07a8de7<\/strong> \u043f\u043e\u043f\u0430\u043b \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u0432\u0435\u0442\u043a\u0443 \u043a \u041b\u0438\u043d\u0443\u0441\u0443 \u0438 \u0441 \u043a\u0430\u043a\u043e\u0439 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u044f\u0434\u0440\u0430 \u043e\u043d \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442[^6].<\/p>\n<p>  <\/p>\n<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0432\u0441\u0435 \u043a\u043e\u043c\u043c\u0438\u0442\u044b \u0434\u043e <strong>d51ee07a8de7<\/strong> \u0444\u0438\u043b\u044c\u0442\u0440\u0443\u044f \u0442\u043e\u043b\u044c\u043a\u043e merge \u043a\u043e\u043c\u043c\u0438\u0442\u044b[^3] (merge commits) \u0438 \u0438\u043c\u0435\u044e\u0449\u0438\u0435 \u043f\u0440\u044f\u043c\u043e\u0439 \u043f\u0443\u0442\u044c[^4] (ancestry chain) :<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">    $ git log --pretty=oneline d51ee07a8de7d6d3f7738a5e74861133fd2d46a0..master --ancestry-path --merges<\/code><\/pre>\n<p>  <\/p>\n<p>\u042d\u0442\u043e \u0434\u0430\u0451\u0442 \u043d\u0430\u043c \u0432\u0441\u0435 merge \u043a\u043e\u043c\u043c\u0438\u0442\u044b \u043c\u0435\u0436\u0434\u0443 <strong>d51ee07a8de7<\/strong> \u0438 master. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0433\u043b\u044f\u043d\u0435\u043c \u0432 \u043a\u043e\u043d\u0435\u0446 \u0441\u043f\u0438\u0441\u043a\u0430 (\u043f\u043e\u043a\u0430\u0437\u0430\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0440\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0438 \u0437\u0430\u043f\u0438\u0441\u0438) :<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">    3601fe43e8164f67a8de3de8e988bfcb3a94af46 Merge tag 'gpio-v5.1-1' of git:\/\/git.kernel.org\/pub\/scm\/linux\/kernel\/git\/linusw\/linux-gpio     3dda927fdbaac926c50b550ccb51ed18c184468b Merge branch 'ib-qcom-ssbi' into devel     2f7db3c70fdfb22480a1b0aa734664fc256532f2 Merge tag 'gpio-v5.1-updates-for-linus-part-2' of git:\/\/git.kernel.org\/pub\/scm\/linux\/kernel\/git\/brgl\/linux into devel<\/code><\/pre>\n<p>  <\/p>\n<p>\u041a\u0430\u043a \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043a\u043e\u043c\u043c\u0438\u0442 \u044d\u0442\u043e \u043f\u043e\u0433\u043b\u043e\u0449\u0435\u043d\u0438\u0435 \u0432\u0435\u0442\u043a\u0438 \u0438\u0437 <strong>git:\/\/git.kernel.org\/pub\/scm\/linux\/kernel\/git\/brgl\/linux<\/strong> \u0432 <strong>git:\/\/git.kernel.org\/pub\/scm\/linux\/kernel\/git\/linusw\/linux-gpio<\/strong> devel, \u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u044d\u0442\u043e \u0443\u0436\u0435 \u043f\u043e\u0433\u043b\u043e\u0449\u0435\u043d\u0438\u0435 \u0432\u0435\u0442\u043a\u0438 \u0442\u043e\u0432\u0430\u0440\u0438\u0449\u0430 Linus Walleij (&lt;&lt;\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0438\u043a\u0430&gt;&gt; \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b GPIO) \u0442\u043e\u0432\u0430\u0440\u0438\u0449\u0435\u043c Linus Torvalds \u0432 \u0432\u0435\u0442\u043a\u0443 master.<\/p>\n<p>  <\/p>\n<p>\u0415\u0441\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u0441\u043a\u0440\u0438\u043f\u0442[^2], \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0440\u0430\u0437\u0443 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u0442 \u043a \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0443 \u0431\u0435\u0437 \u0440\u0443\u0447\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">    # \u044d\u0442\u043e \u0441\u0440\u0430\u0437\u0443 \u0434\u0430\u0441\u0442 \u043d\u0430\u043c \u043d\u0430\u043c \u043a\u043e\u043c\u043c\u0438\u0442 3601fe43e816 \u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u0431\u043e\u043b\u0435\u0435     $ git-find-merge d51ee07a8de7d6d3f7738a5e74861133fd2d46a0 master<\/code><\/pre>\n<p>  <\/p>\n<p>\u041d\u0430\u0439\u0434\u0435\u043c \u043f\u0435\u0440\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u043c\u043c\u0438\u0442\u0430 <strong>3601fe43e816<\/strong>:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">    $ git name-rev --name-only 3601fe43e816     tags\/v5.1-rc1~102<\/code><\/pre>\n<p>  <\/p>\n<p>\u0427\u0438\u0441\u043b\u043e <strong>102<\/strong> \u0437\u0434\u0435\u0441\u044c \u044d\u0442\u043e \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043e\u0442 <strong>3601fe43e816<\/strong> \u0434\u043e <strong>v5.1-rc1<\/strong>, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043e\u043f\u0446\u0438\u044e first-parent[^5]:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">    $ git -P log --pretty --oneline --first-parent \\         --graph 3601fe43e816..v5.1-rc1 | wc -l     102<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u043e\u0445\u043e\u0436\u0435, \u0447\u0442\u043e \u0432\u0441\u0435 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435. \u042f \u043c\u043e\u0433\u0443 \u0437\u0430\u044f\u0432\u0438\u0442\u044c, \u0447\u0442\u043e \u043f\u0435\u0440\u0432\u0430\u044f \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u044f\u0434\u0440\u0430 \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u0441\u0451 &lt;&lt;\u0441\u043b\u043e\u043c\u0430\u043b\u043e\u0441\u044c&gt;&gt; <strong>v5.1-rc1<\/strong>, \u0430 \u0432 \u0432\u0435\u0440\u0441\u0438\u0438 <strong>v5.0<\/strong> \u0432\u0441\u0451 \u0431\u044b\u043b\u043e \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">    $ git describe 3601fe43e816     v5.0-8748-g3601fe43e816<\/code><\/pre>\n<p>  <\/p>\n<h1 id=\"zaklyuchenie\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h1>\n<p>  <\/p>\n<p>\u041d\u0438 \u0434\u043b\u044f \u043a\u043e\u0433\u043e \u043d\u0435 \u0441\u0435\u043a\u0440\u0435\u0442, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u0432\u0435\u0449\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0432\u0435\u0441\u0435\u043b\u0435\u0435. \u0422\u0430\u043a\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0448\u0430\u0433\u043e\u0432 \u0432\u0440\u0443\u0447\u043d\u0443\u044e c\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u0442\u044f\u0436\u0435\u043b\u043e, \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u0434\u043e\u043b\u0433\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0441\u0431\u043e\u0440\u043a\u0438, \u043c\u043e\u0436\u043d\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0440\u043d\u043e \u0437\u0430\u0431\u044b\u0442\u044c \u0447\u0435\u043c \u0437\u0430\u043d\u0438\u043c\u0430\u043b\u0441\u044f. <\/p>\n<p>  <\/p>\n<p>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u0440\u0438 \u0441\u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u0445 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043b\u044e\u0431\u044b\u0435 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0438, \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0432 <strong>initramfs<\/strong>, \u0438\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0441\u0432\u043e\u0451 \u0438 \u0438\u043c\u0435\u0442\u044c \u043f\u043e\u0434 \u0440\u0443\u043a\u043e\u0439 bisect.<\/p>\n<p>  <\/p>\n<p>\u0422\u0435\u0441\u0442\u044b \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0432 \u043b\u044e\u0431\u043e\u043c \u0443\u0434\u043e\u0431\u043d\u043e\u043c \u0432\u0438\u0434\u0435 \u043f\u043e\u043a\u0430 \u043e\u043d\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f <strong>git bisect run<\/strong>. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e c \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u043d\u044b\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0442\u043e\u0433\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0433\u043e expect) \u043c\u043e\u0436\u043d\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u043f\u043b\u0430\u0442\u044b \u0441 \u043d\u0443\u0436\u043d\u043e\u0439 \u0432\u0430\u043c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043e\u0439 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043d\u0430 \u043d\u0435\u0439.<\/p>\n<p>  <\/p>\n<p>[^1]:<a href=\"https:\/\/lwn.net\/Articles\/317154\/\">Christian Couder. <em>Fully automated bisecting with &#171;git bisect run&#187;<\/em>. <\/a><\/p>\n<p>  <\/p>\n<p>[^2]:<a href=\"https:\/\/github.com\/rmandvikar\/git-shell-setup\/blob\/next\/bin\/git-find-merge\/\">rmandvikar. <em>Git hooks system (global, local hooks), utility shell scripts, configuration for HOME dir<\/em>.<\/a><\/p>\n<p>  <\/p>\n<p>[^3]:<a href=\"https:\/\/github.com\/rmandvikar\/git-shell-setup\/blob\/next\/bin\/git-find-merge\/\">Scott Chacon and Ben Straub. <em>Pro Git book<\/em>.<\/a><\/p>\n<p>  <\/p>\n<p>[^4]:<a href=\"https:\/\/stackoverflow.com\/questions\/36433572\/how-does-ancestry-path-work-with-git-log\/\">void.pointer. <em>How does ancestry path work with git log?<\/em>.<\/a><\/p>\n<p>  <\/p>\n<p>[^5]:<a href=\"https:\/\/marcgg.com\/blog\/2015\/08\/04\/git-first-parent-log\/\">Marc G Gauthier. <em>Git Log\u2019s \u2013first-parent Option<\/em>.<\/a><\/p>\n<p>  <\/p>\n<p>[^6]:<a href=\"https:\/\/stackoverflow.com\/questions\/8475448\/find-merge-commit-which-include-a-specific-commit\/\">Guillaume Morin. <em>Find merge commit which include a specific commit<\/em>.<\/a><\/p>\n<p>  <\/p>\n<p>[^7]:<a href=\"https:\/\/github.com\/maquefel\/kernel-bisect-template\">Linux kernel git bisect template<\/a><\/p>\n<p>  <\/p>\n<p>\u041e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438: <a href=\"https:\/\/xkcd.com\/1597\/\">https:\/\/xkcd.com\/1597\/<\/a>.<\/p>\n<\/div>\n<p>               <script class=\"js-mediator-script\">!function(e){function t(t,n){if(!(n in e)){for(var r,a=e.document,i=a.scripts,o=i.length;o--;)if(-1!==i[o].src.indexOf(t)){r=i[o];break}if(!r){r=a.createElement(\"script\"),r.type=\"text\/javascript\",r.async=!0,r.defer=!0,r.src=t,r.charset=\"UTF-8\";var d=function(){var e=a.getElementsByTagName(\"script\")[0];e.parentNode.insertBefore(r,e)};\"[object Opera]\"==e.opera?a.addEventListener?a.addEventListener(\"DOMContentLoaded\",d,!1):e.attachEvent(\"onload\",d):d()}}}t(\"\/\/mediator.mail.ru\/script\/2820404\/\",\"_mediator\")}(window);<\/script>     <br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/462245\/\"> https:\/\/habr.com\/ru\/post\/462245\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html js-mediator-article\">\n<p>\u0414\u0430\u043d\u043d\u0430\u044f \u0437\u0430\u043c\u0435\u0442\u043a\u0430 \u0438\u043c\u0435\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0446\u0435\u043b\u044c \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 <strong>git bisect<\/strong> \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u044f\u0434\u0440\u0430 Linux. \u0421 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043f\u043e\u0438\u0441\u043a\u043e\u043c \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u0441\u0451 \u043f\u043e\u043b\u043e\u043c\u0430\u043b\u043e\u0441\u044c \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0445\u043e\u0440\u043e\u0448\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/hy\/dh\/ed\/hydhedmt-30al-rpcgnyv8dav6k.png\" alt=\"Git\"><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-293043","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/293043","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=293043"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/293043\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=293043"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=293043"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=293043"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}