git-hyper-blame.html 21 KB

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