From 0fe802d4808aef3f0366c7029318f872c86ccca2 Mon Sep 17 00:00:00 2001 From: Jeff King Date: Mon, 8 Nov 2010 23:58:20 -0500 Subject: [PATCH] docs: give more hints about how "add -e" works The previous text was not exactly accurate; it is OK to change space and minus lines, but only in certain ways. This patch takes a whole new approach, which is to describe the sorts of conceptual operations you might want to perform. It also includes a healthy dose of warnings about how things can go wrong. Since the size of the text is getting quite long, it also splits this out into an "editing patches" section. This makes more sense with the current structure, anyway, which already splits out the interactive mode description. Signed-off-by: Jeff King Signed-off-by: Junio C Hamano --- Documentation/git-add.txt | 104 ++++++++++++++++++++++++++++---------- 1 file changed, 76 insertions(+), 28 deletions(-) diff --git a/Documentation/git-add.txt b/Documentation/git-add.txt index 40deb03c5d..54aaaeb41b 100644 --- a/Documentation/git-add.txt +++ b/Documentation/git-add.txt @@ -93,34 +93,10 @@ See ``Interactive mode'' for details. and apply the patch to the index. + The intent of this option is to pick and choose lines of the patch to -apply, or even to modify the contents of lines to be staged. There are -three line types in a patch: addition lines (beginning with a plus), -removal lines (beginning with a minus), and context lines (beginning -with a space). In general, it should be safe to: -+ --- -* remove addition lines (don't stage the line) -* modify the content of any addition lines (stage modified contents) -* add new addition lines (stage the new line) -* convert context lines to removal lines (stage removal of line) -* convert removal lines to context lines (don't stage removal) --- -+ -Similarly, your patch will likely not apply if you: -+ --- -* add context or removal lines -* delete removal or context lines -* modify the contents of context or removal lines --- -+ -NOTE: In the first list above, the results given for each action are -with respect to that patch line only. Conceptual changes like -modification of a line in the original file are actually represented by -removal of the old line followed by addition of the new line. Deleting -only the addition line of this pair but leaving the removal line would -therefore convert the modification into a deletion. In other words, use -this feature with caution, as it is easy to stage unintended changes. +apply, or even to modify the contents of lines to be staged. This can be +quicker and more flexible than using the interactive hunk selector. +However, it is easy to confuse oneself and create a patch that does not +apply to the index. See EDITING PATCHES below. -u:: --update:: @@ -321,6 +297,78 @@ diff:: This lets you review what will be committed (i.e. between HEAD and index). + +EDITING PATCHES +--------------- + +Invoking `git add -e` or selecting `e` from the interactive hunk +selector will open a patch in your editor; after the editor exits, the +result is applied to the index. You are free to make arbitrary changes +to the patch, but note that some changes may have confusing results, or +even result in a patch that cannot be applied. If you want to abort the +operation entirely (i.e., stage nothing new in the index), simply delete +all lines of the patch. The list below describes some common things you +may see in a patch, and which editing operations make sense on them. + +-- +added content:: + +Added content is represented by lines beginning with "{plus}". You can +prevent staging any addition lines by deleting them. + +removed content:: + +Removed content is represented by lines beginning with "-". You can +prevent staging their removal by converting the "-" to a " " (space). + +modified content:: + +Modified content is represented by "-" lines (removing the old content) +followed by "{plus}" lines (adding the replacement content). You can +prevent staging the modification by converting "-" lines to " ", and +removing "{plus}" lines. Beware that modifying only half of the pair is +likely to introduce confusing changes to the index. +-- + +There are also more complex operations that can be performed. But beware +that because the patch is applied only to the index and not the working +tree, the working tree will appear to "undo" the change in the index. +For example, introducing a a new line into the index that is in neither +the HEAD nor the working tree will stage the new line for commit, but +the line will appear to be reverted in the working tree. + +Avoid using these constructs, or do so with extreme caution. + +-- +removing untouched content:: + +Content which does not differ between the index and working tree may be +shown on context lines, beginning with a " " (space). You can stage +context lines for removal by converting the space to a "-". The +resulting working tree file will appear to re-add the content. + +modifying existing content:: + +One can also modify context lines by staging them for removal (by +converting " " to "-") and adding a "{plus}" line with the new content. +Similarly, one can modify "{plus}" lines for existing additions or +modifications. In all cases, the new modification will appear reverted +in the working tree. + +new content:: + +You may also add new content that does not exist in the patch; simply +add new lines, each starting with "{plus}". The addition will appear +reverted in the working tree. +-- + +There are also several operations which should be avoided entirely, as +they will make the patch impossible to apply: + +* adding context (" ") or removal ("-") lines +* deleting context or removal lines +* modifying the contents of context or removal lines + SEE ALSO -------- linkgit:git-status[1] -- 2.32.0.93.g670b81a890