Go to file
Junio C Hamano f8246281af merge: use editor by default in interactive sessions
Traditionally, a cleanly resolved merge was committed by "git merge" using
the auto-generated merge commit log message without invoking the editor.

After 5 years of use in the field, it turns out that people perform too
many unjustified merges of the upstream history into their topic branches.
These merges are not just useless, but they are often not explained well,
and making the end result unreadable when it gets time for merging their
history back to their upstream.

Earlier we added the "--edit" option to the command, so that people can
edit the log message to explain and justify their merge commits. Let's
take it one step further and spawn the editor by default when we are in an
interactive session (i.e. the standard input and the standard output are
pointing at the same tty device).

There may be existing scripts that leave the standard input and the
standard output of the "git merge" connected to whatever environment the
scripts were started, and such invocation might trigger the above
"interactive session" heuristics.  GIT_MERGE_AUTOEDIT environment variable
can be set to "no" at the beginning of such scripts to use the historical
behaviour while the script runs.

Note that this backward compatibility is meant only for scripts, and we
deliberately do *not* support "merge.edit = yes/no/auto" configuration
option to allow people to keep the historical behaviour.

Suggested-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2012-01-23 14:34:55 -08:00
Documentation merge: use editor by default in interactive sessions 2012-01-23 14:34:55 -08:00
block-sha1
…
builtin merge: use editor by default in interactive sessions 2012-01-23 14:34:55 -08:00
compat Merge branch 'pt/mingw-misc-fixes' 2011-10-18 21:59:11 -07:00
contrib Merge branch 'sg/completion' 2011-10-17 21:37:13 -07:00
git-gui Merge git://repo.or.cz/git-gui 2011-10-16 03:01:44 -07:00
git_remote_helpers Change check_ref_format() to take a flags argument 2011-10-05 13:45:29 -07:00
gitk-git
…
gitweb Merge branch 'jn/gitweb-manpages' 2011-10-18 21:59:11 -07:00
mergetools mergetools: use the correct tool for Beyond Compare 3 on Windows 2011-10-15 20:13:55 -07:00
perl Add Git::config_path() 2011-09-30 12:34:38 -07:00
po
…
ppc
…
t merge: use editor by default in interactive sessions 2012-01-23 14:34:55 -08:00
templates templates/hooks--*: remove sample hooks without any functionality 2011-09-27 10:00:35 -07:00
vcs-svn
…
xdiff Merge branch 'rs/diff-whole-function' 2011-10-19 10:49:13 -07:00
.gitattributes
…
.gitignore
…
.mailmap
…
COPYING
…
GIT-VERSION-GEN Post 1.7.7 first wave 2011-10-05 12:54:35 -07:00
INSTALL
…
LGPL-2.1
…
Makefile Split GPG interface into its own helper library 2011-11-04 21:40:25 -07:00
README
…
RelNotes Prepare for 1.7.7.1 2011-10-15 20:55:12 -07:00
abspath.c Merge branch 'js/maint-add-path-stat-pwd' into maint 2011-08-16 11:41:27 -07:00
aclocal.m4
…
advice.c
…
advice.h
…
alias.c
…
alloc.c
…
archive-tar.c
…
archive-zip.c
…
archive.c archive.c: use OPT_BOOL() 2011-09-27 17:00:06 -07:00
archive.h
…
argv-array.c refactor argv_array into generic code 2011-09-14 11:56:36 -07:00
argv-array.h refactor argv_array into generic code 2011-09-14 11:56:36 -07:00
attr.c attr.c: respect core.ignorecase when matching attribute patterns 2011-10-11 09:43:05 -07:00
attr.h
…
base85.c
…
bisect.c Merge branch 'rs/pending' 2011-10-13 19:03:22 -07:00
bisect.h
…
blob.c
…
blob.h
…
branch.c Merge branch 'rr/revert-cherry-pick-continue' 2011-10-05 12:36:19 -07:00
branch.h branch --set-upstream: regression fix 2011-09-16 21:47:47 -07:00
builtin.h fmt-merge-msg: package options into a structure 2011-11-07 15:34:30 -08:00
bundle.c Merge branch 'rs/pending' 2011-10-13 19:03:22 -07:00
bundle.h Teach progress eye-candy to fetch_refs_from_bundle() 2011-09-19 11:07:21 -07:00
cache-tree.c
…
cache-tree.h
…
cache.h refs DWIMmery: use the same rule for both "git fetch" and others 2011-11-07 15:34:30 -08:00
check-builtins.sh
…
check-racy.c
…
check_bindir
…
color.c want_color: automatically fallback to color.ui 2011-08-19 15:51:38 -07:00
color.h want_color: automatically fallback to color.ui 2011-08-19 15:51:38 -07:00
combine-diff.c Merge branch 'jk/color-and-pager' 2011-08-28 21:19:16 -07:00
command-list.txt Documentation: Link to gitweb(1) and gitweb.conf(5) in other manpages 2011-10-16 11:09:35 -07:00
commit.c commit: teach --amend to carry forward extra headers 2011-11-09 22:27:11 -08:00
commit.h commit: teach --amend to carry forward extra headers 2011-11-09 22:27:11 -08:00
config.c Merge branch 'bc/attr-ignore-case' 2011-10-17 21:37:14 -07:00
config.mak.in
…
configure.ac
…
connect.c Change check_ref_format() to take a flags argument 2011-10-05 13:45:29 -07:00
connected.c check_everything_connected(): libify 2011-09-09 15:19:02 -07:00
connected.h check_everything_connected(): libify 2011-09-09 15:19:02 -07:00
convert.c Merge branch 'tr/maint-ident-to-git-memmove' 2011-09-02 13:18:25 -07:00
convert.h
…
copy.c
…
csum-file.c
…
csum-file.h
…
ctype.c
…
daemon.c Merge branch 'nd/git-daemon-error-msgs' 2011-10-13 19:03:21 -07:00
date.c date.c: Support iso8601 timezone formats 2011-09-12 16:49:14 -07:00
decorate.c
…
decorate.h
…
delta.h
…
diff-delta.c
…
diff-lib.c Merge branch 'jc/diff-index-unpack' into maint 2011-10-15 20:46:36 -07:00
diff-no-index.c
…
diff.c Merge branch 'rs/diff-whole-function' 2011-10-19 10:49:13 -07:00
diff.h diff: add option to show whole functions as context 2011-10-10 12:05:07 -07:00
diffcore-break.c
…
diffcore-delta.c
…
diffcore-order.c
…
diffcore-pickaxe.c pickaxe: factor out pickaxe 2011-10-07 15:46:14 -07:00
diffcore-rename.c
…
diffcore.h combine-diff: support format_callback 2011-08-20 23:03:06 -07:00
dir.c rename pathspec_prefix() to common_prefix() and move to dir.[ch] 2011-09-12 14:38:32 -07:00
dir.h rename pathspec_prefix() to common_prefix() and move to dir.[ch] 2011-09-12 14:38:32 -07:00
editor.c
…
entry.c
…
environment.c Merge branch 'bc/attr-ignore-case' 2011-10-17 21:37:14 -07:00
exec_cmd.c
…
exec_cmd.h
…
fast-import.c Merge branch 'di/fast-import-empty-tag-note-fix' 2011-10-13 19:03:19 -07:00
fetch-pack.h
…
fixup-builtins
…
fsck.c fsck: improve committer/author check 2011-08-11 12:21:07 -07:00
fsck.h
…
generate-cmdlist.sh
…
gettext.c
…
gettext.h
…
git-add--interactive.perl
…
git-am.sh Merge branch 'gb/am-hg-patch' 2011-10-05 12:36:17 -07:00
git-archimport.perl
…
git-bisect.sh Merge branch 'js/bisect-no-checkout' 2011-10-17 21:37:09 -07:00
git-compat-util.h Merge branch 'cb/maint-exec-error-report' 2011-08-17 17:25:55 -07:00
git-cvsexportcommit.perl
…
git-cvsimport.perl
…
git-cvsserver.perl use -h for synopsis and --help for manpage consistently 2011-10-05 10:47:10 -07:00
git-difftool--helper.sh difftool--helper: Make style consistent with git 2011-08-19 00:09:17 -07:00
git-difftool.perl use -h for synopsis and --help for manpage consistently 2011-10-05 10:47:10 -07:00
git-filter-branch.sh Merge branch 'jk/filter-branch-require-clean-work-tree' into maint 2011-10-15 20:46:38 -07:00
git-instaweb.sh
…
git-lost-found.sh
…
git-merge-octopus.sh
…
git-merge-one-file.sh Merge branch 'js/maint-merge-one-file-osx-expr' 2011-10-13 19:03:24 -07:00
git-merge-resolve.sh
…
git-mergetool--lib.sh Merge branch 'maint' 2011-09-19 20:46:48 -07:00
git-mergetool.sh Merge branch 'jm/mergetool-pathspec' 2011-10-10 15:56:18 -07:00
git-parse-remote.sh
…
git-pull.sh Merge branch 'jk/pull-rebase-with-work-tree' 2011-10-17 21:37:14 -07:00
git-quiltimport.sh
…
git-rebase--am.sh
…
git-rebase--interactive.sh rebase -i: notice and warn if "exec $cmd" modifies the index or the working tree 2011-08-26 15:25:41 -07:00
git-rebase--merge.sh
…
git-rebase.sh Merge branch 'jk/pull-rebase-with-work-tree' 2011-10-17 21:37:14 -07:00
git-relink.perl
…
git-remote-testgit.py (short) documentation for the testgit remote helper 2011-09-01 15:52:02 -07:00
git-repack.sh
…
git-request-pull.sh
…
git-send-email.perl Merge branch 'md/smtp-tls-hello-again' 2011-10-18 21:59:10 -07:00
git-sh-i18n.sh gettext: add gettextln, eval_gettextln to encode common idiom 2011-08-08 12:02:16 -07:00
git-sh-setup.sh use -h for synopsis and --help for manpage consistently 2011-10-05 10:47:10 -07:00
git-stash.sh Merge branch 'bc/unstash-clean-crufts' 2011-10-05 12:36:17 -07:00
git-submodule.sh Merge branch 'fg/submodule-git-file-git-dir' 2011-10-10 15:56:17 -07:00
git-svn.perl Merge branch 'pt/mingw-misc-fixes' 2011-10-18 21:59:11 -07:00
git-web--browse.sh git-web--browse: avoid the use of eval 2011-10-03 10:47:07 -07:00
git.c Merge branch 'jk/pager-with-external-command' 2011-08-28 21:19:25 -07:00
git.spec.in gitweb: Add gitweb manpages to 'gitweb' package in git.spec 2011-10-16 11:09:35 -07:00
gpg-interface.c Split GPG interface into its own helper library 2011-11-04 21:40:25 -07:00
gpg-interface.h Split GPG interface into its own helper library 2011-11-04 21:40:25 -07:00
graph.c color: delay auto-color decision until point of use 2011-08-19 15:51:34 -07:00
graph.h
…
grep.c Merge branch 'fk/use-kwset-pickaxe-grep-f' 2011-09-02 10:00:38 -07:00
grep.h Use kwset in grep 2011-08-20 22:33:58 -07:00
hash.c
…
hash.h
…
help.c
…
help.h
…
hex.c get_sha1_hex(): do not read past a NUL character 2011-10-05 13:45:16 -07:00
http-backend.c
…
http-fetch.c Merge branch 'jk/http-auth' 2011-10-17 21:37:15 -07:00
http-push.c Merge branch 'jk/http-auth' 2011-10-17 21:37:15 -07:00
http-walker.c
…
http.c Merge branch 'jk/http-auth' 2011-10-17 21:37:15 -07:00
http.h http_init: accept separate URL parameter 2011-10-15 21:18:36 -07:00
ident.c ident: do not retrieve default ident when unnecessary 2011-10-06 11:16:16 -07:00
imap-send.c
…
kwset.c sparse: Fix an "Using plain integer as NULL pointer" warning 2011-09-11 14:43:14 -07:00
kwset.h Adapt the kwset code to Git 2011-08-20 22:33:57 -07:00
levenshtein.c
…
levenshtein.h
…
list-objects.c list-objects: pass callback data to show_objects() 2011-09-01 15:46:12 -07:00
list-objects.h list-objects: pass callback data to show_objects() 2011-09-01 15:46:12 -07:00
ll-merge.c
…
ll-merge.h
…
lockfile.c
…
log-tree.c Merge branch 'js/log-show-children' 2011-10-18 21:59:12 -07:00
log-tree.h
…
mailmap.c
…
mailmap.h
…
match-trees.c
…
merge-file.c
…
merge-file.h
…
merge-recursive.c merge: make usage of commit->util more extensible 2011-11-08 10:36:53 -08:00
merge-recursive.h merge-recursive: Save D/F conflict filenames instead of unlinking them 2011-08-14 14:19:35 -07:00
name-hash.c fix phantom untracked files when core.ignorecase is set 2011-10-07 17:54:04 -07:00
notes-cache.c
…
notes-cache.h
…
notes-merge.c Merge branch 'mh/maint-notes-merge-pathbuf-fix' 2011-10-10 15:56:20 -07:00
notes-merge.h
…
notes.c Do not use C++-style comments 2011-08-22 10:07:07 -07:00
notes.h
…
object.c
…
object.h
…
pack-check.c
…
pack-refs.c Change check_ref_format() to take a flags argument 2011-10-05 13:45:29 -07:00
pack-refs.h
…
pack-revindex.c
…
pack-revindex.h
…
pack-write.c
…
pack.h
…
pager.c setup_pager: set GIT_PAGER_IN_USE 2011-08-18 14:17:12 -07:00
parse-options-cb.c parseopt: add OPT_NOOP_NOARG 2011-09-28 12:46:21 -07:00
parse-options.c parse-options: deprecate OPT_BOOLEAN 2011-09-27 17:00:04 -07:00
parse-options.h parseopt: add OPT_NOOP_NOARG 2011-09-28 12:46:21 -07:00
patch-delta.c
…
patch-ids.c
…
patch-ids.h
…
path.c read_gitfile_gently(): rename misnamed function to read_gitfile() 2011-08-22 14:04:56 -07:00
pkt-line.c
…
pkt-line.h
…
preload-index.c
…
pretty.c
…
progress.c
…
progress.h
…
quote.c Merge branch 'jk/argv-array' 2011-10-05 12:36:24 -07:00
quote.h quote: provide sq_dequote_to_argv_array 2011-09-14 11:56:49 -07:00
reachable.c
…
reachable.h
…
read-cache.c Merge branch 'maint' 2011-08-25 16:00:07 -07:00
reflog-walk.c
…
reflog-walk.h
…
refs.c refs DWIMmery: use the same rule for both "git fetch" and others 2011-11-07 15:34:30 -08:00
refs.h Merge branch 'jp/get-ref-dir-unsorted' 2011-10-10 15:56:19 -07:00
remote-curl.c Merge branch 'jk/http-auth' 2011-10-17 21:37:15 -07:00
remote.c cleanup: use internal memory allocation wrapper functions everywhere 2011-10-06 13:54:32 -07:00
remote.h
…
replace_object.c
…
rerere.c
…
rerere.h
…
resolve-undo.c
…
resolve-undo.h
…
revision.c Merge branch 'bk/ancestry-path' into maint 2011-10-15 20:46:38 -07:00
revision.h Merge branch 'bk/ancestry-path' into maint 2011-10-15 20:46:38 -07:00
run-command.c Merge branch 'jk/argv-array' 2011-10-05 12:36:24 -07:00
run-command.h
…
send-pack.h
…
sequencer.c
…
sequencer.h
…
server-info.c
…
setup.c Merge branch 'cb/common-prefix-unification' 2011-10-10 15:56:17 -07:00
sh-i18n--envsubst.c
…
sha1-array.c
…
sha1-array.h
…
sha1-lookup.c
…
sha1-lookup.h
…
sha1_file.c Merge branch 'wh/normalize-alt-odb-path' 2011-10-05 12:36:22 -07:00
sha1_name.c Merge branch 'mh/check-ref-format-3' 2011-10-10 15:56:18 -07:00
shallow.c
…
shell.c
…
shortlog.h
…
show-index.c cleanup: use internal memory allocation wrapper functions everywhere 2011-10-06 13:54:32 -07:00
sideband.c
…
sideband.h
…
sigchain.c
…
sigchain.h
…
strbuf.c fmt-merge-msg: Add contents of merged tag in the merge message 2011-11-08 10:36:18 -08:00
strbuf.h fmt-merge-msg: Add contents of merged tag in the merge message 2011-11-08 10:36:18 -08:00
streaming.c
…
streaming.h
…
string-list.c string-list: Add API to remove an item from an unsorted list 2011-08-14 14:19:35 -07:00
string-list.h string-list: Add API to remove an item from an unsorted list 2011-08-14 14:19:35 -07:00
submodule.c Merge branch 'jk/maint-fetch-submodule-check-fix' into maint 2011-10-15 20:46:38 -07:00
submodule.h submodule: Search for merges only at end of recursive merge 2011-10-13 10:18:16 -07:00
symlinks.c
…
tag.c Split GPG interface into its own helper library 2011-11-04 21:40:25 -07:00
tag.h
…
tar.h
…
test-chmtime.c
…
test-ctype.c test-ctype: add test for is_pathspec_magic 2011-10-03 11:44:03 -07:00
test-date.c
…
test-delta.c
…
test-dump-cache-tree.c
…
test-genrandom.c
…
test-index-version.c
…
test-line-buffer.c
…
test-match-trees.c
…
test-mktemp.c
…
test-obj-pool.c
…
test-parse-options.c parseopt: add OPT_NOOP_NOARG 2011-09-28 12:46:21 -07:00
test-path-utils.c
…
test-run-command.c
…
test-sha1.c
…
test-sha1.sh
…
test-sigchain.c
…
test-string-pool.c
…
test-subprocess.c
…
test-svn-fe.c
…
test-treap.c
…
thread-utils.c
…
thread-utils.h
…
trace.c
…
transport-helper.c cleanup: use internal memory allocation wrapper functions everywhere 2011-10-06 13:54:32 -07:00
transport.c Merge branch 'jc/maint-bundle-too-quiet' into maint 2011-10-15 20:46:39 -07:00
transport.h push: Don't push a repository with unpushed submodules 2011-08-20 23:03:52 -07:00
tree-diff.c
…
tree-walk.c Merge branch 'dm/tree-walk' 2011-10-10 15:56:20 -07:00
tree-walk.h traverse_trees(): allow pruning with pathspec 2011-08-29 14:32:04 -07:00
tree.c
…
tree.h
…
unimplemented.sh
…
unpack-trees.c Merge branch 'jc/diff-index-unpack' into maint 2011-10-15 20:46:36 -07:00
unpack-trees.h Merge branch 'jc/diff-index-unpack' into maint 2011-10-15 20:46:36 -07:00
upload-pack.c Merge branch 'jc/fetch-verify' 2011-10-05 12:36:20 -07:00
url.c Merge branch 'jk/http-auth' 2011-10-17 21:37:15 -07:00
url.h
…
usage.c
…
userdiff.c Merge branch 'jk/combine-diff-binary-etc' into maint 2011-08-16 11:23:24 -07:00
userdiff.h
…
utf8.c
…
utf8.h
…
walker.c Change check_ref_format() to take a flags argument 2011-10-05 13:45:29 -07:00
walker.h
…
wrap-for-bin.sh
…
wrapper.c
…
write_or_die.c
…
ws.c
…
wt-status.c Merge branch 'jk/maint-1.7.2-status-ignored' into maint 2011-09-11 21:51:10 -07:00
wt-status.h
…
xdiff-interface.c
…
xdiff-interface.h
…
zlib.c
…

README

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

	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/gittutorial.txt to get started, then see
Documentation/everyday.txt for a useful minimum set of commands, and
Documentation/git-commandname.txt for documentation of each command.
If git has been correctly installed, then the tutorial can also be
read with "man gittutorial" or "git help tutorial", and the
documentation of each command with "man git-commandname" or "git help
commandname".

CVS users may also want to read Documentation/gitcvs-migration.txt
("man gitcvs-migration" or "git help cvs-migration" if git is
installed).

Many Git online resources are accessible from http://git-scm.com/
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.