{"thread":{"id":"42100","subject":"[PATCH 2/4] pull: pass --allow-unrelated-histories to \"git merge\"","startedAt":"2016-04-21T19:24:56Z","lastAt":"2016-04-21T22:29:08Z","messageCount":8,"participants":["Junio C Hamano","Stefan Beller"],"isPatch":true,"patchVersion":1,"patchTotal":4},"messages":[{"id":"284068","messageId":"20160421192500.23563-1-gitster@pobox.com","threadId":"42100","inReplyTo":null,"subject":"[PATCH 0/4] Loosening \"two project merge\" safety","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2016-04-21T19:24:56Z","receivedAt":"2016-04-21T19:24:56Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Yaroslav Halchenko gave a vague \"forcing 'git merge' users to always\ngive --allow-unrelated-histories option when they create crap/insane\nmerges are not nice\", which I couldn't guess the validity due to\nlack of concrete use case.  Just in case it is substantiated, here\nis a series to selectively and safely loosen the safety for specific\nuse cases and users.\n\nJunio C Hamano (4):\n  t3033: avoid 'ambiguous refs' warning\n  pull: pass --allow-unrelated-histories to \"git merge\"\n  merge: GIT_MERGE_ALLOW_UNRELATED_HISTORIES environment\n  merge: introduce merge.allowUnrelatedhistories configuration option\n\n Documentation/git-merge.txt     | 14 +-------------\n Documentation/git.txt           |  7 +++++++\n Documentation/merge-config.txt  |  7 +++++++\n Documentation/merge-options.txt |  8 ++++++++\n builtin/merge.c                 |  6 ++++++\n builtin/pull.c                  | 11 +++++++++++\n t/t3033-merge-toplevel.sh       | 31 ++++++++++++++++++++++++++++++-\n t/t5521-pull-options.sh         | 28 ++++++++++++++++++++++++++++\n 8 files changed, 98 insertions(+), 14 deletions(-)\n\n-- \n2.8.1-422-g6d9b748\n"},{"id":"284070","messageId":"20160421192500.23563-2-gitster@pobox.com","threadId":"42100","inReplyTo":"20160421192500.23563-1-gitster@pobox.com","subject":"[PATCH 1/4] t3033: avoid 'ambiguous refs' warning","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2016-04-21T19:24:57Z","receivedAt":"2016-04-21T19:24:57Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Because \"test_commit five\" creates a commit and point it with a tag\n'five', doing so on a branch whose name is 'five' will later result\nin an 'ambiguous refs' warning.  Even though it is harmless because\nall the later references are for the tag, there is no reason for the\nbranch to be called 'five'.  Give it a name that describes its\npurpose more clearly, i.e. \"newroot\".\n\nSigned-off-by: Junio C Hamano <gitster@pobox.com>\n---\n t/t3033-merge-toplevel.sh | 2 +-\n 1 file changed, 1 insertion(+), 1 deletion(-)\n\ndiff --git a/t/t3033-merge-toplevel.sh b/t/t3033-merge-toplevel.sh\nindex c1379b0..d314599 100755\n--- a/t/t3033-merge-toplevel.sh\n+++ b/t/t3033-merge-toplevel.sh\n@@ -19,7 +19,7 @@ test_expect_success setup '\n \ttest_commit three &&\n \tgit checkout right &&\n \ttest_commit four &&\n-\tgit checkout --orphan five &&\n+\tgit checkout --orphan newroot &&\n \ttest_commit five &&\n \tgit checkout master\n '\n-- \n2.8.1-422-g6d9b748\n"},{"id":"284067","messageId":"20160421192500.23563-3-gitster@pobox.com","threadId":"42100","inReplyTo":"20160421192500.23563-1-gitster@pobox.com","subject":"[PATCH 2/4] pull: pass --allow-unrelated-histories to \"git merge\"","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2016-04-21T19:24:58Z","receivedAt":"2016-04-21T19:24:58Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"An earlier commit said:\n\n    We could add the same option to \"git pull\" and have it passed\n    through to underlying \"git merge\".  I do not have a fundamental\n    opposition against such a feature, but this commit does not do\n    so and instead leaves it as low-hanging fruit for others,\n    because such a \"two project merge\" would be done after fetching\n    the other project into some location in the working tree of an\n    existing project and making sure how well they fit together, it\n    is sufficient to allow a local merge without such an option\n    pass-through from \"git pull\" to \"git merge\".\n\nPrepare a patch to make it a reality, just in case it is needed.\n\nSigned-off-by: Junio C Hamano <gitster@pobox.com>\n---\n Documentation/git-merge.txt     | 14 +-------------\n Documentation/merge-options.txt |  8 ++++++++\n builtin/pull.c                  |  6 ++++++\n t/t5521-pull-options.sh         | 21 +++++++++++++++++++++\n 4 files changed, 36 insertions(+), 13 deletions(-)\n\ndiff --git a/Documentation/git-merge.txt b/Documentation/git-merge.txt\nindex 689aa4c..b758d55 100644\n--- a/Documentation/git-merge.txt\n+++ b/Documentation/git-merge.txt\n@@ -11,6 +11,7 @@ SYNOPSIS\n [verse]\n 'git merge' [-n] [--stat] [--no-commit] [--squash] [--[no-]edit]\n \t[-s <strategy>] [-X <strategy-option>] [-S[<keyid>]]\n+\t[--[no-]allow-unrelated-histories]\n \t[--[no-]rerere-autoupdate] [-m <msg>] [<commit>...]\n 'git merge' <msg> HEAD <commit>...\n 'git merge' --abort\n@@ -98,19 +99,6 @@ commit or stash your changes before running 'git merge'.\n 'git merge --abort' is equivalent to 'git reset --merge' when\n `MERGE_HEAD` is present.\n \n---allow-unrelated-histories::\n-\tBy default, `git merge` command refuses to merge histories\n-\tthat do not share a common ancestor.  This option can be\n-\tused to override this safety when merging histories of two\n-\tprojects that started their lives independently.  As that is\n-\ta very rare occasion, no configuration variable to enable\n-\tthis by default exists and will not be added, and the list\n-\tof options at the top of this documentation does not mention\n-\tthis option.  Also `git pull` does not pass this option down\n-\tto `git merge` (instead, you `git fetch` first, examine what\n-\tyou will be merging and then `git merge` locally with this\n-\toption).\n-\n <commit>...::\n \tCommits, usually other branch heads, to merge into our branch.\n \tSpecifying more than one commit will create a merge with\ndiff --git a/Documentation/merge-options.txt b/Documentation/merge-options.txt\nindex f08e9b8..dfb43d0 100644\n--- a/Documentation/merge-options.txt\n+++ b/Documentation/merge-options.txt\n@@ -114,3 +114,11 @@ ifndef::git-pull[]\n \treporting.\n \n endif::git-pull[]\n+\n+--allow-unrelated-histories::\n+\tBy default, `git merge` command refuses to merge histories\n+\tthat do not share a common ancestor.  This option can be\n+\tused to override this safety when merging histories of two\n+\tprojects that started their lives independently. As that is\n+\ta very rare occasion, no configuration variable to enable\n+\tthis by default exists and will not be added.\ndiff --git a/builtin/pull.c b/builtin/pull.c\nindex 5145fc6..797932d 100644\n--- a/builtin/pull.c\n+++ b/builtin/pull.c\n@@ -86,6 +86,7 @@ static char *opt_verify_signatures;\n static struct argv_array opt_strategies = ARGV_ARRAY_INIT;\n static struct argv_array opt_strategy_opts = ARGV_ARRAY_INIT;\n static char *opt_gpg_sign;\n+static int opt_allow_unrelated_histories;\n \n /* Options passed to git-fetch */\n static char *opt_all;\n@@ -155,6 +156,9 @@ static struct option pull_options[] = {\n \tOPT_PASSTHRU('S', \"gpg-sign\", &opt_gpg_sign, N_(\"key-id\"),\n \t\tN_(\"GPG sign commit\"),\n \t\tPARSE_OPT_OPTARG),\n+\tOPT_SET_INT(0, \"allow-unrelated-histories\",\n+\t\t    &opt_allow_unrelated_histories,\n+\t\t    N_(\"allow merging unrelated histories\"), 1),\n \n \t/* Options passed to git-fetch */\n \tOPT_GROUP(N_(\"Options related to fetching\")),\n@@ -603,6 +607,8 @@ static int run_merge(void)\n \targv_array_pushv(&args, opt_strategy_opts.argv);\n \tif (opt_gpg_sign)\n \t\targv_array_push(&args, opt_gpg_sign);\n+\tif (opt_allow_unrelated_histories > 0)\n+\t\targv_array_push(&args, \"--allow-unrelated-histories\");\n \n \targv_array_push(&args, \"FETCH_HEAD\");\n \tret = run_command_v_opt(args.argv, RUN_GIT_CMD);\ndiff --git a/t/t5521-pull-options.sh b/t/t5521-pull-options.sh\nindex 18372ca..ded8f98 100755\n--- a/t/t5521-pull-options.sh\n+++ b/t/t5521-pull-options.sh\n@@ -144,4 +144,25 @@ test_expect_success 'git pull --all --dry-run' '\n \t)\n '\n \n+test_expect_success 'git pull --allow-unrelated-histories' '\n+\ttest_when_finished \"rm -fr src dst\" &&\n+\tgit init src &&\n+\t(\n+\t\tcd src &&\n+\t\ttest_commit one &&\n+\t\ttest_commit two\n+\t) &&\n+\tgit clone src dst &&\n+\t(\n+\t\tcd src &&\n+\t\tgit checkout --orphan side HEAD^ &&\n+\t\ttest_commit three\n+\t) &&\n+\t(\n+\t\tcd dst &&\n+\t\ttest_must_fail git pull ../src side &&\n+\t\tgit pull --allow-unrelated-histories ../src side\n+\t)\n+'\n+\n test_done\n-- \n2.8.1-422-g6d9b748\n"},{"id":"284071","messageId":"20160421192500.23563-4-gitster@pobox.com","threadId":"42100","inReplyTo":"20160421192500.23563-1-gitster@pobox.com","subject":"[PATCH 3/4] merge: GIT_MERGE_ALLOW_UNRELATED_HISTORIES environment","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2016-04-21T19:24:59Z","receivedAt":"2016-04-21T19:24:59Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"It is rumored that some scripts rely on being able to regularly\ncreate two project merges.  Instead of forcing them to pass the\noption --allow-unrelated-histories when they call \"git merge\", allow\nthem to set and export an environment at the beginning and forget\nabout it.\n\nThis will be less damaging than adding a configuration variable to\ndisable the safety, as contaminating the configuration file of users\nof such a script will allow any invocation of \"git merge\", not\nlimited to such a script, to go without the safety.\n\nSigned-off-by: Junio C Hamano <gitster@pobox.com>\n---\n Documentation/git.txt | 3 +++\n builtin/merge.c       | 3 +++\n builtin/pull.c        | 7 ++++++-\n 3 files changed, 12 insertions(+), 1 deletion(-)\n\ndiff --git a/Documentation/git.txt b/Documentation/git.txt\nindex 754dc80..5c9380d 100644\n--- a/Documentation/git.txt\n+++ b/Documentation/git.txt\n@@ -1138,6 +1138,9 @@ of clones and fetches.\n \t  - any external helpers are named by their protocol (e.g., use\n \t    `hg` to allow the `git-remote-hg` helper)\n \n+'GIT_MERGE_ALLOW_UNRELATED_HISTORIES'::\n+\tAllow \"git merge\" to merge unrelated histories by default.\n+\n \n Discussion[[Discussion]]\n ------------------------\ndiff --git a/builtin/merge.c b/builtin/merge.c\nindex e3db41b..4e8b1a1 100644\n--- a/builtin/merge.c\n+++ b/builtin/merge.c\n@@ -1191,6 +1191,9 @@ int cmd_merge(int argc, const char **argv, const char *prefix)\n \t\thead_commit = lookup_commit_or_die(head_sha1, \"HEAD\");\n \n \tgit_config(git_merge_config, NULL);\n+\tif (getenv(\"GIT_MERGE_ALLOW_UNRELATED_HISTORIES\"))\n+\t\tallow_unrelated_histories =\n+\t\t\tgit_env_bool(\"GIT_MERGE_ALLOW_UNRELATED_HISTORIES\", 0);\n \n \tif (branch_mergeoptions)\n \t\tparse_branch_merge_options(branch_mergeoptions);\ndiff --git a/builtin/pull.c b/builtin/pull.c\nindex 797932d..4e886a5 100644\n--- a/builtin/pull.c\n+++ b/builtin/pull.c\n@@ -86,7 +86,7 @@ static char *opt_verify_signatures;\n static struct argv_array opt_strategies = ARGV_ARRAY_INIT;\n static struct argv_array opt_strategy_opts = ARGV_ARRAY_INIT;\n static char *opt_gpg_sign;\n-static int opt_allow_unrelated_histories;\n+static int opt_allow_unrelated_histories = -1; /* unspecified */\n \n /* Options passed to git-fetch */\n static char *opt_all;\n@@ -159,6 +159,9 @@ static struct option pull_options[] = {\n \tOPT_SET_INT(0, \"allow-unrelated-histories\",\n \t\t    &opt_allow_unrelated_histories,\n \t\t    N_(\"allow merging unrelated histories\"), 1),\n+\tOPT_SET_INT(0, \"no-allow-unrelated-histories\",\n+\t\t    &opt_allow_unrelated_histories,\n+\t\t    N_(\"do not allow merging unrelated histories\"), 0),\n \n \t/* Options passed to git-fetch */\n \tOPT_GROUP(N_(\"Options related to fetching\")),\n@@ -609,6 +612,8 @@ static int run_merge(void)\n \t\targv_array_push(&args, opt_gpg_sign);\n \tif (opt_allow_unrelated_histories > 0)\n \t\targv_array_push(&args, \"--allow-unrelated-histories\");\n+\telse if (!opt_allow_unrelated_histories)\n+\t\targv_array_push(&args, \"--no-allow-unrelated-histories\");\n \n \targv_array_push(&args, \"FETCH_HEAD\");\n \tret = run_command_v_opt(args.argv, RUN_GIT_CMD);\n-- \n2.8.1-422-g6d9b748\n"},{"id":"284069","messageId":"20160421192500.23563-5-gitster@pobox.com","threadId":"42100","inReplyTo":"20160421192500.23563-1-gitster@pobox.com","subject":"[PATCH 4/4] merge: introduce merge.allowUnrelatedhistories configuration option","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2016-04-21T19:25:00Z","receivedAt":"2016-04-21T19:25:00Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"It was rumored that in an unspecified workflow it is common to\ncreate what Kernel folks call \"crazy\" and \"insane\" merges of two\nunrelated histories, and having to give --allow-unrelated-histories\noption every time is cumbersome.\n\nJust in case the rumor will substanticated with a proper rationale\nin the future, prepare a change to allow disabling the safety by\ndefault.\n\nSigned-off-by: Junio C Hamano <gitster@pobox.com>\n---\n Documentation/git.txt          |  4 ++++\n Documentation/merge-config.txt |  7 +++++++\n builtin/merge.c                |  3 +++\n t/t3033-merge-toplevel.sh      | 29 +++++++++++++++++++++++++++++\n t/t5521-pull-options.sh        |  9 ++++++++-\n 5 files changed, 51 insertions(+), 1 deletion(-)\n\ndiff --git a/Documentation/git.txt b/Documentation/git.txt\nindex 5c9380d..f2edac1 100644\n--- a/Documentation/git.txt\n+++ b/Documentation/git.txt\n@@ -1140,6 +1140,10 @@ of clones and fetches.\n \n 'GIT_MERGE_ALLOW_UNRELATED_HISTORIES'::\n \tAllow \"git merge\" to merge unrelated histories by default.\n+\tIt is recommended that a script that regularly wants to\n+\tcreate such a merge to set and export this environment\n+\tvariable upfront, instead of forcing its users to set\n+\tmerge.allowunrelatedhistories configuration variable.\n \n \n Discussion[[Discussion]]\ndiff --git a/Documentation/merge-config.txt b/Documentation/merge-config.txt\nindex 002ca58..8b3d14b 100644\n--- a/Documentation/merge-config.txt\n+++ b/Documentation/merge-config.txt\n@@ -47,6 +47,13 @@ merge.stat::\n \tWhether to print the diffstat between ORIG_HEAD and the merge result\n \tat the end of the merge.  True by default.\n \n+merge.allowUnrelatedhistories::\n+\tSetting this option to true (false) makes `git merge` and `git\n+\tpull` to pretend as if the `--allow-unrelated-histories`\n+\t(`--no-allow-unrelated-histories`) option was given from the\n+\tcommand line.  The configuration is ignored when one of these\n+\toptions is explicitly given from the command line.\n+\n merge.tool::\n \tControls which merge tool is used by linkgit:git-mergetool[1].\n \tThe list below shows the valid built-in values.\ndiff --git a/builtin/merge.c b/builtin/merge.c\nindex 4e8b1a1..e979c68 100644\n--- a/builtin/merge.c\n+++ b/builtin/merge.c\n@@ -583,6 +583,9 @@ static int git_merge_config(const char *k, const char *v, void *cb)\n \t} else if (!strcmp(k, \"commit.gpgsign\")) {\n \t\tsign_commit = git_config_bool(k, v) ? \"\" : NULL;\n \t\treturn 0;\n+\t} else if (!strcmp(k, \"merge.allowunrelatedhistories\")) {\n+\t\tallow_unrelated_histories = git_config_bool(k, v);\n+\t\treturn 0;\n \t}\n \n \tstatus = fmt_merge_msg_config(k, v, cb);\ndiff --git a/t/t3033-merge-toplevel.sh b/t/t3033-merge-toplevel.sh\nindex d314599..583b837 100755\n--- a/t/t3033-merge-toplevel.sh\n+++ b/t/t3033-merge-toplevel.sh\n@@ -149,4 +149,33 @@ test_expect_success 'two-project merge with --allow-unrelated-histories' '\n \tgit diff --exit-code five\n '\n \n+test_expect_success 'two-project merge with merge.allowunrelatedhistories' '\n+\tt3033_reset &&\n+\n+\t# make sure configuration parser works\n+\tgit reset --hard four &&\n+\ttest_config merge.allowunrelatedhistories notabool &&\n+\ttest_must_fail git merge . HEAD &&\n+\n+\t# disabled explicitly and redundantly by configuration\n+\tgit reset --hard four &&\n+\ttest_config merge.allowunrelatedhistories false &&\n+\ttest_must_fail git merge five &&\n+\n+\t# disabled explicitly by configuration, overridden by command line\n+\tgit reset --hard four &&\n+\ttest_config merge.allowunrelatedhistories false &&\n+\tgit merge --allow-unrelated-histories five &&\n+\n+\t# enabled by configuration but explicitly disabled\n+\tgit reset --hard four &&\n+\ttest_config merge.allowunrelatedhistories true &&\n+\ttest_must_fail git merge --no-allow-unrelated-histories five &&\n+\n+\t# enabled by configuration\n+\tgit reset --hard four &&\n+\ttest_config merge.allowunrelatedhistories true &&\n+\tgit merge five\n+'\n+\n test_done\ndiff --git a/t/t5521-pull-options.sh b/t/t5521-pull-options.sh\nindex ded8f98..50f0887 100755\n--- a/t/t5521-pull-options.sh\n+++ b/t/t5521-pull-options.sh\n@@ -161,7 +161,14 @@ test_expect_success 'git pull --allow-unrelated-histories' '\n \t(\n \t\tcd dst &&\n \t\ttest_must_fail git pull ../src side &&\n-\t\tgit pull --allow-unrelated-histories ../src side\n+\t\tgit pull --allow-unrelated-histories ../src side &&\n+\n+\t\tgit reset --hard one &&\n+\t\tgit config merge.allowunrelatedhistories no &&\n+\t\ttest_must_fail git pull ../src side &&\n+\t\tgit config merge.allowunrelatedhistories yes &&\n+\t\ttest_must_fail git pull --no-allow-unrelated-histories ../src side &&\n+\t\tgit pull ../src side\n \t)\n '\n \n-- \n2.8.1-422-g6d9b748\n"},{"id":"284072","messageId":"CAGZ79kZgenHyvAKxKNGxKkybM=LgTfsvB7s91s1sQxxbp1xoFg@mail.gmail.com","threadId":"42100","inReplyTo":"20160421192500.23563-3-gitster@pobox.com","subject":"Re: [PATCH 2/4] pull: pass --allow-unrelated-histories to \"git merge\"","fromName":"Stefan Beller","fromEmail":"sbeller@google.com","sentAt":"2016-04-21T19:36:14Z","receivedAt":"2016-04-21T19:36:14Z","isPatch":true,"sender":{"key":"stefanbeller@gmail.com","avatar":"https://avatars.githubusercontent.com/u/455868?v=4"},"body":"On Thu, Apr 21, 2016 at 12:24 PM, Junio C Hamano <gitster@pobox.com> wrote:\n> An earlier commit said:\n\nAnd by earlier you meant to say e379fdf34f (2016-03-18, merge: refuse\nto create too cool a merge by default)?\n"},{"id":"284076","messageId":"xmqq7ffqsl4m.fsf@gitster.mtv.corp.google.com","threadId":"42100","inReplyTo":"CAGZ79kZgenHyvAKxKNGxKkybM=LgTfsvB7s91s1sQxxbp1xoFg@mail.gmail.com","subject":"Re: [PATCH 2/4] pull: pass --allow-unrelated-histories to \"git merge\"","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2016-04-21T21:32:57Z","receivedAt":"2016-04-21T21:32:57Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Stefan Beller <sbeller@google.com> writes:\n\n> On Thu, Apr 21, 2016 at 12:24 PM, Junio C Hamano <gitster@pobox.com> wrote:\n>> An earlier commit said:\n>\n> And by earlier you meant to say e379fdf34f (2016-03-18, merge: refuse\n> to create too cool a merge by default)?\n\nThe text quoted does come from that commit, but because there is\nnothing more that a reader would need to read from that commit to\nfollow and understand this change, including its log message with\nthe quoted parts, I did not give a reference to the commit, in order\nto avoid wasting readers' time.  In other words, yes I meant that\ncommit, and no, I didn't mean to \"say\" e379fdf....  I meant to say\n\"An earlier commit\" and taht is what I did.\n"},{"id":"284080","messageId":"xmqqtwiur3yj.fsf@gitster.mtv.corp.google.com","threadId":"42100","inReplyTo":"20160421192500.23563-1-gitster@pobox.com","subject":"Re: [PATCH 0/4] Loosening \"two project merge\" safety","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2016-04-21T22:29:08Z","receivedAt":"2016-04-21T22:29:08Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Junio C Hamano <gitster@pobox.com> writes:\n\n> Yaroslav Halchenko gave a vague \"forcing 'git merge' users to always\n> give --allow-unrelated-histories option when they create crap/insane\n> merges are not nice\", which I couldn't guess the validity due to\n> lack of concrete use case.  Just in case it is substantiated, here\n> is a series to selectively and safely loosen the safety for specific\n> use cases and users.\n>\n> Junio C Hamano (4):\n>   t3033: avoid 'ambiguous refs' warning\n>   pull: pass --allow-unrelated-histories to \"git merge\"\n>   merge: GIT_MERGE_ALLOW_UNRELATED_HISTORIES environment\n>   merge: introduce merge.allowUnrelatedhistories configuration option\n\nI've queued the first two on 'pu'.\n\nI do not think the Kernel folks do not mind the latter two too much,\nbut I am holding onto them for now.  Unless the original \"Gaah\" did\nnot come from Linus, I might even have said that this additional\nsafety should be opt-in for people who know what they are doing\n(i.e. those who want the safety would set the new configuration),\nbut I am undecided right now.\n\n>\n>  Documentation/git-merge.txt     | 14 +-------------\n>  Documentation/git.txt           |  7 +++++++\n>  Documentation/merge-config.txt  |  7 +++++++\n>  Documentation/merge-options.txt |  8 ++++++++\n>  builtin/merge.c                 |  6 ++++++\n>  builtin/pull.c                  | 11 +++++++++++\n>  t/t3033-merge-toplevel.sh       | 31 ++++++++++++++++++++++++++++++-\n>  t/t5521-pull-options.sh         | 28 ++++++++++++++++++++++++++++\n>  8 files changed, 98 insertions(+), 14 deletions(-)\n"}]}