• @DinosaurSr
    link
    13 months ago

    Squash and rebase or squash or rebase?

    • @[email protected]
      link
      fedilink
      63 months ago

      …and? You squash so all your gross “isort” “forgot to commit this file” “WIP but I’m getting lunch” commits can be cleaned up into a single “Add endpoint to allow users to set their blah blah” comment with a nice extended description.

      You then rebase so you have a nice linear history with no weird merge commits hanging around.

      • @[email protected]
        link
        fedilink
        13 months ago

        Okay honest question, when you merge a PR in GitHub and choose the squash commits box is that “rebasing”? Or is that just squashing? Because it seems that achieves the same thing you’re talking about.

        • @[email protected]
          link
          fedilink
          33 months ago

          There’s two options in the green button on a pr. One is squash and merge, the other is squash and rebase.

          Squashing makes one commit out of many. You should IMO always do this when putting your work on a shared branch

          Rebase takes your commit(s) and sticks them on the end.

          Merge does something else I don’t understand as well, and makes a merge commit.

          Also there was an earthquake in NYC when I was writing this. We may have angered the gods.

          • @[email protected]
            link
            fedilink
            13 months ago

            Lmao I’m in the NYC area and my whole house shook. I’m right there with you. Thanks for the explanation!

          • Atemu
            link
            fedilink
            03 months ago

            You should IMO always do this when putting your work on a shared branch

            No. You should never squash as a rule unless your entire team can’t be bothered to use git correctly and in that case it’s a workaround for that problem, not a generally good policy.

            Automatic squashes make it impossible to split commit into logical units of work. It reduces every feature branch into a single commit which is quite stupid.
            If you ever needed to look at a list of feature branch changes with one feature branch per line for some reason, the correct tool to use is a first-parent log. In a proper git history, that will show you all the merge commits on the main branch; one per feature branch; as if you had squashed.

            Rebase “merges” are similarly stupid: You lose the entire notion of what happened together as a unit of work; what was part of the same feature branch and what wasn’t. Merge commits denote the end of a feature branch and together with the merge base you can always determine what was committed as part of which feature branch.

            • @[email protected]
              link
              fedilink
              23 months ago

              I don’t want to see a dozen commits of “ran isort” “forgot to commit this file lol” quality.

              Do you?

              Having the finished feature bundled into one commit is nice. I wouldn’t call it stupid at all.

              • Atemu
                link
                fedilink
                13 months ago

                Note that I didn’t say that you should never squash commits. You should do that but with the intention of producing a clearer history, not as a general rule eliminating any possibly useful history.

      • @[email protected]
        link
        fedilink
        13 months ago

        You squash so all your gross “isort” “forgot to commit this file” “WIP but I’m getting lunch” commits can be cleaned up

        The next step on the Git-journey is to use interactive rebasing in order to never push these commits in the first place and maintain a clean history to be consumed by the code reviewer.

        Squashing is still nice in order to have a one-to-one relationship between commits on the main branch to pull requests merged, imo.