Merge branch 'mm/maint-hint-failed-merge' into maint
* 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.
This commit is contained in:
commit
24807f9d5b
@ -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"
|
||||||
@ -170,7 +171,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 */
|
||||||
@ -182,6 +183,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
Block a user