git-hyper-blame.html 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
  3. "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  4. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
  5. <head>
  6. <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
  7. <meta name="generator" content="AsciiDoc 10.2.0" />
  8. <title>git-hyper-blame(1)</title>
  9. <style type="text/css">
  10. /* Shared CSS for AsciiDoc xhtml11 and html5 backends */
  11. /* Default font. */
  12. body {
  13. font-family: Georgia,serif;
  14. }
  15. /* Title font. */
  16. h1, h2, h3, h4, h5, h6,
  17. div.title, caption.title,
  18. thead, p.table.header,
  19. #toctitle,
  20. #author, #revnumber, #revdate, #revremark,
  21. #footer {
  22. font-family: Arial,Helvetica,sans-serif;
  23. }
  24. body {
  25. margin: 1em 5% 1em 5%;
  26. }
  27. a {
  28. color: blue;
  29. text-decoration: underline;
  30. }
  31. a:visited {
  32. color: fuchsia;
  33. }
  34. em {
  35. font-style: italic;
  36. color: navy;
  37. }
  38. strong {
  39. font-weight: bold;
  40. color: #083194;
  41. }
  42. h1, h2, h3, h4, h5, h6 {
  43. color: #527bbd;
  44. margin-top: 1.2em;
  45. margin-bottom: 0.5em;
  46. line-height: 1.3;
  47. }
  48. h1, h2, h3 {
  49. border-bottom: 2px solid silver;
  50. }
  51. h2 {
  52. padding-top: 0.5em;
  53. }
  54. h3 {
  55. float: left;
  56. }
  57. h3 + * {
  58. clear: left;
  59. }
  60. h5 {
  61. font-size: 1.0em;
  62. }
  63. div.sectionbody {
  64. margin-left: 0;
  65. }
  66. hr {
  67. border: 1px solid silver;
  68. }
  69. p {
  70. margin-top: 0.5em;
  71. margin-bottom: 0.5em;
  72. }
  73. ul, ol, li > p {
  74. margin-top: 0;
  75. }
  76. ul > li { color: #aaa; }
  77. ul > li > * { color: black; }
  78. .monospaced, code, pre {
  79. font-family: "Courier New", Courier, monospace;
  80. font-size: inherit;
  81. color: navy;
  82. padding: 0;
  83. margin: 0;
  84. }
  85. pre {
  86. white-space: pre-wrap;
  87. }
  88. #author {
  89. color: #527bbd;
  90. font-weight: bold;
  91. font-size: 1.1em;
  92. }
  93. #email {
  94. }
  95. #revnumber, #revdate, #revremark {
  96. }
  97. #footer {
  98. font-size: small;
  99. border-top: 2px solid silver;
  100. padding-top: 0.5em;
  101. margin-top: 4.0em;
  102. }
  103. #footer-text {
  104. float: left;
  105. padding-bottom: 0.5em;
  106. }
  107. #footer-badges {
  108. float: right;
  109. padding-bottom: 0.5em;
  110. }
  111. #preamble {
  112. margin-top: 1.5em;
  113. margin-bottom: 1.5em;
  114. }
  115. div.imageblock, div.exampleblock, div.verseblock,
  116. div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,
  117. div.admonitionblock {
  118. margin-top: 1.0em;
  119. margin-bottom: 1.5em;
  120. }
  121. div.admonitionblock {
  122. margin-top: 2.0em;
  123. margin-bottom: 2.0em;
  124. margin-right: 10%;
  125. color: #606060;
  126. }
  127. div.content { /* Block element content. */
  128. padding: 0;
  129. }
  130. /* Block element titles. */
  131. div.title, caption.title {
  132. color: #527bbd;
  133. font-weight: bold;
  134. text-align: left;
  135. margin-top: 1.0em;
  136. margin-bottom: 0.5em;
  137. }
  138. div.title + * {
  139. margin-top: 0;
  140. }
  141. td div.title:first-child {
  142. margin-top: 0.0em;
  143. }
  144. div.content div.title:first-child {
  145. margin-top: 0.0em;
  146. }
  147. div.content + div.title {
  148. margin-top: 0.0em;
  149. }
  150. div.sidebarblock > div.content {
  151. background: #ffffee;
  152. border: 1px solid #dddddd;
  153. border-left: 4px solid #f0f0f0;
  154. padding: 0.5em;
  155. }
  156. div.listingblock > div.content {
  157. border: 1px solid #dddddd;
  158. border-left: 5px solid #f0f0f0;
  159. background: #f8f8f8;
  160. padding: 0.5em;
  161. }
  162. div.quoteblock, div.verseblock {
  163. padding-left: 1.0em;
  164. margin-left: 1.0em;
  165. margin-right: 10%;
  166. border-left: 5px solid #f0f0f0;
  167. color: #888;
  168. }
  169. div.quoteblock > div.attribution {
  170. padding-top: 0.5em;
  171. text-align: right;
  172. }
  173. div.verseblock > pre.content {
  174. font-family: inherit;
  175. font-size: inherit;
  176. }
  177. div.verseblock > div.attribution {
  178. padding-top: 0.75em;
  179. text-align: left;
  180. }
  181. /* DEPRECATED: Pre version 8.2.7 verse style literal block. */
  182. div.verseblock + div.attribution {
  183. text-align: left;
  184. }
  185. div.admonitionblock .icon {
  186. vertical-align: top;
  187. font-size: 1.1em;
  188. font-weight: bold;
  189. text-decoration: underline;
  190. color: #527bbd;
  191. padding-right: 0.5em;
  192. }
  193. div.admonitionblock td.content {
  194. padding-left: 0.5em;
  195. border-left: 3px solid #dddddd;
  196. }
  197. div.exampleblock > div.content {
  198. border-left: 3px solid #dddddd;
  199. padding-left: 0.5em;
  200. }
  201. div.imageblock div.content { padding-left: 0; }
  202. span.image img { border-style: none; vertical-align: text-bottom; }
  203. a.image:visited { color: white; }
  204. dl {
  205. margin-top: 0.8em;
  206. margin-bottom: 0.8em;
  207. }
  208. dt {
  209. margin-top: 0.5em;
  210. margin-bottom: 0;
  211. font-style: normal;
  212. color: navy;
  213. }
  214. dd > *:first-child {
  215. margin-top: 0.1em;
  216. }
  217. ul, ol {
  218. list-style-position: outside;
  219. }
  220. ol.arabic {
  221. list-style-type: decimal;
  222. }
  223. ol.loweralpha {
  224. list-style-type: lower-alpha;
  225. }
  226. ol.upperalpha {
  227. list-style-type: upper-alpha;
  228. }
  229. ol.lowerroman {
  230. list-style-type: lower-roman;
  231. }
  232. ol.upperroman {
  233. list-style-type: upper-roman;
  234. }
  235. div.compact ul, div.compact ol,
  236. div.compact p, div.compact p,
  237. div.compact div, div.compact div {
  238. margin-top: 0.1em;
  239. margin-bottom: 0.1em;
  240. }
  241. tfoot {
  242. font-weight: bold;
  243. }
  244. td > div.verse {
  245. white-space: pre;
  246. }
  247. div.hdlist {
  248. margin-top: 0.8em;
  249. margin-bottom: 0.8em;
  250. }
  251. div.hdlist tr {
  252. padding-bottom: 15px;
  253. }
  254. dt.hdlist1.strong, td.hdlist1.strong {
  255. font-weight: bold;
  256. }
  257. td.hdlist1 {
  258. vertical-align: top;
  259. font-style: normal;
  260. padding-right: 0.8em;
  261. color: navy;
  262. }
  263. td.hdlist2 {
  264. vertical-align: top;
  265. }
  266. div.hdlist.compact tr {
  267. margin: 0;
  268. padding-bottom: 0;
  269. }
  270. .comment {
  271. background: yellow;
  272. }
  273. .footnote, .footnoteref {
  274. font-size: 0.8em;
  275. }
  276. span.footnote, span.footnoteref {
  277. vertical-align: super;
  278. }
  279. #footnotes {
  280. margin: 20px 0 20px 0;
  281. padding: 7px 0 0 0;
  282. }
  283. #footnotes div.footnote {
  284. margin: 0 0 5px 0;
  285. }
  286. #footnotes hr {
  287. border: none;
  288. border-top: 1px solid silver;
  289. height: 1px;
  290. text-align: left;
  291. margin-left: 0;
  292. width: 20%;
  293. min-width: 100px;
  294. }
  295. div.colist td {
  296. padding-right: 0.5em;
  297. padding-bottom: 0.3em;
  298. vertical-align: top;
  299. }
  300. div.colist td img {
  301. margin-top: 0.3em;
  302. }
  303. @media print {
  304. #footer-badges { display: none; }
  305. }
  306. #toc {
  307. margin-bottom: 2.5em;
  308. }
  309. #toctitle {
  310. color: #527bbd;
  311. font-size: 1.1em;
  312. font-weight: bold;
  313. margin-top: 1.0em;
  314. margin-bottom: 0.1em;
  315. }
  316. div.toclevel0, div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {
  317. margin-top: 0;
  318. margin-bottom: 0;
  319. }
  320. div.toclevel2 {
  321. margin-left: 2em;
  322. font-size: 0.9em;
  323. }
  324. div.toclevel3 {
  325. margin-left: 4em;
  326. font-size: 0.9em;
  327. }
  328. div.toclevel4 {
  329. margin-left: 6em;
  330. font-size: 0.9em;
  331. }
  332. span.aqua { color: aqua; }
  333. span.black { color: black; }
  334. span.blue { color: blue; }
  335. span.fuchsia { color: fuchsia; }
  336. span.gray { color: gray; }
  337. span.green { color: green; }
  338. span.lime { color: lime; }
  339. span.maroon { color: maroon; }
  340. span.navy { color: navy; }
  341. span.olive { color: olive; }
  342. span.purple { color: purple; }
  343. span.red { color: red; }
  344. span.silver { color: silver; }
  345. span.teal { color: teal; }
  346. span.white { color: white; }
  347. span.yellow { color: yellow; }
  348. span.aqua-background { background: aqua; }
  349. span.black-background { background: black; }
  350. span.blue-background { background: blue; }
  351. span.fuchsia-background { background: fuchsia; }
  352. span.gray-background { background: gray; }
  353. span.green-background { background: green; }
  354. span.lime-background { background: lime; }
  355. span.maroon-background { background: maroon; }
  356. span.navy-background { background: navy; }
  357. span.olive-background { background: olive; }
  358. span.purple-background { background: purple; }
  359. span.red-background { background: red; }
  360. span.silver-background { background: silver; }
  361. span.teal-background { background: teal; }
  362. span.white-background { background: white; }
  363. span.yellow-background { background: yellow; }
  364. span.big { font-size: 2em; }
  365. span.small { font-size: 0.6em; }
  366. span.underline { text-decoration: underline; }
  367. span.overline { text-decoration: overline; }
  368. span.line-through { text-decoration: line-through; }
  369. div.unbreakable { page-break-inside: avoid; }
  370. /*
  371. * xhtml11 specific
  372. *
  373. * */
  374. div.tableblock {
  375. margin-top: 1.0em;
  376. margin-bottom: 1.5em;
  377. }
  378. div.tableblock > table {
  379. border: 3px solid #527bbd;
  380. }
  381. thead, p.table.header {
  382. font-weight: bold;
  383. color: #527bbd;
  384. }
  385. p.table {
  386. margin-top: 0;
  387. }
  388. /* Because the table frame attribute is overridden by CSS in most browsers. */
  389. div.tableblock > table[frame="void"] {
  390. border-style: none;
  391. }
  392. div.tableblock > table[frame="hsides"] {
  393. border-left-style: none;
  394. border-right-style: none;
  395. }
  396. div.tableblock > table[frame="vsides"] {
  397. border-top-style: none;
  398. border-bottom-style: none;
  399. }
  400. /*
  401. * html5 specific
  402. *
  403. * */
  404. table.tableblock {
  405. margin-top: 1.0em;
  406. margin-bottom: 1.5em;
  407. }
  408. thead, p.tableblock.header {
  409. font-weight: bold;
  410. color: #527bbd;
  411. }
  412. p.tableblock {
  413. margin-top: 0;
  414. }
  415. table.tableblock {
  416. border-width: 3px;
  417. border-spacing: 0px;
  418. border-style: solid;
  419. border-color: #527bbd;
  420. border-collapse: collapse;
  421. }
  422. th.tableblock, td.tableblock {
  423. border-width: 1px;
  424. padding: 4px;
  425. border-style: solid;
  426. border-color: #527bbd;
  427. }
  428. table.tableblock.frame-topbot {
  429. border-left-style: hidden;
  430. border-right-style: hidden;
  431. }
  432. table.tableblock.frame-sides {
  433. border-top-style: hidden;
  434. border-bottom-style: hidden;
  435. }
  436. table.tableblock.frame-none {
  437. border-style: hidden;
  438. }
  439. th.tableblock.halign-left, td.tableblock.halign-left {
  440. text-align: left;
  441. }
  442. th.tableblock.halign-center, td.tableblock.halign-center {
  443. text-align: center;
  444. }
  445. th.tableblock.halign-right, td.tableblock.halign-right {
  446. text-align: right;
  447. }
  448. th.tableblock.valign-top, td.tableblock.valign-top {
  449. vertical-align: top;
  450. }
  451. th.tableblock.valign-middle, td.tableblock.valign-middle {
  452. vertical-align: middle;
  453. }
  454. th.tableblock.valign-bottom, td.tableblock.valign-bottom {
  455. vertical-align: bottom;
  456. }
  457. /*
  458. * manpage specific
  459. *
  460. * */
  461. body.manpage h1 {
  462. padding-top: 0.5em;
  463. padding-bottom: 0.5em;
  464. border-top: 2px solid silver;
  465. border-bottom: 2px solid silver;
  466. }
  467. body.manpage h2 {
  468. border-style: none;
  469. }
  470. body.manpage div.sectionbody {
  471. margin-left: 3em;
  472. }
  473. @media print {
  474. body.manpage div#toc { display: none; }
  475. }
  476. div.listingblock > div.content {
  477. background: rgb(28, 28, 28);
  478. }
  479. div.listingblock > div > pre > code {
  480. color: rgb(187, 187, 187);
  481. }
  482. </style>
  483. <script type="text/javascript">
  484. /*<![CDATA[*/
  485. var asciidoc = { // Namespace.
  486. /////////////////////////////////////////////////////////////////////
  487. // Table Of Contents generator
  488. /////////////////////////////////////////////////////////////////////
  489. /* Author: Mihai Bazon, September 2002
  490. * http://students.infoiasi.ro/~mishoo
  491. *
  492. * Table Of Content generator
  493. * Version: 0.4
  494. *
  495. * Feel free to use this script under the terms of the GNU General Public
  496. * License, as long as you do not remove or alter this notice.
  497. */
  498. /* modified by Troy D. Hanson, September 2006. License: GPL */
  499. /* modified by Stuart Rackham, 2006, 2009. License: GPL */
  500. // toclevels = 1..4.
  501. toc: function (toclevels) {
  502. function getText(el) {
  503. var text = "";
  504. for (var i = el.firstChild; i != null; i = i.nextSibling) {
  505. if (i.nodeType == 3 /* Node.TEXT_NODE */) // IE doesn't speak constants.
  506. text += i.data;
  507. else if (i.firstChild != null)
  508. text += getText(i);
  509. }
  510. return text;
  511. }
  512. function TocEntry(el, text, toclevel) {
  513. this.element = el;
  514. this.text = text;
  515. this.toclevel = toclevel;
  516. }
  517. function tocEntries(el, toclevels) {
  518. var result = new Array;
  519. var re = new RegExp('[hH]([1-'+(toclevels+1)+'])');
  520. // Function that scans the DOM tree for header elements (the DOM2
  521. // nodeIterator API would be a better technique but not supported by all
  522. // browsers).
  523. var iterate = function (el) {
  524. for (var i = el.firstChild; i != null; i = i.nextSibling) {
  525. if (i.nodeType == 1 /* Node.ELEMENT_NODE */) {
  526. var mo = re.exec(i.tagName);
  527. if (mo && (i.getAttribute("class") || i.getAttribute("className")) != "float") {
  528. result[result.length] = new TocEntry(i, getText(i), mo[1]-1);
  529. }
  530. iterate(i);
  531. }
  532. }
  533. }
  534. iterate(el);
  535. return result;
  536. }
  537. var toc = document.getElementById("toc");
  538. if (!toc) {
  539. return;
  540. }
  541. // Delete existing TOC entries in case we're reloading the TOC.
  542. var tocEntriesToRemove = [];
  543. var i;
  544. for (i = 0; i < toc.childNodes.length; i++) {
  545. var entry = toc.childNodes[i];
  546. if (entry.nodeName.toLowerCase() == 'div'
  547. && entry.getAttribute("class")
  548. && entry.getAttribute("class").match(/^toclevel/))
  549. tocEntriesToRemove.push(entry);
  550. }
  551. for (i = 0; i < tocEntriesToRemove.length; i++) {
  552. toc.removeChild(tocEntriesToRemove[i]);
  553. }
  554. // Rebuild TOC entries.
  555. var entries = tocEntries(document.getElementById("content"), toclevels);
  556. for (var i = 0; i < entries.length; ++i) {
  557. var entry = entries[i];
  558. if (entry.element.id == "")
  559. entry.element.id = "_toc_" + i;
  560. var a = document.createElement("a");
  561. a.href = "#" + entry.element.id;
  562. a.appendChild(document.createTextNode(entry.text));
  563. var div = document.createElement("div");
  564. div.appendChild(a);
  565. div.className = "toclevel" + entry.toclevel;
  566. toc.appendChild(div);
  567. }
  568. if (entries.length == 0)
  569. toc.parentNode.removeChild(toc);
  570. },
  571. /////////////////////////////////////////////////////////////////////
  572. // Footnotes generator
  573. /////////////////////////////////////////////////////////////////////
  574. /* Based on footnote generation code from:
  575. * http://www.brandspankingnew.net/archive/2005/07/format_footnote.html
  576. */
  577. footnotes: function () {
  578. // Delete existing footnote entries in case we're reloading the footnodes.
  579. var i;
  580. var noteholder = document.getElementById("footnotes");
  581. if (!noteholder) {
  582. return;
  583. }
  584. var entriesToRemove = [];
  585. for (i = 0; i < noteholder.childNodes.length; i++) {
  586. var entry = noteholder.childNodes[i];
  587. if (entry.nodeName.toLowerCase() == 'div' && entry.getAttribute("class") == "footnote")
  588. entriesToRemove.push(entry);
  589. }
  590. for (i = 0; i < entriesToRemove.length; i++) {
  591. noteholder.removeChild(entriesToRemove[i]);
  592. }
  593. // Rebuild footnote entries.
  594. var cont = document.getElementById("content");
  595. var spans = cont.getElementsByTagName("span");
  596. var refs = {};
  597. var n = 0;
  598. for (i=0; i<spans.length; i++) {
  599. if (spans[i].className == "footnote") {
  600. n++;
  601. var note = spans[i].getAttribute("data-note");
  602. if (!note) {
  603. // Use [\s\S] in place of . so multi-line matches work.
  604. // Because JavaScript has no s (dotall) regex flag.
  605. note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];
  606. spans[i].innerHTML =
  607. "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +
  608. "' title='View footnote' class='footnote'>" + n + "</a>]";
  609. spans[i].setAttribute("data-note", note);
  610. }
  611. noteholder.innerHTML +=
  612. "<div class='footnote' id='_footnote_" + n + "'>" +
  613. "<a href='#_footnoteref_" + n + "' title='Return to text'>" +
  614. n + "</a>. " + note + "</div>";
  615. var id =spans[i].getAttribute("id");
  616. if (id != null) refs["#"+id] = n;
  617. }
  618. }
  619. if (n == 0)
  620. noteholder.parentNode.removeChild(noteholder);
  621. else {
  622. // Process footnoterefs.
  623. for (i=0; i<spans.length; i++) {
  624. if (spans[i].className == "footnoteref") {
  625. var href = spans[i].getElementsByTagName("a")[0].getAttribute("href");
  626. href = href.match(/#.*/)[0]; // Because IE return full URL.
  627. n = refs[href];
  628. spans[i].innerHTML =
  629. "[<a href='#_footnote_" + n +
  630. "' title='View footnote' class='footnote'>" + n + "</a>]";
  631. }
  632. }
  633. }
  634. },
  635. install: function(toclevels) {
  636. var timerId;
  637. function reinstall() {
  638. asciidoc.footnotes();
  639. if (toclevels) {
  640. asciidoc.toc(toclevels);
  641. }
  642. }
  643. function reinstallAndRemoveTimer() {
  644. clearInterval(timerId);
  645. reinstall();
  646. }
  647. timerId = setInterval(reinstall, 500);
  648. if (document.addEventListener)
  649. document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false);
  650. else
  651. window.onload = reinstallAndRemoveTimer;
  652. }
  653. }
  654. asciidoc.install();
  655. /*]]>*/
  656. </script>
  657. </head>
  658. <body class="manpage">
  659. <div id="header">
  660. <h1>
  661. git-hyper-blame(1) Manual Page
  662. </h1>
  663. <h2>NAME</h2>
  664. <div class="sectionbody">
  665. <p>git-hyper-blame -
  666. Like git blame, but with the ability to ignore or bypass certain commits.
  667. </p>
  668. </div>
  669. </div>
  670. <div id="content">
  671. <div class="sect1">
  672. <h2 id="_synopsis">SYNOPSIS</h2>
  673. <div class="sectionbody">
  674. <div class="verseblock">
  675. <pre class="content"><em>git hyper-blame</em> [-i &lt;rev&gt; [-i &lt;rev&gt; &#8230;]] [--ignore-file=&lt;file&gt;]
  676. [--no-default-ignores] [&lt;rev&gt;] [--] &lt;file&gt;</pre>
  677. <div class="attribution">
  678. </div></div>
  679. </div>
  680. </div>
  681. <div class="sect1">
  682. <h2 id="_description">DESCRIPTION</h2>
  683. <div class="sectionbody">
  684. <div class="paragraph"><p><code>git hyper-blame</code> is like <code>git blame</code> but it can ignore or "look through" a
  685. given set of commits, to find the real culprit.</p></div>
  686. <div class="paragraph"><p>This is useful if you have a commit that makes sweeping changes that are
  687. unlikely to be what you are looking for in a blame, such as mass reformatting or
  688. renaming. By adding these commits to the hyper-blame ignore list, <code>git
  689. hyper-blame</code> will look past these commits to find the previous commit that
  690. touched a given line.</p></div>
  691. <div class="paragraph"><p>Follows the normal <code>blame</code> syntax: annotates <code>&lt;file&gt;</code> with the revision that
  692. last modified each line. Optional <code>&lt;rev&gt;</code> specifies the revision of <code>&lt;file&gt;</code> to
  693. start from.</p></div>
  694. <div class="paragraph"><p>Automatically looks for a file called <code>.git-blame-ignore-revs</code> in the repository
  695. root directory. This file has the same syntax as the <code>--ignore-file</code> argument,
  696. and any commits mentioned in this file are added to the ignore list.</p></div>
  697. </div>
  698. </div>
  699. <div class="sect1">
  700. <h2 id="_options">OPTIONS</h2>
  701. <div class="sectionbody">
  702. <div class="dlist"><dl>
  703. <dt class="hdlist1">
  704. -i &lt;rev&gt;
  705. </dt>
  706. <dd>
  707. <p>
  708. A revision to ignore. Can be specified as many times as needed.
  709. </p>
  710. </dd>
  711. <dt class="hdlist1">
  712. --ignore-file=&lt;file&gt;
  713. </dt>
  714. <dd>
  715. <p>
  716. A file containing a list of revisions to ignore. Can have comments beginning
  717. with <code>#</code>.
  718. </p>
  719. </dd>
  720. <dt class="hdlist1">
  721. --no-default-ignores
  722. </dt>
  723. <dd>
  724. <p>
  725. Do not ignore commits from the <code>.git-blame-ignore-revs</code> file.
  726. </p>
  727. </dd>
  728. </dl></div>
  729. </div>
  730. </div>
  731. <div class="sect1">
  732. <h2 id="_example">EXAMPLE</h2>
  733. <div class="sectionbody">
  734. <div class="paragraph"><p>Let&#8217;s run <code>git blame</code> on a file:</p></div>
  735. <div class="paragraph"><p></p></div><div class="listingblock"><div class="content"><pre><code><span style="font-weight: bold; color: #BFBFBF">$ git blame ipsum.txt</span>
  736. c6eb3bfa (lorem 2014-08-11 23:15:57 +0000 1) LOREM IPSUM DOLOR SIT AMET, CONSECTETUR
  737. 3ddda43c (auto-uppercaser 2014-07-05 02:05:18 +0000 2) ADIPISCING ELIT, SED DO EIUSMOD TEMPOR
  738. 3ddda43c (auto-uppercaser 2014-07-05 02:05:18 +0000 3) INCIDIDUNT UT LABORE ET DOLORE MAGNA
  739. 3ddda43c (auto-uppercaser 2014-07-05 02:05:18 +0000 4) ALIQUA. UT ENIM AD MINIM VENIAM, QUIS
  740. c6eb3bfa (lorem 2014-08-11 23:15:57 +0000 5) NOSTRUD EXERCITATION ULLAMCO LABORIS
  741. 3ddda43c (auto-uppercaser 2014-07-05 02:05:18 +0000 6) NISI UT ALIQUIP EX EA COMMODO CONSEQUAT.
  742. </code></pre></div></div><p><div class="paragraph"></p></div>
  743. <div class="paragraph"><p>Notice that almost the entire file has been blamed on a formatting change? You
  744. aren&#8217;t interested in the uppercasing of the file. You want to know who
  745. wrote/modified those lines in the first place. Just tell <code>hyper-blame</code> to ignore
  746. that commit:</p></div>
  747. <div class="paragraph"><p></p></div><div class="listingblock"><div class="content"><pre><code><span style="font-weight: bold; color: #BFBFBF">$ git hyper-blame -i 3ddda43c ipsum.txt</span>
  748. c6eb3bfa (lorem 2014-08-11 23:15:57 +0000 1) LOREM IPSUM DOLOR SIT AMET, CONSECTETUR
  749. 134200d1 (lorem 2014-04-10 08:54:46 +0000 2*) ADIPISCING ELIT, SED DO EIUSMOD TEMPOR
  750. a34a1d0d (ipsum 2014-04-11 11:25:04 +0000 3*) INCIDIDUNT UT LABORE ET DOLORE MAGNA
  751. 134200d1 (lorem 2014-04-10 08:54:46 +0000 4*) ALIQUA. UT ENIM AD MINIM VENIAM, QUIS
  752. c6eb3bfa (lorem 2014-08-11 23:15:57 +0000 5) NOSTRUD EXERCITATION ULLAMCO LABORIS
  753. 0f0d17bd (dolor 2014-06-02 11:31:48 +0000 6*) NISI UT ALIQUIP EX EA COMMODO CONSEQUAT.
  754. </code></pre></div></div><p><div class="paragraph"></p></div>
  755. <div class="paragraph"><p><code>hyper-blame</code> places a <code>*</code> next to any line where it has skipped over an ignored
  756. commit, so you know that the line in question has been changed (by an ignored
  757. commit) since the given person wrote it.</p></div>
  758. </div>
  759. </div>
  760. <div class="sect1">
  761. <h2 id="_caveats">CAVEATS</h2>
  762. <div class="sectionbody">
  763. <div class="paragraph"><p>When a line skips over an ignored commit, a guess is made as to which commit
  764. previously modified that line, but it is not always clear where the line came
  765. from. If the ignored commit makes lots of changes in close proximity, in
  766. particular adding/removing/reordering lines, then the wrong authors may be
  767. blamed for nearby edits.</p></div>
  768. <div class="paragraph"><p>For this reason, <code>hyper-blame</code> works best when the ignored commits are be
  769. limited to minor changes such as formatting and renaming, not refactoring or
  770. other more invasive changes.</p></div>
  771. </div>
  772. </div>
  773. <div class="sect1">
  774. <h2 id="_see_also">SEE ALSO</h2>
  775. <div class="sectionbody">
  776. <div class="paragraph"><p><a href="git-blame.html">git-blame(1)</a></p></div>
  777. </div>
  778. </div>
  779. <div class="sect1">
  780. <h2 id="_chromium_depot_tools">CHROMIUM DEPOT_TOOLS</h2>
  781. <div class="sectionbody">
  782. <div class="paragraph"><p>Part of the chromium <a href="depot_tools.html">depot_tools(7)</a> suite. These tools are meant to
  783. assist with the development of chromium and related projects. Download the tools
  784. by checking out the <a href="https://chromium.googlesource.com/chromium/tools/depot_tools.git">git repository</a>.</p></div>
  785. </div>
  786. </div>
  787. </div>
  788. <div id="footnotes"><hr /></div>
  789. <div id="footer">
  790. <div id="footer-text">
  791. Last updated
  792. 2022-08-26 21:13:38 PDT
  793. </div>
  794. </div>
  795. </body>
  796. </html>