git-commit-vandalism/Documentation
Junio C Hamano 5521883490 checkout: do not lose staged removal
The logic to checkout a different commit implements the safety to never
lose user's local changes.  For example, switching from a commit to
another commit, when you have changed a path that is different between
them, need to merge your changes to the version from the switched-to
commit, which you may not necessarily be able to resolve easily.  By
default, "git checkout" refused to switch branches, to give you a chance
to stash your local changes (or use "-m" to merge, accepting the risks of
getting conflicts).

This safety, however, had one deliberate hole since early June 2005.  When
your local change was to remove a path (and optionally to stage that
removal), the command checked out the path from the switched-to commit
nevertheless.

This was to allow an initial checkout to happen smoothly (e.g. an initial
checkout is done by starting with an empty index and switching from the
commit at the HEAD to the same commit).  We can tighten the rule slightly
to allow this special case to pass, without losing sight of removal
explicitly done by the user, by noticing if the index is truly empty when
the operation begins.

For historical background, see:

    http://thread.gmane.org/gmane.comp.version-control.git/4641/focus=4646

This case is marked as *0* in the message, which both Linus and I said "it
feels somewhat wrong but otherwise we cannot start from an empty index".

Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-09-09 22:55:22 -07:00
..
howto Update my e-mail address 2008-08-01 23:21:44 -07:00
technical Fix two leftovers from path_list->string_list 2008-07-22 15:28:22 -07:00
.gitattributes Define the project whitespace policy 2008-02-11 13:23:15 -08:00
.gitignore doc: adding gitman.info and *.texi to .gitignore 2008-06-12 14:28:53 -07:00
asciidoc.conf pack.indexversion config option now defaults to 2 2008-06-25 21:30:55 -07:00
blame-options.txt Docs: Use "-l::\n--long\n" format in OPTIONS sections 2008-06-08 13:46:38 -07:00
build-docdep.perl
callouts.xsl
cat-texi.perl Documentation: exclude @pxref{[REMOTES]} from texinfo intermediate output 2008-06-12 14:21:05 -07:00
cmd-list.perl Documentation: rename gitlink macro to linkgit 2008-01-06 18:41:44 -08:00
CodingGuidelines Rename path_list to string_list 2008-07-21 19:11:50 -07:00
config.txt config.txt: Add missing colons after option name 2008-08-30 23:35:12 -07:00
diff-format.txt git-diff --numstat -z: make it machine readable 2007-12-12 10:59:22 -08:00
diff-generate-patch.txt git-diff(1): "--c" -> "--cc" typo fix 2008-08-01 23:21:23 -07:00
diff-options.txt Improve documentation for --dirstat diff option 2008-09-01 23:48:45 -07:00
docbook-xsl.css
docbook.xsl
everyday.txt git-gc --prune is deprecated 2008-04-22 21:53:37 -07:00
fetch-options.txt manpages: italicize git command names (which were in teletype font) 2008-07-05 11:24:40 -07:00
fix-texi.perl
git-add.txt Make git-add -i accept ranges like 7- 2008-08-01 23:26:40 -07:00
git-am.txt git-am: ignore --binary option 2008-08-16 02:32:36 -07:00
git-annotate.txt Mention the fact that 'git annotate' is only for backward compatibility. 2008-09-05 01:15:40 -07:00
git-apply.txt Merge branch 'js/apply-root' 2008-07-09 16:58:21 -07:00
git-archimport.txt manpages: italicize git command names (which were in teletype font) 2008-07-05 11:24:40 -07:00
git-archive.txt manpages: italicize git command names (which were in teletype font) 2008-07-05 11:24:40 -07:00
git-bisect.txt manpages: italicize gitk's name (where it was in teletype font) 2008-07-05 11:24:40 -07:00
git-blame.txt Update my e-mail address 2008-08-01 23:21:44 -07:00
git-branch.txt Update my e-mail address 2008-08-01 23:21:44 -07:00
git-bundle.txt manpages: italicize git command names (which were in teletype font) 2008-07-05 11:24:40 -07:00
git-cat-file.txt Documentation: typos / spelling fixes 2008-08-05 21:21:18 -07:00
git-check-attr.txt Update my e-mail address 2008-08-01 23:21:44 -07:00
git-check-ref-format.txt manpages: italicize git command names (which were in teletype font) 2008-07-05 11:24:40 -07:00
git-checkout-index.txt manpages: italicize git command names (which were in teletype font) 2008-07-05 11:24:40 -07:00
git-checkout.txt checkout: mention '--' in the docs 2008-07-24 23:29:38 -07:00
git-cherry-pick.txt Update my e-mail address 2008-08-01 23:21:44 -07:00
git-cherry.txt Update my e-mail address 2008-08-01 23:21:44 -07:00
git-citool.txt manpages: italicize git command names (which were in teletype font) 2008-07-05 11:24:40 -07:00
git-clean.txt Make the DESCRIPTION match <x>... items in the SYNOPSIS 2008-07-30 21:42:55 -07:00
git-clone.txt clone: Add an option to set up a mirror 2008-08-02 15:21:59 -07:00
git-commit-tree.txt Fix passwd(5) ref and reflect that commit doens't use commit-tree 2008-09-03 14:51:19 -07:00
git-commit.txt Update my e-mail address 2008-08-01 23:21:44 -07:00
git-config.txt Documentation: fix diff.external example 2008-08-01 22:45:27 -07:00
git-count-objects.txt Update my e-mail address 2008-08-01 23:21:44 -07:00
git-cvsexportcommit.txt manpages: italicize git command names (which were in teletype font) 2008-07-05 11:24:40 -07:00
git-cvsimport.txt Merge branch 'qq/maint' 2008-07-05 18:33:16 -07:00
git-cvsserver.txt adapt git-cvsserver manpage to dash-free syntax 2008-08-18 22:05:44 -07:00
git-daemon.txt manpages: italicize git command names (which were in teletype font) 2008-07-05 11:24:40 -07:00
git-describe.txt Update my e-mail address 2008-08-01 23:21:44 -07:00
git-diff-files.txt manpages: italicize git command names (which were in teletype font) 2008-07-05 11:24:40 -07:00
git-diff-index.txt manpages: italicize git command names (which were in teletype font) 2008-07-05 11:24:40 -07:00
git-diff-tree.txt Sync with 1.5.6.5 2008-08-06 13:50:48 -07:00
git-diff.txt Documentation: be consistent about "git-" versus "git " 2008-07-01 17:20:15 -07:00
git-fast-export.txt Support copy and rename detection in fast-export. 2008-07-29 23:57:51 -07:00
git-fast-import.txt Support gitlinks in fast-import. 2008-07-19 11:25:51 -07:00
git-fetch-pack.txt manpages: italicize git command names (which were in teletype font) 2008-07-05 11:24:40 -07:00
git-fetch.txt Update my e-mail address 2008-08-01 23:21:44 -07:00
git-filter-branch.txt Documentation: filter-branch: document how to filter all refs 2008-08-08 16:16:31 -07:00
git-fmt-merge-msg.txt Update my e-mail address 2008-08-01 23:21:44 -07:00
git-for-each-ref.txt Documentation: fix reference to a for-each-ref option 2008-09-01 21:58:22 -07:00
git-format-patch.txt git format-patch documentation: clarify what --cover-letter does 2008-08-14 17:49:12 -07:00
git-fsck-objects.txt Documentation: be consistent about "git-" versus "git " 2008-07-01 17:20:15 -07:00
git-fsck.txt manpages: italicize nongit command names (if they are in teletype font) 2008-07-05 11:24:40 -07:00
git-gc.txt manpages: italicize git command names (which were in teletype font) 2008-07-05 11:24:40 -07:00
git-get-tar-commit-id.txt manpages: italicize git command names (which were in teletype font) 2008-07-05 11:24:40 -07:00
git-grep.txt manpages: italicize git command names (which were in teletype font) 2008-07-05 11:24:40 -07:00
git-gui.txt manpages: use teletype font for sample command lines 2008-07-05 11:24:40 -07:00
git-hash-object.txt Update my e-mail address 2008-08-01 23:21:44 -07:00
git-help.txt manpages: use teletype font for sample command lines 2008-07-05 11:24:40 -07:00
git-http-fetch.txt manpages: italicize git command names (which were in teletype font) 2008-07-05 11:24:40 -07:00
git-http-push.txt Documentation: be consistent about "git-" versus "git " 2008-07-01 17:20:15 -07:00
git-imap-send.txt manpages: italicize git command names (which were in teletype font) 2008-07-05 11:24:40 -07:00
git-index-pack.txt manpages: italicize git command names (which were in teletype font) 2008-07-05 11:24:40 -07:00
git-init-db.txt Documentation: be consistent about "git-" versus "git " 2008-07-01 17:20:15 -07:00
git-init.txt manpages: italicize git command names (which were in teletype font) 2008-07-05 11:24:40 -07:00
git-instaweb.txt manpages: italicize git command names (which were in teletype font) 2008-07-05 11:24:40 -07:00
git-log.txt Make the DESCRIPTION match <x>... items in the SYNOPSIS 2008-07-30 21:42:55 -07:00
git-lost-found.txt Documentation: be consistent about "git-" versus "git " 2008-07-01 17:20:15 -07:00
git-ls-files.txt Documentation: clarify what is shown in "git-ls-files -s" output 2008-07-28 23:02:11 -07:00
git-ls-remote.txt Update my e-mail address 2008-08-01 23:21:44 -07:00
git-ls-tree.txt Update my e-mail address 2008-08-01 23:21:44 -07:00
git-mailinfo.txt Update my e-mail address 2008-08-01 23:21:44 -07:00
git-mailsplit.txt Update my e-mail address 2008-08-01 23:21:44 -07:00
git-merge-base.txt manpages: italicize git command names (which were in teletype font) 2008-07-05 11:24:40 -07:00
git-merge-file.txt manpages: italicize nongit command names (if they are in teletype font) 2008-07-05 11:24:40 -07:00
git-merge-index.txt manpages: italicize nongit command names (if they are in teletype font) 2008-07-05 11:24:40 -07:00
git-merge-one-file.txt Update my e-mail address 2008-08-01 23:21:44 -07:00
git-merge-tree.txt Documentation: be consistent about "git-" versus "git " 2008-07-01 17:20:15 -07:00
git-merge.txt Update my e-mail address 2008-08-01 23:21:44 -07:00
git-mergetool.txt Documentation: typos / spelling fixes 2008-08-05 21:21:18 -07:00
git-mktag.txt Documentation: be consistent about "git-" versus "git " 2008-07-01 17:20:15 -07:00
git-mktree.txt Update my e-mail address 2008-08-01 23:21:44 -07:00
git-mv.txt Documentation: be consistent about "git-" versus "git " 2008-07-01 17:20:15 -07:00
git-name-rev.txt Fix example in git-name-rev documentation 2008-08-30 13:23:01 -07:00
git-pack-objects.txt manpages: italicize git command names (which were in teletype font) 2008-07-05 11:24:40 -07:00
git-pack-redundant.txt manpages: italicize git command names (which were in teletype font) 2008-07-05 11:24:40 -07:00
git-pack-refs.txt Documentation: be consistent about "git-" versus "git " 2008-07-01 17:20:15 -07:00
git-parse-remote.txt manpages: italicize git command names (which were in teletype font) 2008-07-05 11:24:40 -07:00
git-patch-id.txt manpages: italicize git command names (which were in teletype font) 2008-07-05 11:24:40 -07:00
git-peek-remote.txt Update my e-mail address 2008-08-01 23:21:44 -07:00
git-prune-packed.txt Documentation: be consistent about "git-" versus "git " 2008-07-01 17:20:15 -07:00
git-prune.txt manpages: italicize git command names (which were in teletype font) 2008-07-05 11:24:40 -07:00
git-pull.txt Update my e-mail address 2008-08-01 23:21:44 -07:00
git-push.txt Merge branch 'maint' 2008-08-09 01:40:08 -07:00
git-quiltimport.txt Documentation: be consistent about "git-" versus "git " 2008-07-01 17:20:15 -07:00
git-read-tree.txt checkout: do not lose staged removal 2008-09-09 22:55:22 -07:00
git-rebase.txt Update my e-mail address 2008-08-01 23:21:44 -07:00
git-receive-pack.txt manpages: italicize git command names (which were in teletype font) 2008-07-05 11:24:40 -07:00
git-reflog.txt Update my e-mail address 2008-08-01 23:21:44 -07:00
git-relink.txt Documentation: be consistent about "git-" versus "git " 2008-07-01 17:20:15 -07:00
git-remote.txt manpages: italicize command names in synopses 2008-07-05 11:24:39 -07:00
git-repack.txt manpages: italicize git command names (which were in teletype font) 2008-07-05 11:24:40 -07:00
git-repo-config.txt Documentation: be consistent about "git-" versus "git " 2008-07-01 17:20:15 -07:00
git-request-pull.txt Update my e-mail address 2008-08-01 23:21:44 -07:00
git-rerere.txt Merge branch 'maint' 2008-08-09 01:40:08 -07:00
git-reset.txt Update my e-mail address 2008-08-01 23:21:44 -07:00
git-rev-list.txt manpages: italicize git command names (which were in teletype font) 2008-07-05 11:24:40 -07:00
git-rev-parse.txt Update my e-mail address 2008-08-01 23:21:44 -07:00
git-revert.txt Add hints to revert documentation about other ways to undo changes 2008-08-20 16:04:45 -07:00
git-rm.txt builtin-rm: Add a --force flag 2008-08-08 18:27:19 -07:00
git-send-email.txt Document sendemail.envelopesender configuration 2008-08-31 16:32:07 -07:00
git-send-pack.txt manpages: italicize git command names (which were in teletype font) 2008-07-05 11:24:40 -07:00
git-sh-setup.txt manpages: italicize git command names (which were in teletype font) 2008-07-05 11:24:40 -07:00
git-shell.txt manpages: italicize git command names (which were in teletype font) 2008-07-05 11:24:40 -07:00
git-shortlog.txt manpages: italicize git command names (which were in teletype font) 2008-07-05 11:24:40 -07:00
git-show-branch.txt Update my e-mail address 2008-08-01 23:21:44 -07:00
git-show-index.txt manpages: italicize git command names (which were in teletype font) 2008-07-05 11:24:40 -07:00
git-show-ref.txt Make the DESCRIPTION match <x>... items in the SYNOPSIS 2008-07-30 21:42:55 -07:00
git-show.txt Update my e-mail address 2008-08-01 23:21:44 -07:00
git-stash.txt Documentation: minor cleanup in a use case in 'git stash' manual 2008-09-01 22:02:11 -07:00
git-status.txt Update my e-mail address 2008-08-01 23:21:44 -07:00
git-stripspace.txt Documentation: be consistent about "git-" versus "git " 2008-07-01 17:20:15 -07:00
git-submodule.txt Make the DESCRIPTION match <x>... items in the SYNOPSIS 2008-07-30 21:42:55 -07:00
git-svn.txt git-svn: add ability to specify --commit-url for dcommit 2008-08-08 13:16:47 -07:00
git-symbolic-ref.txt Update my e-mail address 2008-08-01 23:21:44 -07:00
git-tag.txt Update my e-mail address 2008-08-01 23:21:44 -07:00
git-tar-tree.txt manpages: italicize git command names (which were in teletype font) 2008-07-05 11:24:40 -07:00
git-tools.txt Remove outdated references to cogito in documentation 2007-10-29 12:53:50 -07:00
git-unpack-file.txt Documentation: be consistent about "git-" versus "git " 2008-07-01 17:20:15 -07:00
git-unpack-objects.txt Documentation formatting and cleanup 2008-07-01 17:20:16 -07:00
git-update-index.txt Make use of stat.ctime configurable 2008-07-28 23:26:25 -07:00
git-update-ref.txt Documentation: be consistent about "git-" versus "git " 2008-07-01 17:20:15 -07:00
git-update-server-info.txt Update my e-mail address 2008-08-01 23:21:44 -07:00
git-upload-archive.txt manpages: italicize git command names (which were in teletype font) 2008-07-05 11:24:40 -07:00
git-upload-pack.txt manpages: italicize git command names (which were in teletype font) 2008-07-05 11:24:40 -07:00
git-var.txt Fix passwd(5) ref and reflect that commit doens't use commit-tree 2008-09-03 14:51:19 -07:00
git-verify-pack.txt Update my e-mail address 2008-08-01 23:21:44 -07:00
git-verify-tag.txt Make the DESCRIPTION match <x>... items in the SYNOPSIS 2008-07-30 21:42:55 -07:00
git-web--browse.txt manpages: italicize git command names (which were in teletype font) 2008-07-05 11:24:40 -07:00
git-whatchanged.txt Update my e-mail address 2008-08-01 23:21:44 -07:00
git-write-tree.txt manpages: italicize git command names (which were in teletype font) 2008-07-05 11:24:40 -07:00
git.txt Documentation: clarify pager configuration 2008-08-24 12:04:14 -07:00
gitattributes.txt Document clarification: gitmodules, gitattributes 2008-08-31 16:31:58 -07:00
gitcli.txt gitcli: Document meaning of --cached and --index 2008-07-01 17:29:38 -07:00
gitcore-tutorial.txt Adjust for the new way of enabling the default post-update hook 2008-08-11 17:07:17 -07:00
gitcvs-migration.txt Merge branch 'qq/maint' 2008-07-05 18:33:16 -07:00
gitdiffcore.txt manpages: italicize nongit command names (if they are in teletype font) 2008-07-05 11:24:40 -07:00
gitglossary.txt Documentation: fix broken "linkgit" links 2008-07-08 13:02:11 -07:00
githooks.txt manpages: italicize git command names (which were in teletype font) 2008-07-05 11:24:40 -07:00
gitignore.txt Documentation: How to ignore local changes in tracked files 2008-07-19 11:17:43 -07:00
gitk.txt Document gitk --argscmd flag. 2008-08-29 00:14:29 -07:00
gitmodules.txt Document clarification: gitmodules, gitattributes 2008-08-31 16:31:58 -07:00
gitrepository-layout.txt manpages: italicize git command names (which were in teletype font) 2008-07-05 11:24:40 -07:00
gittutorial-2.txt manpages: italicize git command names (which were in teletype font) 2008-07-05 11:24:40 -07:00
gittutorial.txt tutorial: gentler illustration of Alice/Bob workflow using gitk 2008-08-29 00:14:30 -07:00
glossary-content.txt glossary: improve a few links 2008-06-01 22:26:37 -07:00
howto-index.sh
i18n.txt Fix passwd(5) ref and reflect that commit doens't use commit-tree 2008-09-03 14:51:19 -07:00
install-doc-quick.sh install-doc-quick - use git --exec-path to find git-sh-setup 2008-07-08 16:36:03 -07:00
install-webdoc.sh Start preparing the API documents. 2007-12-14 22:29:38 -08:00
Makefile documentation: move git(7) to git(1) 2008-06-06 11:18:28 -07:00
manpage-1.72.xsl Make man page building quiet when DOCBOOK_XSL_172 is defined 2008-03-15 00:05:18 -07:00
merge-config.txt Documentation: typos / spelling fixes 2008-08-05 21:21:18 -07:00
merge-options.txt manpages: italicize git command names (which were in teletype font) 2008-07-05 11:24:40 -07:00
merge-strategies.txt Documentation/git-merge: document subtree strategy. 2008-03-19 01:43:02 -07:00
pretty-formats.txt pretty=format: respect date format options 2008-08-29 00:14:29 -07:00
pretty-options.txt log/show/whatchanged: introduce format.pretty configuration 2008-03-05 12:06:09 -08:00
pull-fetch-param.txt Merge branch 'maint' 2008-08-09 01:40:08 -07:00
RelNotes-1.5.0.1.txt
RelNotes-1.5.0.2.txt
RelNotes-1.5.0.3.txt
RelNotes-1.5.0.4.txt
RelNotes-1.5.0.5.txt
RelNotes-1.5.0.6.txt
RelNotes-1.5.0.7.txt
RelNotes-1.5.0.txt
RelNotes-1.5.1.1.txt
RelNotes-1.5.1.2.txt
RelNotes-1.5.1.3.txt
RelNotes-1.5.1.4.txt
RelNotes-1.5.1.5.txt
RelNotes-1.5.1.6.txt
RelNotes-1.5.1.txt
RelNotes-1.5.2.1.txt
RelNotes-1.5.2.2.txt
RelNotes-1.5.2.3.txt
RelNotes-1.5.2.4.txt
RelNotes-1.5.2.5.txt
RelNotes-1.5.2.txt Documentation: typos / spelling fixes in older RelNotes 2008-08-05 11:38:11 -07:00
RelNotes-1.5.3.1.txt GIT 1.5.3.1: obsolete git-p4 in RPM spec file. 2007-09-03 01:28:37 -07:00
RelNotes-1.5.3.2.txt GIT 1.5.3.2 2007-09-19 03:11:28 -07:00
RelNotes-1.5.3.3.txt fix doc typos 2008-01-29 22:00:34 -08:00
RelNotes-1.5.3.4.txt GIT 1.5.3.4 2007-10-03 02:33:48 -07:00
RelNotes-1.5.3.5.txt RelNotes-1.5.3.5: fix another typo 2007-11-07 11:37:15 -08:00
RelNotes-1.5.3.6.txt GIT 1.5.3.6 2007-11-18 14:00:38 -08:00
RelNotes-1.5.3.7.txt GIT 1.5.3.7 2007-12-01 11:20:00 -08:00
RelNotes-1.5.3.8.txt GIT 1.5.3.8 2008-01-07 22:41:43 -08:00
RelNotes-1.5.3.txt Documentation: typos / spelling fixes in older RelNotes 2008-08-05 11:38:11 -07:00
RelNotes-1.5.4.1.txt GIT 1.5.4.2 2008-02-17 00:20:38 -08:00
RelNotes-1.5.4.2.txt GIT 1.5.4.2 2008-02-17 00:20:38 -08:00
RelNotes-1.5.4.3.txt GIT 1.5.4.3 2008-02-23 11:31:04 -08:00
RelNotes-1.5.4.4.txt Documentation: typos / spelling fixes in older RelNotes 2008-08-05 11:38:11 -07:00
RelNotes-1.5.4.5.txt Documentation: typos / spelling fixes in older RelNotes 2008-08-05 11:38:11 -07:00
RelNotes-1.5.4.6.txt GIT 1.5.4.6 2008-06-26 17:11:21 -07:00
RelNotes-1.5.4.txt GIT 1.5.4 2008-02-01 19:10:10 -08:00
RelNotes-1.5.5.1.txt GIT 1.5.5.1 2008-04-20 11:36:53 -07:00
RelNotes-1.5.5.2.txt Release Notes for 1.5.5.2 2008-05-25 21:11:24 -07:00
RelNotes-1.5.5.3.txt GIT 1.5.5.3 2008-05-27 22:32:47 -07:00
RelNotes-1.5.5.4.txt GIT 1.5.5.4 2008-06-07 11:45:48 -07:00
RelNotes-1.5.5.5.txt GIT 1.5.5.5 2008-06-26 17:59:51 -07:00
RelNotes-1.5.5.txt GIT 1.5.5 2008-04-07 21:57:43 -07:00
RelNotes-1.5.6.1.txt GIT 1.5.6.1 2008-06-25 17:13:48 -07:00
RelNotes-1.5.6.2.txt GIT 1.5.6.2 2008-07-04 01:38:41 -07:00
RelNotes-1.5.6.3.txt GIT 1.5.6.3 2008-07-13 15:23:43 -07:00
RelNotes-1.5.6.4.txt GIT 1.5.6.4 2008-07-19 10:58:01 -07:00
RelNotes-1.5.6.5.txt GIT 1.5.6.5 2008-08-06 13:40:53 -07:00
RelNotes-1.5.6.txt GIT 1.5.6 2008-06-18 13:09:43 -07:00
RelNotes-1.6.0.1.txt GIT 1.6.0.1 2008-08-24 14:47:24 -07:00
RelNotes-1.6.0.2.txt Update draft release notes for 1.6.0.2 2008-09-06 16:18:38 -07:00
RelNotes-1.6.0.txt GIT 1.6.0 2008-08-17 11:42:10 -07:00
rev-list-options.txt Merge branch 'maint' 2008-08-12 22:46:22 -07:00
SubmittingPatches Rename .git/rebase to .git/rebase-apply 2008-07-21 18:51:47 -07:00
urls-remotes.txt manpages: italicize git command names (which were in teletype font) 2008-07-05 11:24:40 -07:00
urls.txt Add support for url aliases in config files 2008-02-24 20:05:29 -08:00
user-manual.conf Documentation: rename gitlink macro to linkgit 2008-01-06 18:41:44 -08:00
user-manual.txt Adjust for the new way of enabling the default post-update hook 2008-08-11 17:07:17 -07:00