Re: Why does "merge --continue" expect no arguments?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Dec 24 2021, Junio C Hamano wrote:

> Ævar Arnfjörð Bjarmason <avarab@xxxxxxxxx> writes:
>
>> On Tue, Dec 21 2021, Junio C Hamano wrote:
>>
>>> Or we could throw in another
>>>
>>>  * document more clearly that "merge --continue" is a mere synonym
>>>    for, and hint that there is no reason to favor it over, "git
>>>    commit".
>>
>> But it's not:
>>
>>     $ git add foo
>>     $ git commit -v
>>     hint: Waiting for your editor to close the file.[...]
>>     ^C
>>     $ git merge --continue
>>     fatal: There is no merge in progress (MERGE_HEAD missing).
>>
>> FWIW I prefer and use it for that reason, i.e. it's useful for scripting
>> to use these "stateful" commands when we're in some sort of rebase/merge
>> "sequence" since it's an extra layer of sanity checking.
>
> There is no additional safety afforded by that, though.  There is no
> reason why one would even try to say "merge --continue" without
> doing any merge to begin with.
>
> The "merge --continue" not taking any pathspec is a bit of safety,
> but even there, "commit" already has its own safety to reject
> pathspec when it notices that it is concluding a conflicted "merge",
> so "merge --continue" is not necessary for additional safety there,
> either.

The reason would be that you're confused about what state you're in.

I've had that a few times, so I prefer it over "git commit", so I daresy
someone less experienced in using git could and would benefit from it as
well.

Usually because my "__git_ps1" and a subsequent "git status" shows one
state, so I'll want to continue the merge, but forgot that I did so in
another terminal tab already, and the real state of the repository might
have moved on to the index being prepared for a non-merge commit.

For "rebase --continue" we change the reflog entry from "rebase (pick)"
to "rebase (continue)". Any reason we wouldn't do the same for "merge
--continue"?:

diff --git a/builtin/merge.c b/builtin/merge.c
index 5f0476b0b76..51ef8ca36d0 100644
--- a/builtin/merge.c
+++ b/builtin/merge.c
@@ -1358,6 +1358,10 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
 		if (!file_exists(git_path_merge_head(the_repository)))
 			die(_("There is no merge in progress (MERGE_HEAD missing)."));
 
+		strbuf_addstr(&buf, "merge (continue)");
+		setenv("GIT_REFLOG_ACTION", buf.buf, 0);
+		strbuf_reset(&buf);
+
 		/* Invoke 'git commit' */
 		ret = cmd_commit(nargc, nargv, prefix);
 		goto done;
diff --git a/t/t7600-merge.sh b/t/t7600-merge.sh
index c773e30b3fa..7a180f571b7 100755
--- a/t/t7600-merge.sh
+++ b/t/t7600-merge.sh
@@ -772,6 +772,8 @@ test_expect_success 'completed merge (git merge --continue) with --no-commit and
 	git stash show -p MERGE_AUTOSTASH >actual &&
 	test_cmp expect actual &&
 	git merge --continue 2>err &&
+	git reflog -1 >reflog &&
+	grep -F "merge (continue)" reflog &&
 	test_i18ngrep "Applied autostash." err &&
 	git show HEAD:file >merge-result &&
 	test_cmp result.1-5 merge-result &&




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux