you are viewing a single comment's thread
view the rest of the comments
[–] 12 points 4 months ago (10 children)

Very good article for folks who've had to teach juniors/trainees Git before.

This is, to my mind, one of the greatest advantages of git (and, by-the-by, also automated testing): the added security that being able to restore to an earlier state whenever you need to allows you to take more risks and try more things when building software.

Yeah, I always tell them it's like checkpoints or like a save in a game.

But this also ties into the needing-a-teacher aspect to properly learn Git: Due to the nature of what Git accomplishes, it has a lot of complex failure modes. And at the start, you need a teacher to get you through those.

The worst-case is if they start dreading merges, because they can't past them and then they try to merge less often, which makes the conflicts so much harder to deal with.
Or if they can't get past merge conflicts and stop seeing the point in small Git commits and in good commit messages. That also makes merge conflicts so much worse.

That's kind of my motivation to be good at Git. I need to be able to tell juniors, that if they've created a commit, then we can unfuck the repo no matter what they might do wrong.

  • source
  • hideshow 10 child comments
  • [–] 5 points 4 months ago

    Most projects do not need the complex merging capabilities of git. I've found that simply structuring the workflow around trunk based development with linear history works the best: short lived feature branches that get rebased/squashed/committed and the tip of main is always deployable. It avoids dealing with all of the bullshit that comes with long-lived branches and migrating changes between them. This also requires structuring the work itself if you have a larger team so that if you are all working on the same system, avoid crossing the streams (draw some boundaries) to keep dependencies between branches at a minimum. When it starts getting into stacked patches, that's a good sign you have a kink in the review pipeline somewhere and this complexity can go away with some managering. Git is as complex as you want it to be, and pretty easy to keep it simple

  • source
  • parent
  • [–] 3 points 4 months ago (8 children)

    And here we are, encouraged by our technical leadership to always have a single commit per branch that is constantly amended. I even think squashing the branch is not too good, but this is a step up from that

  • source
  • parent
  • hideshow 8 child comments
  • [+] 2 points 4 months ago (3 children)
  • [–] 2 points 4 months ago (2 children)

    Largely yes, but also having it squashed requires better commit messages and comments to show what was done for what reason. But yes, bisect is the only reason I'm fine with squashing

  • source
  • parent
  • hideshow 2 child comments
  • [–] -1 points 4 months ago (3 children)
  • [–] 2 points 4 months ago (2 children)

    If you mean to ask what that means, it's that for development you start a branch and either do everything in one commit, or do everything in several, but each time you git commit --amend so that a history is overwritten and in the end it is only one commit still

  • source
  • parent
  • hideshow 2 child comments