1
0
Fork 0
mirror of https://github.com/git/git.git synced 2024-11-08 10:13:18 +01:00
Find a file
Junio C Hamano 6546b5931e revision traversal: show full history with merge simplification
The --full-history traversal keeps all merges in addition to non-merge
commits that touch paths in the given pathspec.  This is useful to view
both sides of a merge in a topology like this:

        A---M---o
       /   /
   ---O---B

even when A and B makes identical change to the given paths.  The revision
traversal without --full-history aims to come up with the simplest history
to explain the final state of the tree, and one of the side branches can
be pruned away.

The behaviour to keep all merges however is inconvenient if neither A nor
B touches the paths we are interested in.  --full-history reduces the
topology to:

   ---O---M---o

in such a case, without removing M.

This adds a post processing phase on top of --full-history traversal to
remove needless merges from the resulting history.

The idea is to compute, for each commit in the "full history" result set,
the commit that should replace it in the simplified history.  The commit
to replace it in the final history is determined as follows:

 * In any case, we first figure out the replacement commits of parents of
   the commit we are looking at.  The commit we are looking at is
   rewritten as if the replacement commits of its original parents are its
   parents.  While doing so, we reduce the redundant parents from the
   rewritten parent list by not just removing the identical ones, but also
   removing a parent that is an ancestor of another parent.

 * After the above parent simplification, if the commit is a root commit,
   an UNINTERESTING commit, a merge commit, or modifies the paths we are
   interested in, then the replacement commit of the commit is itself.  In
   other words, such a commit is not dropped from the final result.

The first point above essentially means that the history is rewritten in
the bottom up direction.  We can rewrite the parent list of a commit only
after we know how all of its parents are rewritten.  This means that the
processing needs to happen on the full history (i.e. after limit_list()).

Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-08-02 00:33:15 -07:00
arm
compat Windows: Make sure argv[0] has a path 2008-07-25 17:41:13 -07:00
contrib Replace uses of "git-var" with "git var" 2008-07-30 11:42:01 -07:00
Documentation revision traversal: show full history with merge simplification 2008-08-02 00:33:15 -07:00
git-gui Merge git://repo.or.cz/git-gui 2008-07-30 00:18:26 -07:00
gitk-git
gitweb gitweb: More about how gitweb gets 'owner' of repository 2008-07-27 14:14:01 -07:00
mozilla-sha1
perl Replace uses of "git-var" with "git var" 2008-07-30 11:42:01 -07:00
ppc
t t/t4202-log.sh: add newline at end of file 2008-08-01 23:15:02 -07:00
templates Merge branch 'j6t/mingw' 2008-07-02 21:57:52 -07:00
xdiff
.gitattributes
.gitignore Merge branch 'dr/ceiling' 2008-07-07 02:17:23 -07:00
.mailmap .mailmap update 2008-07-19 11:25:51 -07:00
abspath.c Allow add_path() to add non-existent directories to the path 2008-07-25 17:41:13 -07:00
alias.c Move split_cmdline() to alias.c 2008-06-30 22:45:50 -07:00
alloc.c
archive-tar.c archive: remove unused headers 2008-07-19 11:17:43 -07:00
archive-zip.c archive: remove unused headers 2008-07-19 11:17:43 -07:00
archive.c archive: declare struct archiver where it's needed 2008-07-25 17:21:04 -07:00
archive.h archive: declare struct archiver where it's needed 2008-07-25 17:21:04 -07:00
attr.c Fix buffer overflow in prepare_attr_stack 2008-07-16 14:05:50 -07:00
attr.h
base85.c
blob.c
blob.h
branch.c Move MERGE_RR from .git/rr-cache/ into .git/ 2008-07-13 01:03:10 -07:00
branch.h
builtin-add.c Merge branch 'jc/add-addremove' 2008-07-20 17:53:17 -07:00
builtin-annotate.c
builtin-apply.c Rename path_list to string_list 2008-07-21 19:11:50 -07:00
builtin-archive.c archive: allow --exec and --remote without equal sign 2008-07-25 17:28:40 -07:00
builtin-blame.c Teach --find-copies-harder to "git blame" 2008-07-31 11:22:12 -07:00
builtin-branch.c builtin-branch: fix -v for --[no-]merged 2008-07-27 14:14:01 -07:00
builtin-bundle.c
builtin-cat-file.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
builtin-check-attr.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
builtin-check-ref-format.c
builtin-checkout-index.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
builtin-checkout.c git-checkout: improve error messages, detect ambiguities. 2008-07-24 23:24:00 -07:00
builtin-clean.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
builtin-clone.c Propagate -u/--upload-pack option of "git clone" to transport. 2008-08-01 22:49:25 -07:00
builtin-commit-tree.c git-commit-tree: make it usable from other builtins 2008-07-06 19:23:00 -07:00
builtin-commit.c Compact commit template message 2008-07-31 11:20:13 -07:00
builtin-config.c Make non-static functions, that may be static, static 2008-07-23 18:38:14 -07:00
builtin-count-objects.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
builtin-describe.c Merge branch 'sb/dashless' 2008-07-16 17:22:50 -07:00
builtin-diff-files.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
builtin-diff-index.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
builtin-diff-tree.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
builtin-diff.c Allow pager of diff command be enabled/disabled 2008-07-23 11:14:47 -07:00
builtin-fast-export.c Support copy and rename detection in fast-export. 2008-07-29 23:57:51 -07:00
builtin-fetch--tool.c
builtin-fetch-pack.c git fetch-pack: do not complain about "no common commits" in an empty repo 2008-07-16 15:53:43 -07:00
builtin-fetch.c Rename path_list to string_list 2008-07-21 19:11:50 -07:00
builtin-fmt-merge-msg.c Merge branch 'sb/dashless' 2008-07-16 17:22:50 -07:00
builtin-for-each-ref.c Make non-static functions, that may be static, static 2008-07-23 18:38:14 -07:00
builtin-fsck.c fsck: Don't require tmp_obj_ file names are 14 bytes in length 2008-07-27 14:49:26 -07:00
builtin-gc.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
builtin-grep.c Merge branch 'maint' 2008-07-20 17:16:29 -07:00
builtin-http-fetch.c
builtin-init-db.c init: handle empty "template" parameter 2008-08-01 22:41:07 -07:00
builtin-log.c Merge branch 'sb/dashless' 2008-07-16 17:22:50 -07:00
builtin-ls-files.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
builtin-ls-remote.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
builtin-ls-tree.c Merge branch 'sb/dashless' 2008-07-16 17:22:50 -07:00
builtin-mailinfo.c mailinfo: better parse email adresses containg parentheses 2008-07-21 20:09:12 -07:00
builtin-mailsplit.c Rename path_list to string_list 2008-07-21 19:11:50 -07:00
builtin-merge-base.c merge-base: die with an error message if not passed a commit ref 2008-07-28 23:02:12 -07:00
builtin-merge-file.c
builtin-merge-ours.c
builtin-merge-recursive.c Rename path_list to string_list 2008-07-21 19:11:50 -07:00
builtin-merge.c Fix merge name generation in "merge in C" 2008-07-30 01:13:26 -07:00
builtin-mv.c git-mv: Keep moved index entries inact 2008-07-27 15:05:19 -07:00
builtin-name-rev.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
builtin-pack-objects.c Fix some warnings (on cygwin) to allow -Werror 2008-07-05 17:26:29 -07:00
builtin-pack-refs.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
builtin-prune-packed.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
builtin-prune.c Teach fsck and prune about the new location of temporary objects 2008-07-24 23:08:07 -07:00
builtin-push.c builtin-push.c: Cleanup - use OPT_BIT() and remove some variables 2008-07-20 14:41:49 -07:00
builtin-read-tree.c Move read_cache_unmerged() to read-cache.c 2008-06-30 22:45:51 -07:00
builtin-reflog.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
builtin-remote.c Rename path_list to string_list 2008-07-21 19:11:50 -07:00
builtin-rerere.c Rename path_list to string_list 2008-07-21 19:11:50 -07:00
builtin-reset.c git-reset: Let -q hush "locally modified" messages 2008-07-25 17:57:22 -07:00
builtin-rev-list.c Merge branch 'maint' 2008-07-19 11:28:06 -07:00
builtin-rev-parse.c rev-parse: Add support for the ^! and ^@ syntax 2008-07-27 14:14:01 -07:00
builtin-revert.c Merge branch 'maint' 2008-08-01 23:55:51 -07:00
builtin-rm.c Merge branch 'maint' 2008-07-19 11:28:06 -07:00
builtin-send-pack.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
builtin-shortlog.c Rename path_list to string_list 2008-07-21 19:11:50 -07:00
builtin-show-branch.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
builtin-show-ref.c Rename path_list to string_list 2008-07-21 19:11:50 -07:00
builtin-stripspace.c
builtin-symbolic-ref.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
builtin-tag.c editor.c: Libify launch_editor() 2008-07-25 17:09:38 -07:00
builtin-tar-tree.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
builtin-unpack-objects.c Fix some warnings (on cygwin) to allow -Werror 2008-07-05 17:26:29 -07:00
builtin-update-index.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
builtin-update-ref.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
builtin-upload-archive.c archive: define MAX_ARGS where it's needed 2008-07-25 17:20:55 -07:00
builtin-verify-pack.c Fix some warnings (on cygwin) to allow -Werror 2008-07-05 17:26:29 -07:00
builtin-verify-tag.c builtin-verify-tag: fix -v option parsing 2008-07-28 23:02:11 -07:00
builtin-write-tree.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
builtin.h Allow pager of diff command be enabled/disabled 2008-07-23 11:14:47 -07:00
bundle.c Teach git-bundle to read revision arguments from stdin like git-rev-list. 2008-07-07 01:31:24 -07:00
bundle.h
cache-tree.c cache-tree.c: make cache_tree_find() static 2008-07-16 08:50:27 -07:00
cache-tree.h cache-tree.c: make cache_tree_find() static 2008-07-16 08:50:27 -07:00
cache.h Make use of stat.ctime configurable 2008-07-28 23:26:25 -07:00
check-builtins.sh
check-racy.c
check_bindir
color.c
color.h
combine-diff.c
command-list.txt
commit.c sort_in_topological_order(): avoid setting a commit flag 2008-08-01 23:14:22 -07:00
commit.h Merge branch 'mv/merge-in-c' 2008-07-15 19:09:46 -07:00
config.c Make use of stat.ctime configurable 2008-07-28 23:26:25 -07:00
config.mak.in
configure.ac
connect.c
convert.c Fixed text file auto-detection: treat EOF character 032 at the end of file as printable 2008-07-11 21:14:27 -07:00
copy.c
COPYING
csum-file.c
csum-file.h
ctype.c
daemon.c git daemon: avoid waking up too often 2008-07-23 16:57:14 -07:00
date.c
decorate.c fast-export --export-marks: fix off by one error 2008-07-03 00:34:59 -07:00
decorate.h
delta.h
diff-delta.c
diff-lib.c Fix buffer overflow in git diff 2008-07-16 14:03:24 -07:00
diff-no-index.c Rename path_list to string_list 2008-07-21 19:11:50 -07:00
diff.c format-patch: Produce better output with --inline or --attach 2008-07-29 23:18:15 -07:00
diff.h Fix buffer overflow in git diff 2008-07-16 14:03:24 -07:00
diffcore-break.c
diffcore-delta.c
diffcore-order.c
diffcore-pickaxe.c
diffcore-rename.c
diffcore.h
dir.c
dir.h
dump-cache-tree.c
editor.c editor.c: Libify launch_editor() 2008-07-25 17:09:38 -07:00
entry.c
environment.c Make use of stat.ctime configurable 2008-07-28 23:26:25 -07:00
exec_cmd.c Refactor, adding prepare_git_cmd(const char **argv) 2008-07-28 23:02:11 -07:00
exec_cmd.h Refactor, adding prepare_git_cmd(const char **argv) 2008-07-28 23:02:11 -07:00
fast-import.c Support gitlinks in fast-import. 2008-07-19 11:25:51 -07:00
fetch-pack.h
fixup-builtins make remove-dashes: apply to scripts and programs as well, not just to builtins 2008-07-11 21:13:17 -07:00
fsck.c
fsck.h
generate-cmdlist.sh
git-add--interactive.perl Make git-add -i accept ranges like 7- 2008-08-01 23:26:40 -07:00
git-am.sh Replace uses of "git-var" with "git var" 2008-07-30 11:42:01 -07:00
git-archimport.perl Make usage strings dash-less 2008-07-13 14:12:48 -07:00
git-bisect.sh git-bisect: use dash-less form on git bisect log 2008-07-11 21:13:16 -07:00
git-compat-util.h Merge branch 'mv/merge-in-c' 2008-07-15 19:09:46 -07:00
git-cvsexportcommit.perl Make usage strings dash-less 2008-07-13 14:12:48 -07:00
git-cvsimport.perl Make usage strings dash-less 2008-07-13 14:12:48 -07:00
git-cvsserver.perl cvsserver: Add cvs co -c support 2008-07-19 11:17:43 -07:00
git-filter-branch.sh git-filter-branch.sh: Allow running in bare repositories 2008-07-23 16:57:04 -07:00
git-instaweb.sh Make usage strings dash-less 2008-07-13 14:12:48 -07:00
git-lost-found.sh
git-merge-octopus.sh
git-merge-one-file.sh
git-merge-resolve.sh
git-mergetool.sh
git-parse-remote.sh
git-pull.sh Ignore dirty submodule states in "git pull --rebase" 2008-07-23 11:36:56 -07:00
git-quiltimport.sh Rename .git/rebase to .git/rebase-apply 2008-07-21 18:51:47 -07:00
git-rebase--interactive.sh rebase -i: When an 'edit' stops, mention the commit 2008-07-23 12:02:57 -07:00
git-rebase.sh Rename .git/rebase to .git/rebase-apply 2008-07-21 18:51:47 -07:00
git-relink.perl Make usage strings dash-less 2008-07-13 14:12:48 -07:00
git-repack.sh Make usage strings dash-less 2008-07-13 14:12:48 -07:00
git-request-pull.sh git-request-pull: replace call to deprecated peek-remote 2008-07-13 16:08:27 -07:00
git-send-email.perl Merge branch 'maint' 2008-07-25 13:56:36 -07:00
git-sh-setup.sh Make usage strings dash-less 2008-07-13 14:12:48 -07:00
git-stash.sh stash save: fix parameter handling 2008-07-23 16:57:03 -07:00
git-submodule.sh git-submodule: move ill placed shift. 2008-08-01 23:16:38 -07:00
git-svn.perl git-svn: teach dcommit about svn auto-props 2008-07-25 17:54:19 -07:00
GIT-VERSION-GEN GIT-VERSION-GEN: do not fail if a 'HEAD' file exists in the working copy 2008-06-28 10:53:11 -07:00
git-web--browse.sh
git.c Record the command invocation path early 2008-07-25 17:41:13 -07:00
git.spec.in
graph.c
graph.h
grep.c
grep.h
hash-object.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
hash.c
hash.h
help.c Avoid chdir() in list_commands_in_dir() 2008-07-27 14:14:38 -07:00
http-push.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
http-walker.c Merge branch 'maint' 2008-07-19 11:28:06 -07:00
http.c http.c: Use 'git_config_string' to clean up SSL config. 2008-07-05 17:42:46 -07:00
http.h Work around gcc warnings from curl headers 2008-07-04 00:37:40 -07:00
ident.c Replace uses of "git-var" with "git var" 2008-07-30 11:42:01 -07:00
imap-send.c
index-pack.c Merge branch 'maint' 2008-07-25 13:56:36 -07:00
INSTALL Tone down warning about GNU Interactive Tools 2008-07-08 23:05:26 -07:00
interpolate.c
interpolate.h
list-objects.c
list-objects.h
ll-merge.c
ll-merge.h
lockfile.c
log-tree.c format-patch: Produce better output with --inline or --attach 2008-07-29 23:18:15 -07:00
log-tree.h
mailmap.c Rename path_list to string_list 2008-07-21 19:11:50 -07:00
mailmap.h Rename path_list to string_list 2008-07-21 19:11:50 -07:00
Makefile git-gui (Windows): Switch to relative discovery of oguilib 2008-07-29 22:43:37 -07:00
match-trees.c
merge-file.c
merge-index.c
merge-recursive.h
merge-tree.c
mktag.c
mktree.c
name-hash.c
object.c
object.h
pack-check.c
pack-redundant.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
pack-refs.c
pack-refs.h
pack-revindex.c
pack-revindex.h
pack-write.c
pack.h
pager.c Windows: Make the pager work. 2008-06-26 08:47:15 +02:00
parse-options.c parse-options: fix segmentation fault when a required value is missing 2008-07-21 21:20:04 -07:00
parse-options.h parse-options: add PARSE_OPT_LASTARG_DEFAULT flag 2008-07-09 01:33:24 -07:00
patch-delta.c
patch-id.c
patch-ids.c
patch-ids.h
path.c Allow add_path() to add non-existent directories to the path 2008-07-25 17:41:13 -07:00
pkt-line.c
pkt-line.h
pretty.c Rename path_list to string_list 2008-07-21 19:11:50 -07:00
progress.c
progress.h
quote.c shrink git-shell by avoiding redundant dependencies 2008-06-27 23:22:00 -07:00
quote.h
reachable.c
reachable.h
read-cache.c Teach gitlinks to ie_modified() and ce_modified_check_fs() 2008-07-30 00:09:22 -07:00
README
receive-pack.c Record the command invocation path early 2008-07-25 17:41:13 -07:00
reflog-walk.c Rename path_list to string_list 2008-07-21 19:11:50 -07:00
reflog-walk.h
refs.c Merge branch 'maint' 2008-07-09 00:19:50 -07:00
refs.h
RelNotes Start 1.5.6.5 RelNotes to describe accumulated fixes 2008-08-01 23:54:01 -07:00
remote.c make sure parsed wildcard refspec ends with slash 2008-08-01 22:41:15 -07:00
remote.h Refactor "tracking statistics" code used by "git checkout" 2008-07-02 23:32:25 -07:00
rerere.c Rename path_list to string_list 2008-07-21 19:11:50 -07:00
rerere.h Rename path_list to string_list 2008-07-21 19:11:50 -07:00
revision.c revision traversal: show full history with merge simplification 2008-08-02 00:33:15 -07:00
revision.h revision traversal: show full history with merge simplification 2008-08-02 00:33:15 -07:00
run-command.c run-command (Windows): Run dashless "git <cmd>" 2008-07-28 23:02:11 -07:00
run-command.h Windows: Implement asynchronous functions as threads. 2008-06-26 08:45:08 +02:00
send-pack.h
server-info.c
setup.c Merge branch 'dr/ceiling' 2008-07-07 02:17:23 -07:00
sha1-lookup.c
sha1-lookup.h
sha1_file.c restore legacy behavior for read_sha1_file() 2008-07-14 23:35:32 -07:00
sha1_name.c ignore non-existent refs in dwim_log() 2008-07-23 18:11:04 -07:00
shallow.c
shell.c Record the command invocation path early 2008-07-25 17:41:13 -07:00
shortlog.h Rename path_list to string_list 2008-07-21 19:11:50 -07:00
show-index.c Fix some warnings (on cygwin) to allow -Werror 2008-07-05 17:26:29 -07:00
sideband.c
sideband.h
strbuf.c Add some useful functions for strbuf manipulation. 2008-07-13 14:04:04 -07:00
strbuf.h editor.c: Libify launch_editor() 2008-07-25 17:09:38 -07:00
string-list.c Rename path_list to string_list 2008-07-21 19:11:50 -07:00
string-list.h Rename path_list to string_list 2008-07-21 19:11:50 -07:00
symlinks.c
tag.c
tag.h
tar.h
test-chmtime.c
test-date.c
test-delta.c
test-genrandom.c
test-match-trees.c
test-parse-options.c Fix test-parse-options "integer" test 2008-07-30 12:53:45 -07:00
test-path-utils.c
test-sha1.c
test-sha1.sh
thread-utils.c
thread-utils.h
trace.c
transport.c Merge branch 'qq/maint' 2008-07-05 18:33:16 -07:00
transport.h
tree-diff.c Fix buffer overflow in git diff 2008-07-16 14:03:24 -07:00
tree-walk.c
tree-walk.h
tree.c add context pointer to read_tree_recursive() 2008-07-15 07:17:59 -07:00
tree.h add context pointer to read_tree_recursive() 2008-07-15 07:17:59 -07:00
unpack-file.c
unpack-trees.c
unpack-trees.h
update-server-info.c Make usage strings dash-less 2008-07-13 14:12:48 -07:00
upload-pack.c Record the command invocation path early 2008-07-25 17:41:13 -07:00
usage.c
utf8.c
utf8.h
var.c Replace uses of "git-var" with "git var" 2008-07-30 11:42:01 -07:00
walker.c
walker.h
wrapper.c Move read_in_full() and write_in_full() to wrapper.c 2008-07-20 17:17:09 -07:00
write_or_die.c Move read_in_full() and write_in_full() to wrapper.c 2008-07-20 17:17:09 -07:00
ws.c Teach "diff --check" about new blank lines at end 2008-06-26 22:07:26 -07:00
wt-status.c Merge branch 'jc/report-tracking' 2008-07-13 15:15:23 -07:00
wt-status.h
xdiff-interface.c
xdiff-interface.h

////////////////////////////////////////////////////////////////

	GIT - the stupid content tracker

////////////////////////////////////////////////////////////////

"git" can mean anything, depending on your mood.

 - random three-letter combination that is pronounceable, and not
   actually used by any common UNIX command.  The fact that it is a
   mispronunciation of "get" may or may not be relevant.
 - stupid. contemptible and despicable. simple. Take your pick from the
   dictionary of slang.
 - "global information tracker": you're in a good mood, and it actually
   works for you. Angels sing, and a light suddenly fills the room.
 - "goddamn idiotic truckload of sh*t": when it breaks

Git is a fast, scalable, distributed revision control system with an
unusually rich command set that provides both high-level operations
and full access to internals.

Git is an Open Source project covered by the GNU General Public License.
It was originally written by Linus Torvalds with help of a group of
hackers around the net. It is currently maintained by Junio C Hamano.

Please read the file INSTALL for installation instructions.
See Documentation/tutorial.txt to get started, then see
Documentation/everyday.txt for a useful minimum set of commands,
and "man git-commandname" for documentation of each command.
CVS users may also want to read Documentation/cvs-migration.txt.

Many Git online resources are accessible from http://git.or.cz/
including full documentation and Git related tools.

The user discussion and development of Git take place on the Git
mailing list -- everyone is welcome to post bug reports, feature
requests, comments and patches to git@vger.kernel.org. To subscribe
to the list, send an email with just "subscribe git" in the body to
majordomo@vger.kernel.org. The mailing list archives are available at
http://marc.theaimsgroup.com/?l=git and other archival sites.

The messages titled "A note from the maintainer", "What's in
git.git (stable)" and "What's cooking in git.git (topics)" and
the discussion following them on the mailing list give a good
reference for project status, development direction and
remaining tasks.