git-rm doc: Describe how to sync index & work tree
Newcomers to git that want to remove from the index only the files that have disappeared from the working tree will probably look for a way to do that in the documentation for 'git rm'. Therefore, describe how that can be done (even though it involves other commands than 'git rm'). Based on a suggestion by Junio, but re-arranged and rewritten to better fit into the style of command reference. While at it, change a single occurrence of "work tree" to "working tree" for consistency. Signed-off-by: Björn Gustavsson <bgustavsson@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
		 Björn Gustavsson
					Björn Gustavsson
				
			
				
					committed by
					
						 Junio C Hamano
						Junio C Hamano
					
				
			
			
				
	
			
			
			 Junio C Hamano
						Junio C Hamano
					
				
			
						parent
						
							441947f6d7
						
					
				
				
					commit
					47b7012024
				
			| @ -13,7 +13,7 @@ DESCRIPTION | ||||
| ----------- | ||||
| Remove files from the index, or from the working tree and the index. | ||||
| `git rm` will not remove a file from just your working directory. | ||||
| (There is no option to remove a file only from the work tree | ||||
| (There is no option to remove a file only from the working tree | ||||
| and yet keep it in the index; use `/bin/rm` if you want to do that.) | ||||
| The files being removed have to be identical to the tip of the branch, | ||||
| and no updates to their contents can be staged in the index, | ||||
| @ -81,6 +81,58 @@ two directories `d` and `d2`, there is a difference between | ||||
| using `git rm \'d\*\'` and `git rm \'d/\*\'`, as the former will | ||||
| also remove all of directory `d2`. | ||||
|  | ||||
| REMOVING FILES THAT HAVE DISAPPEARED FROM THE FILESYSTEM | ||||
| -------------------------------------------------------- | ||||
| There is no option for `git rm` to remove from the index only | ||||
| the paths that have disappeared from the filesystem. However, | ||||
| depending on the use case, there are several ways that can be | ||||
| done. | ||||
|  | ||||
| Using "git commit -a" | ||||
| ~~~~~~~~~~~~~~~~~~~~~ | ||||
| If you intend that your next commit should record all modifications | ||||
| of tracked files in the working tree and record all removals of | ||||
| files that have been removed from the working tree with `rm` | ||||
| (as opposed to `git rm`), use `git commit -a`, as it will | ||||
| automatically notice and record all removals.  You can also have a | ||||
| similar effect without committing by using `git add -u`. | ||||
|  | ||||
| Using "git add -A" | ||||
| ~~~~~~~~~~~~~~~~~~ | ||||
| When accepting a new code drop for a vendor branch, you probably | ||||
| want to record both the removal of paths and additions of new paths | ||||
| as well as modifications of existing paths. | ||||
|  | ||||
| Typically you would first remove all tracked files from the working | ||||
| tree using this command: | ||||
|  | ||||
| ---------------- | ||||
| git ls-files -z | xargs -0 rm -f | ||||
| ---------------- | ||||
|  | ||||
| and then "untar" the new code in the working tree. Alternately | ||||
| you could "rsync" the changes into the working tree. | ||||
|  | ||||
| After that, the easiest way to record all removals, additions, and | ||||
| modifications in the working tree is: | ||||
|  | ||||
| ---------------- | ||||
| git add -A | ||||
| ---------------- | ||||
|  | ||||
| See linkgit:git-add[1]. | ||||
|  | ||||
| Other ways | ||||
| ~~~~~~~~~~ | ||||
| If all you really want to do is to remove from the index the files | ||||
| that are no longer present in the working tree (perhaps because | ||||
| your working tree is dirty so that you cannot use `git commit -a`), | ||||
| use the following command: | ||||
|  | ||||
| ---------------- | ||||
| git diff --name-only --diff-filter=D -z | xargs -0 git rm --cached | ||||
| ---------------- | ||||
|  | ||||
| EXAMPLES | ||||
| -------- | ||||
| git rm Documentation/\\*.txt:: | ||||
|  | ||||
		Reference in New Issue
	
	Block a user