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

[RFC] git log --first-parent

From
Junio C Hamano <junkio@cox.net>
Date
Mar 13, 2007, 08:55 UTC
Message-ID
<7vfy89ldyv.fsf_-_@assigned-by-dhcp.cox.net>
In-Reply-To
<7vwt1nv6r5.fsf@assigned-by-dhcp.cox.net>
Junio C Hamano <junkio@cox.net> writes:
Show 12 quoted lines
> Linus Torvalds <torvalds@linux-foundation.org> writes:
>
>> Comments? Do people think it would be a good idea to do
>>
>> 	git merge --no-fast-forward -m "Merge feature Xyz" xyz-branch
>>
>> as an option?
>>
>> 			Linus
>
> For one thing, this would make the earlier "first parent log
> summary" idea useful again.

While I was writing "What's cooking" tonight, I came up with this patch so that I can view what's in topic branches.

This time somehow I ended up having to cross merge a few topics (e.g. jc/fetch which is the partial C rewrite has been cooking long enough that merging 'master' to get Nico's OBJ_TYPE cleanups has become useful), and also 'next' is a pure integration branch, and it turns out that reviewing them with

	$ git log --first-parent master..jc/fetch

was easier to view what really was going on on that particular topic, without getting distracted with what was merged from sideways.

---
diff --git a/revision.c b/revision.c
index 3c2eb12..8afc196 100644
--- a/revision.c
+++ b/revision.c
@@ -350,6 +350,7 @@ static void add_parents_to_list(struct rev_info *revs, struct commit *commit, st
 {
 	struct commit_list *parent = commit->parents;
 	unsigned left_flag;
+	int add, rest;
 
 	if (commit->object.flags & ADDED)
 		return;
@@ -395,18 +396,19 @@ static void add_parents_to_list(struct rev_info *revs, struct commit *commit, st
 		return;
 
 	left_flag = (commit->object.flags & SYMMETRIC_LEFT);
-	parent = commit->parents;
-	while (parent) {
+
+	rest = !revs->first_parent_only;
+	for (parent = commit->parents, add = 1; parent; add = rest) {
 		struct commit *p = parent->item;
 
 		parent = parent->next;
-
 		parse_commit(p);
 		p->object.flags |= left_flag;
 		if (p->object.flags & SEEN)
 			continue;
 		p->object.flags |= SEEN;
-		insert_by_date(p, list);
+		if (add)
+			insert_by_date(p, list);
 	}
 }
 
@@ -836,6 +838,10 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, const ch
 				handle_all(revs, flags);
 				continue;
 			}
+			if (!strcmp(arg, "--first-parent")) {
+				revs->first_parent_only = 1;
+				continue;
+			}
 			if (!strcmp(arg, "--reflog")) {
 				handle_reflog(revs, flags);
 				continue;
diff --git a/revision.h b/revision.h
index 6ae39e6..55e6b53 100644
--- a/revision.h
+++ b/revision.h
@@ -46,7 +46,8 @@ struct rev_info {
 			boundary:2,
 			left_right:1,
 			parents:1,
-			reverse:1;
+			reverse:1,
+			first_parent_only:1;
 
 	/* Diff flags */
 	unsigned int	diff:1,
Previous: Junio C HamanoNext: Jeff King
Message 13 of 15 in “git merge and merge message”
  1. Xavier MaillardMar 11, 2007
  2. J. Bruce FieldsMar 11, 2007
  3. git-merge: warn when -m provided on a fast forwardJ. Bruce Fields, Mar 11, 2007
  4. Xavier MaillardMar 11, 2007
  5. Linus TorvaldsMar 11, 2007
  6. Avi KivityMar 11, 2007
  7. Linus TorvaldsMar 11, 2007
  8. Avi KivityMar 12, 2007
  9. Johannes SchindelinMar 11, 2007
  10. Junio C HamanoMar 12, 2007
  11. Avi KivityMar 12, 2007
  12. Junio C HamanoMar 11, 2007
  13. [RFC] git log --first-parentJunio C Hamano, Mar 13, 2007
  14. Jeff KingMar 13, 2007
  15. Martin LanghoffMar 12, 2007

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.