Communities

Writing
Writing
Codidact Meta
Codidact Meta
The Great Outdoors
The Great Outdoors
Photography & Video
Photography & Video
Scientific Speculation
Scientific Speculation
Cooking
Cooking
Electrical Engineering
Electrical Engineering
Judaism
Judaism
Languages & Linguistics
Languages & Linguistics
Software Development
Software Development
Mathematics
Mathematics
Christianity
Christianity
Code Golf
Code Golf
Music
Music
Physics
Physics
Linux Systems
Linux Systems
Power Users
Power Users
Tabletop RPGs
Tabletop RPGs
Community Proposals
Community Proposals
tag:snake search within a tag
answers:0 unanswered questions
user:xxxx search by author id
score:0.5 posts with 0.5+ score
"snake oil" exact phrase
votes:4 posts with 4+ votes
created:<1w created < 1 week ago
post_type:xxxx type of post
Search help
Notifications
Mark all as read See all your notifications »
Q&A

Welcome to Software Development on Codidact!

Will you help us build our independent community of developers helping developers? We're small and trying to grow. We welcome questions about all aspects of software development, from design to code to QA and more. Got questions? Got answers? Got code you'd like someone to review? Please join us.

Post History

81%
+7 −0
Q&A How do I customize merge behavior for a shared git repo?

I often find it useful to arrange things so that each commit on master's first-parent is a discrete change. It allows git log --first-parent --oneline to be used as a concise, automatically-generat...

1 answer  ·  posted 4y ago by ajv‭  ·  last activity 1y ago by GrantMoyer‭

Question git git-merge
#2: Post edited by user avatar Alexei‭ · 2020-09-02T15:52:16Z (about 4 years ago)
I often find it useful to arrange things so that each commit on master's first-parent is a discrete change. It allows `git log --first-parent --oneline` to be used as a concise, automatically-generated changelog.

There are various ways this can get screwed up. The one I'm most aware of arises from rhombus topologies, where master was merged into a topic branch, perhaps to resolve merge conflicts ahead of submitting a PR:

```
A---B---D <----master
 \       \
  E---F---G <---topic
```

Here, when merging topic back into master, you get a fast-forward merge by default, and the resulting parents are backwards.

On the other hand, if you avoid fast-forward merges, you get useless merge bubbles instead. That's not ideal, either:

```
A---B---C <----master
 \ / \ /
  d   e
```

I would like to set things up so that, by default, parent swapping doesn't happen and merge-bubbles are avoided. I'd like this policy to "travel with the repo", so my teammates don't have to worry about whether they're doing the right thing.

Is this possible? As I understand it, git has hooks for controlling its behavior, but I don't know if this is a thing they can do.
#1: Initial revision by user avatar ajv‭ · 2020-09-01T21:42:19Z (about 4 years ago)
How do I customize merge behavior for a shared git repo?
I often find it useful to arrange things so that each commit on master's first-parent is a discrete change. It allows `git log --first-parent --oneline` to be used as a concise, automatically-generated changelog.

There are various ways this can get screwed up. The one I'm most aware of arises from rhombus topologies, where master was merged into a topic branch, perhaps to resolve merge conflicts ahead of submitting a PR:

```
A---B---D <----master
 \       \
  E---F---G <---topic
```

Here, when merging topic back into master, you get a fast-forward merge by default, and the resulting parents are backwards.

On the other hand, if you avoid fast-forward merges, you get useless merge bubbles instead. That's not ideal, either:

```
A---B---C <----master
 \ / \ /
  d   e
```

I would like to set things up so that, by default, parent swapping doesn't happen and merge-bubbles are avoided. I'd like this policy to "travel with the repo", so my teammates don't have to worry about whether they're doing the right thing.

Is this possible? As I understand it, git has hooks for controlling its behavior, but I don't know if this is a thing they can do.
git