git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: git merge remote branch says "Merge commit ..."?

From
Jeff King <peff@peff.net>
Date
May 22, 2009, 07:49 UTC
Message-ID
<20090522074927.GB1409@coredump.intra.peff.net>
In-Reply-To
<2729632a0905211250v4e7537caybe9e703c14361b5f@mail.gmail.com>
On Thu, May 21, 2009 at 12:50:48PM -0700, skillzero@gmail.com wrote:
Show 20 quoted lines
> I noticed that if I do 'git merge origin/branch' that the log message
> says (using --log):
> 
> Merge commit 'origin/branch'
> 
>    * commit 'origin/branch':
>      Fixed some bug.
> 
> If I do the same thing from a local tracking branch of origin/branch, it says:
> 
> Merge branch 'branch'
> 
>    * branch:
>      Fixed some bug.
> 
> Is it expected that it say "commit" instead of "branch" when the
> branch is not a local tracking branch? I sometimes merge from remote
> branches when I don't need to do anything with that branch locally
> (e.g. I already did the work on another computer and I'm just merging
> the result into my test machine before I push to the shared server).

I think doing a "git merge origin/master" is perfectly normal for some workflows. For example:

  $ git fetch origin ;# grab it
  $ gitk origin/master...master ;# check if it is good to merge
  $ git merge origin/master ;# and merge it

The final step _could_ be a pull, but there is no point in repeating the fetch (which might be costly).

There is already code in fmt-merge-msg to handle remote branches; it looks like we just need to signal that code the same way "git fetch" would. Maybe something like the patch below (which is really just a cut-and-paste of the code directly above it to special-case real branches).

It gives a sensible "Merge" line but you end up with
  * remote branch 'origin/master':
    ...
instead of
  * origin/master:
    ...

So it probably requires some deeper digging into what git-fetch is doing, and to emulate that (I am pretty ignorant of this part of the code).

---
diff --git a/builtin-merge.c b/builtin-merge.c
index 0b58e5e..a74a4d0 100644
--- a/builtin-merge.c
+++ b/builtin-merge.c
@@ -378,6 +378,17 @@ static void merge_name(const char *remote, struct strbuf *msg)
 		goto cleanup;
 	}
 
+	strbuf_setlen(&buf, 0);
+	strbuf_addstr(&buf, "refs/remotes/");
+	strbuf_addstr(&buf, remote);
+	resolve_ref(buf.buf, branch_head, 0, 0);
+
+	if (!hashcmp(remote_head->sha1, branch_head)) {
+		strbuf_addf(msg, "%s\t\tremote branch '%s'\n",
+				sha1_to_hex(branch_head), remote);
+		goto cleanup;
+	}
+
 	/* See if remote matches <name>^^^.. or <name>~<number> */
 	for (len = 0, ptr = remote + strlen(remote);
 	     remote < ptr && ptr[-1] == '^';
Previous: skillzero@gmail.comNext: Eric Raible
Message 2 of 10 in “git merge remote branch says "Merge commit ..."?”
  1. skillzero@gmail.comMay 21, 2009
  2. Jeff KingMay 22, 2009
  3. Eric RaibleMay 22, 2009
  4. Jeff KingMay 22, 2009
  5. Eric RaibleMay 22, 2009
  6. Jeff KingMay 22, 2009
  7. Johannes SixtMay 22, 2009
  8. Jeff KingMay 23, 2009
  9. Junio C HamanoMay 23, 2009
  10. Jeff KingMay 25, 2009

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.