Skip to content

Instantly share code, notes, and snippets.

@jyn514
Last active April 27, 2023 04:28
Show Gist options
  • Save jyn514/e120a7b7e4fdea3fd0e8f12c7811b383 to your computer and use it in GitHub Desktop.
Save jyn514/e120a7b7e4fdea3fd0e8f12c7811b383 to your computer and use it in GitHub Desktop.
vague scribbles about how to make git easier to use

Git redesign

  • all repos start with a blank initial commit, no more "does not have any commits yet" errors

  • git commit foo should just work for new files, no more making people run git add first lol

  • no fucking perl scripts lmfao

    • better perf
    • git on windows is less horrifically cursed
  • all the defaults should be different

    • autostash
    • diff3
    • manyfiles
    • color-moved
  • add an "undo" command that works for arbitrary git commands

    • e.g. delete a pushed branch, undo a merge, undo a commit/amend/rebase
  • paths fall back to the repo root if they can't be resolved relative to CWD

  • submodules and subtrees are the same thing

    • not checking out submodules is off by default (configurable on per-repo basis)
      • this replaces git LFS too
    • commands in the submodule work from anywhere in the repo
    • changes don't have to be upstreamed before being committed
    • worktrees don't reclone the same repos
    • don't have to fetch the full history of the submodule
    • no "dirty submodules" lmao what a fucking terrible idea
  • don't use merge workflows so I don't have strong opinions there but merge commits should show the changes you made when resolving conflicts (!!)

  • give a warning before committing merge markers

  • add a way to get back the original git diff at the start of a conflict that doesn't completely disappear as soon as you run git add/commit/reset lmao

  • rebasing needs to completely be redesigned

    • don't touch things on disk unless absolutely necessary to solve merge conflicts or do a final checkout
    • don't reverse "your changes" and "upstream changes" in conflict markers lmfao
    • don't make --interactive a completely separate backend lmfao
      • --edit-todo and --autosquash should work even in non-interactive mode
    • keep a record of the changes made instead of silently discarding them
      • this is mostly just range-diff see the section below
    • branches should remember which commit they branched from
    • file renames should remember the original file. no more percentages lmao what a concept
    • use merge-base origin/HEAD HEAD as the default root
  • allow editing individual commits without needing to do a full interactive rebase

    • yes this includes metadata
    • no more "fixup" lmfao just edit the actual commit
  • absolute URLs work anywhere without needing to add a remote first

  • remotes are automatically deduplicated

    • adding an existing URL just adds an alias
    • adding a new url that points to the same repo (e.g. HTTP vs SSH) checks somehow if they're the same and uses the same local cache if so
  • add a version of stash that appends to a branch instead of a random number (https://discord.com/channels/414933673545039883/712061415686406144/980885457980231700)

  • better names

    • aliases for all the old names
  • better error messages and help

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment