Merge branch 'mm/maint-hint-failed-merge'
* mm/maint-hint-failed-merge: user-manual: Document that "git merge" doesn't like uncommited changes. merge-recursive: point the user to commit when file would be overwritten.maint
						commit
						444e10df2a
					
				|  | @ -126,6 +126,10 @@ advice.*:: | ||||||
| 		Directions on how to stage/unstage/add shown in the | 		Directions on how to stage/unstage/add shown in the | ||||||
| 		output of linkgit:git-status[1] and the template shown | 		output of linkgit:git-status[1] and the template shown | ||||||
| 		when writing commit messages. Default: true. | 		when writing commit messages. Default: true. | ||||||
|  | 	commitBeforeMerge:: | ||||||
|  | 		Advice shown when linkgit:git-merge[1] refuses to | ||||||
|  | 		merge to avoid overwritting local changes. | ||||||
|  | 		Default: true. | ||||||
| -- | -- | ||||||
|  |  | ||||||
| core.fileMode:: | core.fileMode:: | ||||||
|  |  | ||||||
|  | @ -1183,7 +1183,23 @@ $ git merge branchname | ||||||
| ------------------------------------------------- | ------------------------------------------------- | ||||||
|  |  | ||||||
| merges the development in the branch "branchname" into the current | merges the development in the branch "branchname" into the current | ||||||
| branch.  If there are conflicts--for example, if the same file is | branch. | ||||||
|  |  | ||||||
|  | A merge is made by combining the changes made in "branchname" and the | ||||||
|  | changes made up to the latest commit in your current branch since | ||||||
|  | their histories forked. The work tree is overwritten by the result of | ||||||
|  | the merge when this combining is done cleanly, or overwritten by a | ||||||
|  | half-merged results when this combining results in conflicts. | ||||||
|  | Therefore, if you have uncommitted changes touching the same files as | ||||||
|  | the ones impacted by the merge, Git will refuse to proceed. Most of | ||||||
|  | the time, you will want to commit your changes before you can merge, | ||||||
|  | and if you don't, then linkgit:git-stash[1] can take these changes | ||||||
|  | away while you're doing the merge, and reapply them afterwards. | ||||||
|  |  | ||||||
|  | If the changes are independant enough, Git will automatically complete | ||||||
|  | the merge and commit the result (or reuse an existing commit in case | ||||||
|  | of <<fast-forwards,fast-forward>>, see below). On the other hand, | ||||||
|  | if there are conflicts--for example, if the same file is | ||||||
| modified in two different ways in the remote branch and the local | modified in two different ways in the remote branch and the local | ||||||
| branch--then you are warned; the output may look something like this: | branch--then you are warned; the output may look something like this: | ||||||
|  |  | ||||||
|  | @ -1679,7 +1695,7 @@ Sharing development with others | ||||||
| Getting updates with git pull | Getting updates with git pull | ||||||
| ----------------------------- | ----------------------------- | ||||||
|  |  | ||||||
| After you clone a repository and make a few changes of your own, you | After you clone a repository and commit a few changes of your own, you | ||||||
| may wish to check the original repository for updates and merge them | may wish to check the original repository for updates and merge them | ||||||
| into your own work. | into your own work. | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										2
									
								
								advice.c
								
								
								
								
							
							
						
						
									
										2
									
								
								advice.c
								
								
								
								
							|  | @ -2,6 +2,7 @@ | ||||||
|  |  | ||||||
| int advice_push_nonfastforward = 1; | int advice_push_nonfastforward = 1; | ||||||
| int advice_status_hints = 1; | int advice_status_hints = 1; | ||||||
|  | int advice_commit_before_merge = 1; | ||||||
|  |  | ||||||
| static struct { | static struct { | ||||||
| 	const char *name; | 	const char *name; | ||||||
|  | @ -9,6 +10,7 @@ static struct { | ||||||
| } advice_config[] = { | } advice_config[] = { | ||||||
| 	{ "pushnonfastforward", &advice_push_nonfastforward }, | 	{ "pushnonfastforward", &advice_push_nonfastforward }, | ||||||
| 	{ "statushints", &advice_status_hints }, | 	{ "statushints", &advice_status_hints }, | ||||||
|  | 	{ "commitbeforemerge", &advice_commit_before_merge }, | ||||||
| }; | }; | ||||||
|  |  | ||||||
| int git_default_advice_config(const char *var, const char *value) | int git_default_advice_config(const char *var, const char *value) | ||||||
|  |  | ||||||
							
								
								
									
										1
									
								
								advice.h
								
								
								
								
							
							
						
						
									
										1
									
								
								advice.h
								
								
								
								
							|  | @ -3,6 +3,7 @@ | ||||||
|  |  | ||||||
| extern int advice_push_nonfastforward; | extern int advice_push_nonfastforward; | ||||||
| extern int advice_status_hints; | extern int advice_status_hints; | ||||||
|  | extern int advice_commit_before_merge; | ||||||
|  |  | ||||||
| int git_default_advice_config(const char *var, const char *value); | int git_default_advice_config(const char *var, const char *value); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | @ -3,6 +3,7 @@ | ||||||
|  * Fredrik Kuivinen. |  * Fredrik Kuivinen. | ||||||
|  * The thieves were Alex Riesen and Johannes Schindelin, in June/July 2006 |  * The thieves were Alex Riesen and Johannes Schindelin, in June/July 2006 | ||||||
|  */ |  */ | ||||||
|  | #include "advice.h" | ||||||
| #include "cache.h" | #include "cache.h" | ||||||
| #include "cache-tree.h" | #include "cache-tree.h" | ||||||
| #include "commit.h" | #include "commit.h" | ||||||
|  | @ -171,7 +172,7 @@ static int git_merge_trees(int index_only, | ||||||
| 	int rc; | 	int rc; | ||||||
| 	struct tree_desc t[3]; | 	struct tree_desc t[3]; | ||||||
| 	struct unpack_trees_options opts; | 	struct unpack_trees_options opts; | ||||||
| 	static const struct unpack_trees_error_msgs msgs = { | 	struct unpack_trees_error_msgs msgs = { | ||||||
| 		/* would_overwrite */ | 		/* would_overwrite */ | ||||||
| 		"Your local changes to '%s' would be overwritten by merge.  Aborting.", | 		"Your local changes to '%s' would be overwritten by merge.  Aborting.", | ||||||
| 		/* not_uptodate_file */ | 		/* not_uptodate_file */ | ||||||
|  | @ -183,6 +184,11 @@ static int git_merge_trees(int index_only, | ||||||
| 		/* bind_overlap -- will not happen here */ | 		/* bind_overlap -- will not happen here */ | ||||||
| 		NULL, | 		NULL, | ||||||
| 	}; | 	}; | ||||||
|  | 	if (advice_commit_before_merge) { | ||||||
|  | 		msgs.would_overwrite = msgs.not_uptodate_file = | ||||||
|  | 			"Your local changes to '%s' would be overwritten by merge.  Aborting.\n" | ||||||
|  | 			"Please, commit your changes or stash them before you can merge."; | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	memset(&opts, 0, sizeof(opts)); | 	memset(&opts, 0, sizeof(opts)); | ||||||
| 	if (index_only) | 	if (index_only) | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Junio C Hamano
						Junio C Hamano