• Quantenteilchen@discuss.tchncs.de
    link
    fedilink
    arrow-up
    8
    ·
    10 hours ago

    I never thought about it and instantly wanted to reply “wait why can’t you do that‽” but now that I thought about it, what would you want the history to look like in that case? A slightly weird rebase? A single commit which seemingly copy pasted the entire other branch with no relation to it left behind?

    • psycotica0@lemmy.ca
      link
      fedilink
      arrow-up
      3
      ·
      edit-2
      4 hours ago

      Yeah, I’m with you. I mean, git isn’t magic. You “can” squash anything, including a merge commit, by just being at the end result, running git reset <commit you want to be squashed off of> and then running a manual git add and commit there. That’s basically all a squash is.

      But what you’ll be left with us a single commit that contains all of the code from the branch you’re squashing and also all the code pulled in from every branch you merged, all written as though it all came from this one commit. And maybe that’s what you want? But it feels like also maybe it’s not?

    • ranzispa@mander.xyz
      link
      fedilink
      arrow-up
      13
      ·
      9 hours ago

      Sometimes you really don’t want to look over the commit history of your colleagues. As long as it’s a small feature, a single commit is a pretty good option.

      Rather than:

      • implemented X
      • forgot this
      • oh, this was not needed
      • now tests actually pass
      • oops
      • fixed this
      • should be ready
      • expr@piefed.social
        link
        fedilink
        English
        arrow-up
        5
        ·
        4 hours ago

        It’s fine if the changes belong in a single commit. Otherwise, an interactive rebase to craft a clean, quality history before merging is much, much better.

      • Elvith Ma'for@feddit.org
        link
        fedilink
        arrow-up
        13
        ·
        8 hours ago

        That’s basically my commit history for every repo where I need the pipeline to run to see if everything works.

        • ranzispa@mander.xyz
          link
          fedilink
          arrow-up
          1
          ·
          4 hours ago

          When I do that I always have a Dev branch that I use as the production branch to run the actual calculations.

          When I get something working I merge it off, clean up the history a little bit, rebase main onto it and then rebase de onto main.

        • kungen@feddit.nu
          link
          fedilink
          arrow-up
          4
          ·
          7 hours ago

          Haha same. But that’s why you do it in another branch, and then squash-merge.

          • ranzispa@mander.xyz
            link
            fedilink
            arrow-up
            1
            ·
            4 hours ago

            I like squash merge on small changes, but when larger code changes are there it becomes a huge commit which is difficult to review if you ever have to go back.

            • psycotica0@lemmy.ca
              link
              fedilink
              arrow-up
              1
              ·
              4 hours ago

              Right… for sure… but then if you don’t want to squash, then it doesn’t matter you can’t squash a merge commit.

    • mcv@lemmy.zip
      link
      fedilink
      arrow-up
      7
      ·
      8 hours ago

      I’m not a fan of changing history in general. Rebase can also he dangerous.

      I think ultimately it’s a matter of scale. Sometimes it can be useful to look into the details of the development of a single feature, but in a large project, that rarely happens. I’m not a fan of squashing, but for large projects, it helps to keep your history manageable.

      • expr@piefed.social
        link
        fedilink
        English
        arrow-up
        3
        ·
        3 hours ago

        Rebasing is not dangerous. You can always go back if something is not to your liking.

        You don’t rebase shared history, you use rebases to craft a clean, quality commit history for your own branches before merging. If everyone does this, then squashing is unnecessary, because garbage commits don’t exist. It is the far superior way of doing things if you actually care about having good commits.

        Keeping a quality history rather than squashing also makes many other git tools much better, such as git blame, git revert, git bisect, and so on.

        • mcv@lemmy.zip
          link
          fedilink
          arrow-up
          1
          ·
          2 hours ago

          Rebasing is dangerous if you rebase shared history. If you rebase a local branch, you have to be aware of how much of that local branch you may already have shared.

          On top of that, if you’ve got a lot of commits you’re rebasing in a merge conflict that can become extremely repetitive.

          So ideally, you only rebase single commits that you haven’t pushed yet. As long as you do that: always pull main and rebase on top of that before you push single commits, rebasing is fine. But the more you deviate from that, the riskier it becomes.