rev-list --left-right

The output from "symmetric diff", i.e. A...B, does not
distinguish between commits that are reachable from A and the
ones that are reachable from B.  In this picture, such a
symmetric diff includes commits marked with a and b.

         x---b---b  branch B
        / \ /
       /   .
      /   / \
     o---x---a---a  branch A

However, you cannot tell which ones are 'a' and which ones are
'b' from the output.  Sometimes this is frustrating.  This adds
an output option, --left-right, to rev-list.

        rev-list --left-right A...B

would show ones reachable from A prefixed with '<' and the ones
reachable from B prefixed with '>'.

When combined with --boundary, boundary commits (the ones marked
with 'x' in the above picture) are shown with prefix '-', so you
would see list that looks like this:

    git rev-list --left-right --boundary --pretty=oneline A...B

    >bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb 3rd on b
    >bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb 2nd on b
    <aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 3rd on a
    <aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 2nd on a
    -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 1st on b
    -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 1st on a

Signed-off-by: Junio C Hamano <junkio@cox.net>
4 files changed
tree: 189e4520aa6ce62ff387dbfa3690e5574a93e115
  1. arm/
  2. compat/
  3. contrib/
  4. Documentation/
  5. gitweb/
  6. mozilla-sha1/
  7. perl/
  8. ppc/
  9. t/
  10. templates/
  11. xdiff/
  12. .gitignore
  13. alloc.c
  14. archive-tar.c
  15. archive-zip.c
  16. archive.h
  17. base85.c
  18. blob.c
  19. blob.h
  20. builtin-add.c
  21. builtin-annotate.c
  22. builtin-apply.c
  23. builtin-archive.c
  24. builtin-blame.c
  25. builtin-branch.c
  26. builtin-cat-file.c
  27. builtin-check-ref-format.c
  28. builtin-checkout-index.c
  29. builtin-commit-tree.c
  30. builtin-count-objects.c
  31. builtin-diff-files.c
  32. builtin-diff-index.c
  33. builtin-diff-stages.c
  34. builtin-diff-tree.c
  35. builtin-diff.c
  36. builtin-fmt-merge-msg.c
  37. builtin-for-each-ref.c
  38. builtin-grep.c
  39. builtin-init-db.c
  40. builtin-log.c
  41. builtin-ls-files.c
  42. builtin-ls-tree.c
  43. builtin-mailinfo.c
  44. builtin-mailsplit.c
  45. builtin-merge-file.c
  46. builtin-mv.c
  47. builtin-name-rev.c
  48. builtin-pack-objects.c
  49. builtin-pack-refs.c
  50. builtin-prune-packed.c
  51. builtin-prune.c
  52. builtin-push.c
  53. builtin-read-tree.c
  54. builtin-repo-config.c
  55. builtin-rev-list.c
  56. builtin-rev-parse.c
  57. builtin-rm.c
  58. builtin-runstatus.c
  59. builtin-shortlog.c
  60. builtin-show-branch.c
  61. builtin-show-ref.c
  62. builtin-stripspace.c
  63. builtin-symbolic-ref.c
  64. builtin-tar-tree.c
  65. builtin-unpack-objects.c
  66. builtin-update-index.c
  67. builtin-update-ref.c
  68. builtin-upload-archive.c
  69. builtin-verify-pack.c
  70. builtin-write-tree.c
  71. builtin.h
  72. cache-tree.c
  73. cache-tree.h
  74. cache.h
  75. check-builtins.sh
  76. check-racy.c
  77. color.c
  78. color.h
  79. combine-diff.c
  80. commit.c
  81. commit.h
  82. config.c
  83. config.mak.in
  84. configure.ac
  85. connect.c
  86. convert-objects.c
  87. copy.c
  88. COPYING
  89. csum-file.c
  90. csum-file.h
  91. ctype.c
  92. daemon.c
  93. date.c
  94. delta.h
  95. describe.c
  96. diff-delta.c
  97. diff-lib.c
  98. diff.c
  99. diff.h
  100. diffcore-break.c
  101. diffcore-delta.c
  102. diffcore-order.c
  103. diffcore-pickaxe.c
  104. diffcore-rename.c
  105. diffcore.h
  106. dir.c
  107. dir.h
  108. dump-cache-tree.c
  109. entry.c
  110. environment.c
  111. exec_cmd.c
  112. exec_cmd.h
  113. fetch-pack.c
  114. fetch.c
  115. fetch.h
  116. fsck-objects.c
  117. generate-cmdlist.sh
  118. git-am.sh
  119. git-applymbox.sh
  120. git-applypatch.sh
  121. git-archimport.perl
  122. git-bisect.sh
  123. git-checkout.sh
  124. git-clean.sh
  125. git-clone.sh
  126. git-commit.sh
  127. git-compat-util.h
  128. git-cvsexportcommit.perl
  129. git-cvsimport.perl
  130. git-cvsserver.perl
  131. git-fetch.sh
  132. git-instaweb.sh
  133. git-lost-found.sh
  134. git-ls-remote.sh
  135. git-merge-octopus.sh
  136. git-merge-one-file.sh
  137. git-merge-ours.sh
  138. git-merge-resolve.sh
  139. git-merge-stupid.sh
  140. git-merge.sh
  141. git-p4import.py
  142. git-parse-remote.sh
  143. git-pull.sh
  144. git-quiltimport.sh
  145. git-rebase.sh
  146. git-relink.perl
  147. git-repack.sh
  148. git-request-pull.sh
  149. git-rerere.perl
  150. git-reset.sh
  151. git-resolve.sh
  152. git-revert.sh
  153. git-send-email.perl
  154. git-sh-setup.sh
  155. git-svn.perl
  156. git-svnimport.perl
  157. git-tag.sh
  158. git-verify-tag.sh
  159. GIT-VERSION-GEN
  160. git.c
  161. git.spec.in
  162. gitk
  163. grep.c
  164. grep.h
  165. hash-object.c
  166. help.c
  167. http-fetch.c
  168. http-push.c
  169. http.c
  170. http.h
  171. ident.c
  172. imap-send.c
  173. index-pack.c
  174. INSTALL
  175. interpolate.c
  176. interpolate.h
  177. list-objects.c
  178. list-objects.h
  179. local-fetch.c
  180. lockfile.c
  181. log-tree.c
  182. log-tree.h
  183. Makefile
  184. merge-base.c
  185. merge-file.c
  186. merge-index.c
  187. merge-recursive.c
  188. merge-tree.c
  189. mktag.c
  190. mktree.c
  191. object-refs.c
  192. object.c
  193. object.h
  194. pack-check.c
  195. pack-redundant.c
  196. pack.h
  197. pager.c
  198. patch-delta.c
  199. patch-id.c
  200. path-list.c
  201. path-list.h
  202. path.c
  203. peek-remote.c
  204. pkt-line.c
  205. pkt-line.h
  206. quote.c
  207. quote.h
  208. read-cache.c
  209. README
  210. receive-pack.c
  211. refs.c
  212. refs.h
  213. revision.c
  214. revision.h
  215. rsh.c
  216. rsh.h
  217. run-command.c
  218. run-command.h
  219. send-pack.c
  220. server-info.c
  221. setup.c
  222. sha1_file.c
  223. sha1_name.c
  224. shell.c
  225. show-index.c
  226. sideband.c
  227. sideband.h
  228. ssh-fetch.c
  229. ssh-pull.c
  230. ssh-push.c
  231. ssh-upload.c
  232. strbuf.c
  233. strbuf.h
  234. tag.c
  235. tag.h
  236. tar.h
  237. test-date.c
  238. test-delta.c
  239. test-sha1.c
  240. test-sha1.sh
  241. trace.c
  242. tree-diff.c
  243. tree-walk.c
  244. tree-walk.h
  245. tree.c
  246. tree.h
  247. unpack-file.c
  248. unpack-trees.c
  249. unpack-trees.h
  250. update-server-info.c
  251. upload-pack.c
  252. usage.c
  253. var.c
  254. write_or_die.c
  255. wt-status.c
  256. wt-status.h
  257. xdiff-interface.c
  258. xdiff-interface.h