Products · Product
Git
Raised as a usability problem by 2,203 people on Hacker News over 19 years (2008–2026), in 1,171 threads.
- 1History is hard to navigate and discoverUnreviewed
- 2
- 3
- 4
- 5
- 6
- 7
- 8Must constantly google how to do thingsUnreviewed
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9History is hard to navigate and discoverUnreviewed
- 10
- 11Must constantly google how to do thingsUnreviewed
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27Easy to get stuck in bad repo statesUnreviewed
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12History is hard to navigate and discoverUnreviewed
- 13Must constantly google how to do thingsUnreviewed
- 14
- 15
- 16Easy to get stuck in bad repo statesUnreviewed
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140Partial checkouts are awkward to useUnreviewed
- 141
- 142
- 143
- 144
Every issue, all time, most people first
Moderately complex commands are hard to remember and discoverUnreviewed
20082026- Commands are hard to remember and need a cheatsheet beyond basic use2026-05-18
- Overwhelming number of commands and options, hard to learn and remember2026-01-12
- Users must look up commands and syntax, can't remember them all, and it is error-prone2025-12-30
Dozens of obscure options make the commands confusingUnreviewed
20082026- Command line syntax is overly confusing and opaque to users2026-02-25
- Inconsistent commands make it hard to work out how to solve problems2025-02-04
- Confusing jargon and inconsistent commands; users can't tell why some commands work and others don't2024-01-10
Creating a branch doesn't switch to it, and checkout -b isn't foundUnreviewed
20082026- Checkout does both branch switching and discarding changes, which is confusing2026-04-08
- Branch create and delete commands are inconsistent and hard to remember2026-02-27
- Useful branch output requires extra flags, and commands give cryptic errors and hidden options2025-01-18
Merges produce unwanted conflicts that must be manually undoneUnreviewed
20082026- Forces you to stop everything and resolve merge conflicts immediately, and rebase conflicts one by one2026-05-25
- Requires understanding internal data structures; people can't explain rebase versus merge2026-05-17
- Merge feels unpleasant and makes tracking changes hard2026-03-04
Reset and checkout do too much, making them confusingUnreviewed
20082026- Checkout command has overlapping modes that can silently discard uncommitted changes2026-07-14
- Reset and checkout commands do too much, making them confusing2026-07-14
- Commands like checkout and reset do many different things, some destructive, making them hard to use2026-04-22
Needless complexity requires extensive reading and practiceUnreviewed
20082026- Unfriendly interface that is hard for people to use2026-07-29
- Interface is inconsistent, causing repeated frustration even after years of use2026-05-17
- Interface is arcane and hard to learn; every aspect feels bespoke2026-04-10
Editing an older commit needs many error-prone manual rebase stepsUnreviewed
20082026- Moving a commit and its descendants to a new parent is unintuitive to invoke2026-05-17
- Editing a past commit message was complicated until a recent release2026-04-28
- Amending a commit a few parents back takes about five manual steps2025-12-07
Basic tasks need deep knowledge of internalsUnreviewed
20082026- Too many details and edge cases, so the person forgets how it works soon after learning2026-05-18
- Very difficult to learn, so people are forced to struggle with it2025-10-26
- Too much unnecessary complexity; people learn only enough to get by2025-10-26
Checkout does different things, making Git inconsistent to learnUnreviewed
20082026- Commands are unintuitive, e.g. 'git checkout -- foo.txt' confuses people, so they fumble around2026-04-22
- Git checkout -- file is unintuitive and its restore replacement is unclear2026-04-22
- Git checkout does five or more unrelated things, making the CLI confusing2025-04-10
Rebase is tricky to get right and recovering from mistakes wastes timeUnreviewed
20082026- Interactive rebase commands can leave the working tree half-broken, causing fear2026-07-14
- Rebase requires memorizing command line options and building a mental model2026-07-14
- Hard to keep track of what powerful commands like rebase are doing2025-11-11
Inconsistent flags and command names make commands hard to rememberUnreviewed
20082026- Millions of people confused, hunting for correct commands among poorly named flags2026-04-22
- Too many commands and flags, and docs don't help users understand them2024-07-06
- CLI is full of footguns, inconsistent flags, and can silently delete commits2024-02-23
Must constantly google how to do thingsUnreviewed
20082026- When something goes wrong, the user can't work out how to fix it and must search for magic commands2026-09-02
- GUIs are more confusing than typing commands and don't match the user's workflow2026-07-10
- Commands are semantically incoherent, so users must look up workflows every time2026-04-08
Reverting a file with checkout silently discards changesUnreviewed
20082026- Git loses track of moved and edited binary assets, showing them as deleted and recreated2026-08-20
- Manual doesn't say when git add's default behaviour for deleted files changed2024-05-29
- Overloaded checkout command is confusing, so restore and switch were added2023-12-11
Same merge conflicts reappear on every rebase of an old branchUnreviewed
20082026- Same conflict reappears on each commit, so earlier resolutions seem lost2026-07-27
- Branch is unusable until merge conflicts are fully resolved2025-08-31
- Long-lived branches touching same files force repeated manual conflict resolution, even rerere doesn't help2025-05-26
Easy to get stuck in bad repo statesUnreviewed
20082026- Easy to get into repo states the user cannot figure out how to recover from2025-02-12
- Repo stays in bisect state, easy to run wrong command or get confused2024-11-28
- Beginners break their repo and must re-clone instead of recovering2024-02-01
Rebasing produces conflicts that are harder to resolveUnreviewed
20082026- Rebasing and resolving conflicts in git is a painful, costly process2026-01-13
- Git's UI is bad, forcing users to learn workarounds for rebasing and conflicts2025-10-13
- Rebasing a stack of branches requires many manual steps and branch pointer resets2025-07-21
Reflog shows only hashes and messages, making commits hard to findUnreviewed
20082026- Reflog format is confusing, so recovering from rebase mistakes is hard2026-01-13
- Reflog is considered very confusing and complicated to understand2025-01-16
- Reflog feature is hidden internals people don't understand, poor UI discoverability2024-02-03
Finding how to do tasks is confusing for new developersUnreviewed
20082026- Hard to discover available commands and options, unclear what state is changing2025-05-30
- Too low-level, making simple everyday tasks hard to do2024-04-06
- Developers constantly need to search online to figure out how to do basic tasks2023-10-08
Cherry-picking between branches causes painful later conflictsUnreviewed
20082026- Branch and detached HEAD states look identical but change how commits behave, so people lose work2026-04-14
- Branches behave as moving tags, so it's hard to trace where commits came from2026-04-14
- Novices fail to notice which branch is checked out, then panic when commits seem to vanish2026-04-14
Error messages are cryptic, leaving users unable to see what went wrongUnreviewed
20082026- CLI error messages are obscure and assume expertise, not friendly to users2026-04-24
- Help text recommends a command the docs say is not ready for use2021-04-13
- Easy to make mistakes, and error messages are confusing and hard to decipher2019-05-24
Commands like git diff --cached must be memorised by heartUnreviewed
20082026- Reviewing git activity and tracking changes over time in the terminal is unproductive and tedious2022-10-15
- Hard to reliably tell which changes a branch contains; git log hard to parse2022-06-10
- Git revision syntax is terrible and git diff behaves differently than it looks2022-01-19
Basic operations are easy to mess up, and rebase is frustratingUnreviewed
20082026- Basic git operations are hard, easy to mess up, and rebase is frustrating2026-01-13
- Git's merge model is confusing, so juniors mess up rebases and force-push2025-09-22
- Git leaves the repository stuck mid-rebase, so you can't safely switch to other work2025-09-01
Switching branches requires stashing, and the stash stack is hard to trackUnreviewed
20082026- Switching branches needs stashing, and the stash stack becomes hard to track2025-07-22
- Switching between parallel branches requires tedious stashing and cherry-picking, and conflicts stop work2025-02-12
- Switching tasks in Git needs fiddly stashes and remembering which branch each stash is for2025-02-04
Submodules are easy to trip over, such as forgetting --recursive when cloningUnreviewed
20082026- Confusing hidden state, not cloned by default, and unhelpful diffs for submodule changes2024-12-02
- Confusing: unclear what submodule init does, and submodule storage and switching behave unintuitively2023-08-08
- Users must remember extra submodule commands after every clone, pull or checkout2023-04-26
Push fails on other branches and pull does not fix itUnreviewed
20082026- Must repeat a manual push-with-branch-name dance each time because git push can't be configured to do it2023-11-23
- Branch tracking behaviour makes git pull too counter-intuitive to understand or explain2023-08-08
- Git push --tags is all-or-none, so pushing single tags is inconvenient and risks accidental pushes2023-01-23
Same operations need obscure flags and multi-step incantationsUnreviewed
20082026- Confusing, multipurpose commands based on inner workings make bad states hard to recover from2026-05-18
- Commands map unintuitively onto the operations they actually perform2021-06-21
- Commands are unclear about which state levels they operate on, confusing people2021-06-21
Common tasks take several commands, with obscure arguments for fewerUnreviewed
20082026- Uncommon tasks require wasting time searching docs; command naming is unintuitive2021-09-02
- Simple tasks need two commands instead of one, due to a poor model2021-04-28
- Inconsistent commands make rarely used tasks need the manual every time2020-11-17
Git LFS is so clunky the team had to build a workaroundUnreviewed
20082026- Silently does the wrong thing unless users actively set up git-lfs2026-06-22
- Git LFS felt unworkably clunky, so the team had to build a workaround2026-06-17
- Git with LFS causes constant problems when used with Unity and Unreal2026-06-17
Names like pull, checkout and rebase are vague for new usersUnreviewed
20082026- Command names like checkout and add are counter-intuitive for what they actually do2023-03-31
- Command names like blame and cherry-pick are confusing to understand2023-01-04
- Command names like commit, rebase and merge are unintuitive, so users struggle to know what to run2022-01-01
Must repeatedly split and skip hunks to stage the right changesUnreviewed
20082026- Staging works one hunk at a time, which is painful to use compared to selecting lines2024-04-08
- Hunk-by-hunk prompts lack context and can't split hunks, forcing a raw diff editor2024-02-17
- Hard to stage individual lines in hunks that can't be automatically split2022-03-20
Pull-before-push sequence is unclear, merging in others' work unintentionallyUnreviewed
20082026- Defaults push people into merge pulls and large commits, so developers don't understand rebase2023-08-05
- Git pull creates unwanted merge commits by default instead of rebasing2021-08-13
- Pushing without pulling first forces a merge commit, and undoing that mistake is painful2021-06-21
Worktrees are hard to manage, with conflicts and confusing branchingUnreviewed
20082026- Worktrees cannot share the same branch, so only one can use master2026-08-24
- Worktrees are annoying to manage: branch-name workarounds, many directories to track, stale ones needing prune2026-07-30
- Worktrees are hard to manage, with conflicts and confusing branching2026-06-22
Staging area causes surprises that users don't expectUnreviewed
20082026- Staging a few non-adjacent lines in a single file via git's interactive mode is really painful2026-06-22
- Even experienced users find interactive git staging complicated and prefer IntelliJ2025-12-24
- Confusing staging-related flag names and output make Git needlessly hard to learn2025-12-09
Git branches differ from what other software calls branchesUnreviewed
20082026- Git's branch naming is confusing because a branch is really just a pointer2026-05-18
- Unexplained switch to multiple default branch names confuses new engineers creating repos2026-02-21
- Branch names like origin/foo are confusing and remote branches are misleadingly named2024-07-13
Hard to tell how far back in the reflog to undo a rebaseUnreviewed
20082026- Can't find how to undo a long, bad rebase, so the repo must be nuked2026-01-13
- Undoing a git rebase that updates many branches is not easy2025-02-05
- Easy to mess up rebase, leaving repo needing deletion and re-clone2023-01-23
Cloning a repo with many binaries takes days, so folders get copied manuallyUnreviewed
20082026- Old repos reference remotes that no longer exist, leaving incomplete clones2023-03-03
- Cloning a monorepo takes 5+ minutes even shallow and with LFS, no good subset checkout2021-11-15
- Rebasing is slow in monorepos with many changing files2021-10-17
Add-then-commit staging confuses learners and persists into rebaseUnreviewed
20082026- Junior developers get lost when the staging area and index are introduced2022-10-10
- Index staging with add then commit confuses learners and persists into rebase and cherry-pick2022-07-05
- Forced staging index confuses new users between changing a file and committing it2022-02-19
Undo isn't straightforward among inconsistent commandsUnreviewed
20082026- Lacks easy undo, feedback, consistency, and discoverability in commands2023-06-03
- Inconsistent, confusing commands; common tasks like undo aren't straightforward2023-04-26
- Undoing mistakes is hard because the commands are cryptic and there are many options2022-07-24
Merge commits clutter the log with noisy entriesUnreviewed
20082026- Git can't tell a branch was merged after its commits were rewritten2026-08-18
- Commands show nothing for merge commits, so people can't find changes on side branches2026-01-13
- Merge commits wrongly credit the merger as author of merged lines, hurting debugging2024-07-03
Merge conflicts push users into random actions that break reposUnreviewed
20082026- Gets merge conflicts on single-user projects and has to delete the repo to escape them2024-01-06
- Beginners get lost recovering from merge conflicts or rejected pushes, making their repository worse2023-11-25
- Merge conflicts are frustrating to resolve, pushing users into random actions that break repos2023-09-15
Must learn it deeply just to use it at allUnreviewed
20082026- Steep initial learning curve; people get frustrated not knowing how to fix messes2023-03-30
- Steep learning curve means people must learn it deeply to use it at all2022-01-18
- Steep learning curve, sharp edges can cause permanent loss of work2020-06-11
Recovering from mistakes takes disproportionate effort for little valueUnreviewed
20082026- Doing things is harder and mistakes are easier to make and harder to recover from2025-10-31
- Hard to learn and recover from mistakes; requires disproportionate effort for little value2024-07-13
- Hard to know where to start and hard to recover from mistakes2022-09-01
Workflow exposes implementation, hard for non-developers to useUnreviewed
20082026- Simple workflows break down; the tool is legendarily complicated and difficult to use2024-10-20
- Developer gave up on it due to complexity and poor workflow2024-01-28
- Very complicated workflow too close to its implementation, hard for non-developers2020-08-28
Hard to remember which command discards file changesUnreviewed
20082026- Reverting one file while keeping other changes requires many obscure steps and memorized incantations2026-07-19
- Throwing away changes and ignoring files is cumbersome; stateful ignore process requires manual untracking2021-04-27
- Inconsistent commands for discarding file changes, hard to remember which to use2019-05-14
Staging area is called index, cache and staging, causing confusionUnreviewed
20082026- Uses internal jargon like staging and index, and its CLI is huge and byzantine2024-01-09
- Confusing names like index and reset; reset docs are hard to understand2022-06-25
- Reset juggles several concepts at once (HEAD, index, working tree), making it hard to understand2021-10-22
Deleting a remote branch is confusing for usersUnreviewed
20082026- Cannot version-control branch deletions or recover deleted branches cleanly2024-07-02
- Git makes it hard to delete a version after secrets were committed2024-05-10
- Git commands can silently delete uncommitted work without any confirmation or warning2021-06-22
So many how-to guides are needed to use itUnreviewed
20082026- Users must spend tens of hours learning internals to use it2023-06-18
- Needs a cheat-sheet or must be put up with, hard to learn2021-11-25
- Hard to learn; users must consult the manual even once2019-11-01
Switching branches silently deletes uncommitted changesUnreviewed
20082026- Cannot cleanly separate simultaneous changes into multiple dependent branches2026-05-16
- Switching branches with staged or uncommitted changes requires care2021-04-27
- CLI is fragile, so a wrong switch can destroy changes on another branch2020-08-16
Poorly chosen defaults make mistakes easy to makeUnreviewed
20082026- Default settings are bad, leading users to do the wrong things2025-02-05
- Lacks a consistent UI, and defaults copy the original awful UX, so users must configure it2024-07-29
- Useful settings exist but aren't defaults, making first-time use harder2020-11-17
Needs many explanatory articles to understandUnreviewed
20082026- Tutorials' backwards-pointing arrow diagrams are unintuitive and make Git seem more mystical2021-07-04
- Jargon for the same concept and help text leaves users less sure what commands do2021-06-21
- Documentation for advanced commands is too full of jargon to understand2020-09-04
Easy to enter detached HEAD state and hard to recover fromUnreviewed
20082026- Detached HEAD state is hard to tell apart from named branches in the prompt2026-04-15
- IDEs let users easily enter detached HEAD state with no help recovering2025-02-05
- Easy to mistakenly enter detached HEAD state and hard to recover from2025-01-17
Merging heavy branches is painful to learnUnreviewed
20082026- Confusing mix of branch and path syntax trips up newcomers to git2026-07-23
- Juggling several work-in-progress branches in a Git working copy becomes complex and tedious2026-04-12
- Git's branching model causes confusing conflicts and errors that are easy to screw up2024-01-22
Ours and theirs meanings flip between rebase and mergeUnreviewed
20082026- Confusing merge conflict interface and 'ours vs theirs' naming make conflicts hard to understand2026-03-22
- Ours/theirs terms confuse newcomers and mean different things across tools2026-01-13
- "Yours" and "Theirs" labels mean opposite things in different contexts, confusing users2024-02-13
Too many features make it hard to work out proper usageUnreviewed
20082026- Many powerful features are difficult to use and not intuitive2026-04-15
- Too many features; users only need a small subset, so it feels complex2024-04-05
- New UI is harder to use; colleagues struggle to find hidden features2024-03-29
Push rejection messages are cryptic and give no next stepUnreviewed
20082026- Push rejection error is confusing to users, per the quoted example2024-07-06
- GUI gave a wrong error message for a rejected push2021-06-10
- Push fails with a long, semi-helpful error message that is hard to act on2016-05-10
Shallow clones break git log and blame, sparse checkouts need the full repoUnreviewed
20082026- Large binaries make cloning and pulling very painful, and git log -S crashes on them2025-06-12
- Clones of large repos fail, pushes randomly fail, and pulls create unexpected conflicting branches2020-11-17
- Partial checkouts of large repositories are hard to do in Git, unlike Subversion and Perforce2019-04-24
Must read multiple man pages to find needed informationUnreviewed
20082026- Must search or read multiple man pages to find needed information2021-04-06
- Man pages are badly written, so fixing problems means lots of searching2018-04-11
- Most users must consult man pages or Stack Overflow to perform common actions2017-03-31
Overloaded concepts and terms cause unexpected behaviorUnreviewed
20082026- Interface is too hard for beginners, and undo unexpectedly discards index and local changes2021-06-21
- Inconsistent, patternless interface with confusing terms like index, reset and revert2020-08-16
- Interface is abysmal, uses multiple terms for same concepts2019-11-20
Mail clients are hard to configure for git-over-emailUnreviewed
20082026- Mail clients are hard to configure correctly for git-over-email, so it is user-unfriendly to set up2026-04-29
- Setting up git send-email to work with modern mail servers is confusing and variable2025-08-17
- Setting up email credentials for git-send-email takes obscure steps and careful configuration2025-03-06
Recovering from a mistake or undoing it becomes complicated and dangerousUnreviewed
20082026- Easy to use until a mistake, then recovering or undoing it becomes complicated and dangerous2025-10-30
- Easy to make irreversible mistakes and hard to undo them2020-11-17
- Non-intuitive to use, making it easy to accidentally delete work2017-08-18
Command-line inconsistency forces users to think in commitsUnreviewed
20082026- Commands don't make sense and lead users to misunderstand commits as changes2023-06-17
- Stacked commits are painful in git, requiring custom shell scripts to make simple2022-11-16
- Command interface is unintuitive, exposing internal commit graph representation to users2022-08-06
Easy to forget new untracked files, so they're left out of commitsUnreviewed
20082026- Easy to forget new untracked files, so they get left out of commits2025-12-14
- Completely removing a committed file requires rewriting history with obscure, hard tools2025-04-24
- Cluttered output makes it easy to forget files needed for commits2023-08-01
Manual committing means people forget to commit their changesUnreviewed
20082026- The commit step's wording confuses people about what committing means2026-04-22
- Requires manual committing, so people forget to commit changes2022-11-22
- Commit signing is so hard to set up correctly that people struggle to recommend it2021-06-21
Confusion comes from underlying concepts, not verb names like pushUnreviewed
20082026- Git's opaque terms like push, pull, commit, and origin were not intuitive to learn2021-07-04
- Man page description of git push is unintelligible to newcomers, using undefined jargon like refs2021-04-08
- Hides Git terminology, so users must learn how Git concepts map onto the UI's own terms2015-03-04
Each command does many things, so finding one means long help pagesUnreviewed
20082026- Users must read docs for simple tasks and guess what commands will do2024-01-12
- Needs a long book to learn which commands to run next2017-12-18
- Simple tasks are hard; must read pages of docs to choose right command2014-08-02
Stash stack loses entries on pop and can't pop with uncommitted changesUnreviewed
20082026- Stash pop fails confusingly and suggested restore --staged seems to wipe local changes2025-03-02
- Stashes form a numbered stack; only the top one can be popped, and popping deletes it, risking data loss2022-11-16
- Stash is a stack, so popping loses entries and can't pop with uncommitted changes2018-11-23
Long commit messages wrap badly in the terminalUnreviewed
20082026- Tools show only the first line, so long commit messages are almost never seen2024-02-01
- Small commit message fields make long messages feel like wrong tool usage2022-08-02
- Generates verbose, ugly commit messages made of JSON2015-02-20
Email-based patch submission is hard for contributors to useUnreviewed
20082026- Email-based patch submission is archaic and hard for contributors to use2025-03-06
- Email-based patch workflow feels worse than GitHub's pull requests for handling changes2023-07-18
- Emailing patches via git send-email is more hassle than centralized pull requests2022-07-25
Docs don't help with real-world mistakes, conflicts or undoing errorsUnreviewed
20082026- Docs don't help with real-world mistakes, conflicts, or undoing errors2023-11-23
- Users without a mental model fix mistakes by awkward trial and error2021-06-14
- Constantly consulting docs and undoing minor mistakes because the UI is ad hoc2020-12-17
Setting up a central repo across many projects is time-consumingUnreviewed
20082026- No easy out-of-the-box way for repos on dev machines to find each other2022-02-20
- Game devs can't fetch just part of a repo, forcing awkward subtree and submodule setups2020-11-09
- Hard to preconfigure repo settings like submodules and merge drivers for non-technical users2020-07-27
Merge conflicts, lost changes and reset cause trouble for usersUnreviewed
20082026- Git can't rebase history containing merge commits, so the user restarts from scratch2025-08-31
- Git's API is user unfriendly; merge conflicts, lost changes and git reset cause trouble2025-02-13
- Git doesn't track renames, so merges and logs produce false conflicts2023-11-03
Stashing and untangling work-in-progress commits becomes tediousUnreviewed
20082026- Stashing, switching, pulling and untangling WIP commits becomes tedious and gets old fast2025-02-12
- Stash is not robust enough, so users resort to WIP commits to avoid losing work2022-07-22
- Bisect workflow would become unusable with every WIP commit recorded2021-07-05
Pull error message is unhelpful, so diverged branches get misdiagnosedUnreviewed
20082026- Confusing 'divergent branches' error on pull with no clear next step2025-03-03
- Easy to mistype or forget to specify a branch, risking unintended force pushes2024-04-30
- Error message after a pull is unhelpful, so people misdiagnose diverged branches2024-04-13
Merging UI pushes people toward a single mergerUnreviewed
20082026- Merges are painful because of poor native user experience design2026-03-22
- Distributed merge-centric design confuses newcomers using a centralized workflow2016-12-27
- Obvious merge UI element is misleading; people are told to use other workflows instead2015-02-15
Undoing an undo is counterintuitive and multi-step undo needs the reflogUnreviewed
20082026- Hard to undo committed mistakes in shared history2024-03-04
- Undo requires manipulating HEAD and reflog; stashes are needlessly complex concepts2023-01-08
- Lacks an undo, so mistakes are hard to reverse2022-11-16
Conflict output lacks base context, forcing lookups of each side's changesUnreviewed
20082026- Presenting conflict choices as options confuses newcomers, who blindly pick the familiar side2026-01-13
- Default conflict output lacks base context, so people can't resolve conflicts without looking up each side's changes2024-02-17
- Conflicts are discovered only after files are already changed, with no easy way back2023-10-07
Easy to reach states where users don't know how to recoverUnreviewed
20082026- Gets into bad states that are unclear, with no way to tell what went wrong or how to recover2025-02-05
- Easy to get into states where user doesn't know how to recover2016-10-03
- Beginners get into unrecoverable states when things go wrong, harder to escape than in SVN2014-02-19
Previewing pulls and undoing a bad pull is counter-intuitiveUnreviewed
20082026- Line-based diffs cause merge conflicts and make pull requests hard to read2026-03-17
- Each pull retrieves changes for the whole codebase, including unrelated files2023-08-14
- Contributors struggle to learn how to fix conflicts in their pull requests2021-04-08
Viewing file history or undeleting a file needs convoluted commandsUnreviewed
20082026- Too many different incantations to delete a file, hard to learn and remember2021-03-07
- Has to keep looking up commands and subflags for routine tasks like checking out old files2020-01-07
- Basic tasks like viewing file history or undeleting a file need convoluted commands2016-12-14
Command line hides which branches and commits exist, requiring memorized commandsUnreviewed
20082026- Users must memorize commands, and the command line hides which branches and commits exist2022-06-25
- Can't remember the commands to diff a branch or a single commit, must Google each time2019-11-01
- Users must memorize shell commands and delete projects when errors occur2017-08-18
Setting up SSH keys is painful for non-technical usersUnreviewed
20082026- Newcomers struggle to learn terminal, Git, and ssh-keygen key management, adding friction2021-08-12
- Students struggle to push using SSH and keys without prior experience2015-06-11
- Setting up SSH keys is arcane and unintuitive for Windows-only users2012-05-21
Aliasing a builtin silently causes confusing behavior, with no warningUnreviewed
20082026- Commands are so ad hoc that users must rely on personal aliases to operate it2023-02-28
- Too much command line syntax to look up and alias2018-08-05
- Can't set default flags on aliases, so must create awkward workaround commands2016-09-30
Pull and fetch names mean different things despite seeming similarUnreviewed
20082026- Terminology like 'Pull Request' is backwards from other version control systems, confusing2024-05-27
- Command names like fetch, pull and clean -nx are confusing and frustrating2023-01-08
- Distinction between pull and fetch was confusing when first learning2020-11-17
Hard to remember many commands and find commit hashes in logsUnreviewed
20082026- Hard to remember many git commands and find commit hashes in logs2016-11-11
- Checking out a specific commit takes hours of research due to countless command variations2015-05-10
- Hard to select commits matching complex conditions with git's command line options2014-10-26
Newer features are ugly and need extra manual config setupUnreviewed
20082026- Installing Git means wading through many confusing alternate configurations and packages2026-03-24
- Newer Git features are ugly to use and need extra manual config setup2021-08-17
- Hard to set up shared git config settings for a distributed team2020-07-27
Rebase conflicts that go wrong force restarting the workUnreviewed
20082026- Rebasing halts on conflicts, so you can't resolve them separately from the rebase2026-09-04
- Rebase conflicts force stopping work and restarting if resolution goes wrong2025-07-22
- Rerere is undiscoverable, and rebasing forces repeated conflict resolution and clashes with shared-history rules2024-09-16
People copy-paste commands they don't understandUnreviewed
20082026- Poorly designed interface makes people copy-paste commands they don't understand2025-06-05
- Unusual commands are hard to remember, so users copy snippets from Stack Overflow2023-08-08
- People get completely lost when something goes wrong and can only copy-paste fixes2017-12-18
Git output is inconsistent to parse and its format options are underdocumentedUnreviewed
20082026- Git works poorly with binary and non-text files, forcing awkward tooling workarounds2023-07-19
- Typing nested file paths to git add is slower than copy-pasting from git status output2016-07-23
- Parsing git's output is inconsistent and its format options are underdocumented2014-03-07
Experts still mess up many footguns on hard tasksUnreviewed
20082026- Makes even basic things difficult and lets experts easily make destructive mistakes2025-02-05
- Makes it easy to do the wrong thing and hard to do the right one2024-01-02
- Makes nearly every common task a pain to do2023-01-08
Rebase parameters and the --onto flag are confusingUnreviewed
20082026- The rebase --onto invocation is extremely unintuitive to use2026-05-18
- Rebase parameters and the --onto flag are confusing to use2023-12-11
- The --onto rebase command for stacked branches is confusing to get right2021-11-17
Applying one stashed file requires checkout, which is unintuitiveUnreviewed
20082026- Staging area and stash behave inconsistently with commits, requiring extra special commands2025-02-05
- Creating a branch via checkout and odd stash pop staging behaviour confuse users2023-06-05
- Command syntax is unintuitive and inconsistent across similar operations, like deleting branches and stashes2023-02-28
Size warning on small screens forces zooming out until text is unreadableUnreviewed
20082026- Text too small on high-res display; zooming enlarges text but shrinks margins2025-07-16
- Zooming on mobile makes a left rectangle expand and cover the screen2016-02-05
- Text is annoying to read on iPad, requires zooming in2013-04-08
History-editing commands are hard for beginners to useUnreviewed
20082026- Commands have convoluted options, so even small history edits take many obnoxious commands2022-11-10
- Hard for new users; requires learning a small language to manage history2022-09-03
- History-editing commands are hard for beginners and the UI is occasionally poor2019-05-10
Non-developers can't undo things partially outside linear commitsUnreviewed
20082026- Visual git clients corrupted repositories and leave users unable to do anything beyond basic commits2021-08-01
- Non-developers struggle badly to undo things partially, and version control becomes painful beyond linear commits2017-12-12
- Automatic commits and syncing could accidentally push junk files to everyone on the project2017-03-30
Poorly named commands often do the wrong thingUnreviewed
20082026- Users get lost when something goes wrong outside basic commands, so they re-clone2023-08-07
- Commands are poorly named and often do the wrong thing, confusing new users2019-11-01
- Users lose work through confusing commands, with frequent incidents of lost changes2019-05-14
Behavior is unpredictable, so users memorise commands by roteUnreviewed
20082026- Hard to understand; users must memorize commands and keep syncing by rote2021-11-06
- Inconsistent interface with context-dependent behavior that requires rote memorization2016-09-09
- Interface is inscrutable and unpredictable, so users memorize commands by rote2016-05-11
Verbs like checkout don't match what they do, so commands can't be memorisedUnreviewed
20082026- Basic actions are hard to remember because the CLI is not structured sensibly2024-10-20
- CLI forces users to memorize tool internals instead of offering intuitive, consistent design2024-04-07
- CLI is involved and confusing, e.g. 'checkout -b' and too many switches to remember2022-11-05
Overloaded command is a footgun that silently causes mistakesUnreviewed
20082026- Overloaded command is a footgun that can silently cause mistakes2026-04-14
- Overloaded command causes users to accidentally lose work through mistakes2023-11-25
- Overloaded command makes it easy to do the wrong thing accidentally2023-11-22
Fixing a diverged branch needs obscure commands, so people copy the repoUnreviewed
20082026- Fixing a diverged branch needs obscure commands, so people copy the repo instead2026-05-25
- Repos split between main and master, so users must remember and retype the branch name2025-02-04
- Mixed master and main names force remembering which repo uses which, and mistakes clobber working trees2024-02-16
Easy to commit unintended changes or lose local config editsUnreviewed
20082026- Easy to commit unintended changes or lose local config edits2024-12-12
- Can't figure out how to throw away local changes, so relies on a GUI for anything beyond basics2016-02-21
- Personal IDE tweaks in shared config files show as modifications and must be undone before each push2015-02-01
Implementation complexity leaks inconsistently, making DAG operations hard to rememberUnreviewed
20082026- Exposes implementation complexity inconsistently, making DAG operations hard to remember2022-11-16
- Shows full DAG by default, confusing users expecting a simple linear history2017-05-08
- UI is sometimes weird because it began as low-level tools for manipulating a DAG2012-01-19
GUIs lack drag-and-drop for rebasing commits, forcing tedious text editsUnreviewed
20082026- GUIs lack drag-and-drop and copy-paste for rebasing commits, forcing tedious text edits2025-03-02
- GUI clients are slow, cluttered, and can't show diffs between selected revisions2015-05-01
- Committing selected hunks takes several separate commands and manual editing, far less efficient than a GUI2010-09-28
Index and commit IDs are hard-to-understand abstractionsUnreviewed
20082026- Hard to understand changes and review code due to per-commit granularity2023-06-03
- Hash-based commit IDs are hard to refer to compared with sequential revision numbers2018-04-11
- Adds many hard-to-understand abstractions like the index and commit IDs2011-07-14
Hard to remember which option produces the desired resultUnreviewed
20082026- Hard to figure out which command is needed; command structure and options are non-orthogonal2023-05-26
- Hard to remember which command option produces the desired result2021-06-22
- Hard to remember which command does a given operation, so users must guess2017-04-27
Old versions show confusing errors instead of saying to upgradeUnreviewed
20082026- Old Git versions show confusing errors instead of saying they need upgrading2022-06-23
- Forgets the git commands needed to update plugins, must check notes or docs2021-02-17
- Editing a hunk for git add --patch often produced errors in the git CLI2017-12-12
Terminology is confusing and branch deletion syntax is hard to useUnreviewed
20082026- Can't remember or guess syntax for merges, recovery, branch deletion, and bisect undo2023-04-20
- Status says branch is up-to-date and clean when it is misleading; undo is complicated and coarse-grained2015-05-01
- Terminology is confusing and branch deletion syntax is awful to use2013-02-20
Commands are learned by use-case, not concept, so mastery takes monthsUnreviewed
20082026- Commands and switches are not orthogonal or intuitive, requiring significant time to master2020-01-07
- Takes months to master because commands are learned by use-case rather than concept2019-12-24
- Takes a very long time to master, sapping time for other work2016-10-25
Hooks can't be auto-installed, so teams must set them up manuallyUnreviewed
20082026- Developers must remember to manually set up the hook in every repository2025-10-20
- Config is decentralized, so a team can't enforce shared hooks, diff tools, or settings2021-04-27
- Hooks can't be auto-installed on everyone's machine, so teams must set them up manually2018-07-28
Users must guess invocations and avoid footgunsUnreviewed
20082026- Leaky abstractions and overloaded commands force users to guess invocations and footguns2023-11-02
- Storage-layer details leak to users and single commands serve many unrelated purposes2022-11-16
- Incoherent commands and leaky abstractions make it hard to understand top-down2018-03-14
Must stop to recall file-adding and push syntax when committingUnreviewed
20082026- Moving to the next commit requires remembering confusing commands and DAG details2026-05-18
- Entering a multi-line commit message on the command line is painful; -m only suits one-liners2024-03-21
- Committing from the command line requires stopping to recall file-adding and push syntax, slowing the commander down2017-03-31
SSH keys and host settings must be copied to several placesUnreviewed
20082026- Confusing auth errors and convoluted non-default ssh key cloning, easy to get into bad state2026-06-18
- Cannot set SSH parameters and key paths via .ssh/config, leaking identities and blocking jump hosts2024-02-21
- SSH keys and host settings must be copied into several places and paths are mixed2013-01-30
Branch operations take many CLI steps and are easy to botchUnreviewed
20082026- Newbies struggle with CLI, mess up branches, and fear rebasing2025-01-16
- CLI terminology is confusing, e.g. 'the index' and deleting remote branches are hard2023-03-30
- CLI branch operations take many steps and are easy to botch, unlike visual clients2020-11-17
Silent LF to CRLF conversion causes a hard-to-diagnose build errorUnreviewed
20082026- Default LF to CRLF conversion causes problems working with files in WSL2021-10-10
- Merges insert LF conflict markers into CRLF files, and the needed settings are obscurely documented2016-01-26
- Silent LF to CRLF conversion caused a confusing, hard-to-diagnose build error2013-02-25
Uppercase protocol in URL makes clone fail, requiring lowercasing itUnreviewed
20082026- Git's --end-of-options flag breaks the usual -- convention, so users must remember a special case2026-07-23
- Uppercase protocol in URL makes git clone fail, so user must remember to lowercase it2025-11-07
- Renaming a folder just to change its case confuses git, catching the user often2010-10-29
Checking repo state via the CLI is slower and less clear than a GUIUnreviewed
20082026- CLI has an awful confusing UX and doesn't show repository state easily2026-07-23
- Inspecting repo state via the CLI is slower and less clear than a GUI2019-07-24
- Command line makes it harder to see repo structure and resolve merges2017-12-12
No symmetric command to unstage a file, needs obscure reset syntaxUnreviewed
20082026- Hard to find the right command to unstage a file; restore --staged is confusing2024-04-06
- No symmetric command to unstage a file; unstaging needs the obscure git reset syntax2021-06-21
- Unstaging a file requires the unintuitive 'git checkout -- <file>' command2016-10-27
Expert users accidentally trash repositories and spread the damageUnreviewed
20082026- GUIs corrupt repositories and don't show what operations actually did2021-11-30
- Requires heavy cognitive load and repeatedly corrupts repositories for users2020-06-29
- Expert users accidentally trash repositories and spread the damage2014-03-07
Documentation is inconsistent, so reading it worsens understandingUnreviewed
20082026- Unexpected situations lead to deep rabbit holes of documentation searching2021-06-13
- Documentation is inconsistent and confusing, so reading it worsens understanding2016-05-12
- Confusing terminology and cryptic error messages that require reading docs or searching to understand2013-03-12
No visualization of repository data, making branch juggling hardUnreviewed
20082026- Lacks visualization of repository data, making juggling branches hard without a GUI2022-10-09
- Understanding the repository graph from the command line is very hard for people2019-01-17
- Merge-heavy repository graphs are nearly impossible to follow for master history2014-01-10
Must manually stage files, since changes aren't committed by defaultUnreviewed
20082026- Forces users to manually stage files, not committing all changes by default2022-10-09
- Exact file lists break as new files are added, requiring every user to update patterns2020-01-17
- Viewing changes before committing requires double-clicking each file individually2010-11-27
Hard to guess the command when you know the goalUnreviewed
20082026- Non-intuitive for people who know the goal in plain English but not the command2019-05-23
- Unintuitive metaphors and cryptic commands for simple tasks, requiring constant searching unless memorized2018-11-23
- Commands are hard to guess when you know the goal but not the incantation2009-02-20
Command silently discards uncommitted changes irrecoverablyUnreviewed
20082026- Command silently discards uncommitted changes, unintuitive and irrecoverable, so people misunderstand it2026-04-15
- Common discard action uses an obscure command form that has nothing to do with its purpose2020-08-16
- Benign-looking commands like checkout silently erase uncommitted changes, unlike other RCS tools2010-04-17
Usability so poor that people give up on their dataUnreviewed
20082026- Last attempt at git-annex was very rough; wiki gives database errors on account creation2021-05-13
- Commenter says git-annex is so poor in usability that people give up on the data2017-09-27
- Explaining git-annex to the whole team is too big a barrier2015-04-08
Hard to track which branch and remote are in use across machinesUnreviewed
20082026- Confusing usage patterns, flaky tools, and leftover branches and remotes that can't be removed2017-05-26
- Hard to track which branch and remote are in use across machines, causing mistakes2013-02-16
- Hard to delete local caches of remote tracking branches2012-03-20
Squash, merge and rebase commands are hard to tell apartUnreviewed
20082026- Confusing command names like rebase, squash, and theirs/ours even confuse experienced engineers2026-03-22
- Separate squash, merge and rebase commands are confusing to tell apart2018-12-14
- Term 'squash' is confusing because it's used for a merge that keeps history2016-04-02
Context-sensitive commands are hard to predict and use correctlyUnreviewed
20082026- Command line forces users to hold lots of context in their head2023-12-10
- Overloaded context-sensitive commands are hard to predict and use correctly2021-08-01
- One command does four different things, requiring lots of context to parse2013-12-04
Staged-changes flag is buried in docs and has inconsistent namesUnreviewed
20082026- Staged vs unstaged changes concept is confusing to users2024-02-03
- Staged changes have three names and need an obscure option to diff2021-04-08
- Staged-changes flag is buried in docs, so users miss it and see inconsistent names2017-12-12
No obvious way to blame or view a specific file's history by clickingUnreviewed
20082026- No obvious way to blame or view history for a specific file by clicking2025-11-11
- Having to tiptoe around files you don't want in history2023-08-01
- Confusing to view a single file at different points in history2010-06-11
Accidentally unreachable commits take googling and trial to recoverUnreviewed
20082026- After a commit fails partway, recovering requires digging into plumbing and dangling objects2017-12-13
- Accidentally made commits unreachable, and recovering them took googling and trying2014-12-12
- Users can't find how to recover from detached HEAD commits; docs and search fail2010-11-04
Hard reset discards uncommitted changes with no backupUnreviewed
20082026- Unstaged changes are lost for good after reset --hard, despite the reflog's promise2023-02-28
- Reset --hard also changes working tree files, a surprising side effect2021-07-05
- Hard reset discards uncommitted changes with no backup, so work is easily lost2017-06-12
Leaky abstraction forces use of plumbing commandsUnreviewed
20082026- Leaky abstraction forces users to use plumbing commands more often than not2025-09-01
- Users must know magic incantations; plumbing commands are hard to pick2023-11-06
- Exposes too much plumbing and has a baroque interface for certain tasks2015-02-15
Branches break too often, so users avoid themUnreviewed
20082026- Branches bug out too often, so the commenter avoids using them2024-04-05
- Switching branches rewrites the working tree, which the commenter finds annoying2020-11-17
- Switching branches with uncommitted changes is so cumbersome the commenter browses history on GitHub instead2018-11-30
Unusual operations can leave the repository unrecoverableUnreviewed
20082026- Tooling frequently puts the repo into nonsensical states and is nearly unusable2020-11-06
- Non-routine operations are impenetrable and often leave repositories in irrecoverable states2020-10-13
- Unintuitive and hard to learn; out-of-ordinary operations often leave repository unrecoverable2020-06-29
Low-level primitives are too hard to use, forcing workaroundsUnreviewed
20082026- Flexible tools take years to learn before they work for basic use2022-08-06
- Tool's low-level primitives are too hard to use productively, forcing workarounds2020-10-13
- Tooling gives no guidance, so developers must keep workflows in their heads and often get them wrong2020-03-04
Partial checkouts are awkward to useUnreviewed
20082026- Developers must set up LFS correctly, and missed steps silently commit binaries or checkout pointers2026-06-17
- Partial checkouts are awkward to use, and LFS locks are buggy2026-03-22
- Second auth system and parallel commands to learn; broken checkouts without the LFS extension installed2020-01-07
New users land in unexpected rebase states and can't tell what happenedUnreviewed
20082026- Novice users create messes and nightmares when they try to rebase2017-08-09
- New users get into unexpected states during rebases and can't tell what happened2017-05-23
- Many interacting versions make new users easily reach inconsistent states they cannot recover from2014-11-13
Confusing defaults must be learned through trial and errorUnreviewed
20082026- Average users must expend extra effort to learn it and avoid mistakes2020-12-17
- Confusing defaults that every user must learn through trial and error, wasting time2020-11-17
- Non-obvious best practices and quirky defaults that users must learn over time2016-12-21
GUIs leave users stuck and frustrated when things break in edge casesUnreviewed
20082026- GUI gives vague errors or silently does something wrong instead of explaining the problem2021-08-01
- UI is not well thought out and creates countless corner cases2020-11-17
- GUIs aggravate problems when things break in weird edge cases, leaving the user frustrated2020-04-22
Docs don't distinguish when snapshot and diff models applyUnreviewed
20082026- Docs do a poor job distinguishing when snapshot and diff models apply2024-01-06
- Snapshot model and rerere behave unintuitively, not matching what users expect2022-07-05
- Hybrid snapshot and diff-patch model makes merges and pulls confusing to understand2022-06-25
Unreviewed issues were grouped by machine: Claude Haiku labelled each comment as a usability complaint, named what it's about and summed up the problem in a line, and a small model grouped similar problems. Nobody has checked them by hand. Expect mistakes.
The newest 50 complaints
- Poor ergonomics, conflict resolution and error handling in git-subrepo2026-10-15
- The proposed way to track release history is complicated and unintuitive to use2026-10-14
- Submodules have poor user experience that makes them awkward to work with2026-10-01
- Git's command line is ugly and hard to remember2026-10-01
- Git history is hard to navigate and review history is lost after merging PRs2026-09-22
- Branch names with odd characters or clashing names cause fetch failures and confusion2026-09-22
- Has many footguns that make it error-prone and painful to use2026-09-10
- Must still run a separate command to update submodules, and the automatic flag is buggy2026-09-05
- No simple way to undo git add; must copy folder or check out old commits2026-09-05
- Switching branches where submodules were added or removed becomes a mess2026-09-05
- Git graphical interfaces end up slower than the command line for basic tasks2026-09-05
- Rebasing halts on conflicts, so you can't resolve them separately from the rebase2026-09-04
- Git's native interface has horrible UX, so users opt out in favor of alternative tools2026-09-03
- CLI is complex and inconsistent; options and terminology don't carry across commands2026-09-02
- When something goes wrong, the user can't work out how to fix it and must search for magic commands2026-09-02
- Git's command line is notoriously inconsistent and verbose2026-09-01
- Default git UX is hostile to users until they master it2026-08-31
- Worktrees cannot share the same branch, so only one can use master2026-08-24
- Worktree commands are verbose and need manual steps to copy .env files and install dependencies2026-08-24
- Git loses track of moved and edited binary assets, showing them as deleted and recreated2026-08-20
- Git feels miserable to use without layered-on hosting features like GitHub's2026-08-18
- Git can't tell a branch was merged after its commits were rewritten2026-08-18
- Plain git feels very slow and abrasive when coordinating many agents2026-08-18
- Constant context switching between terminal views to see the commit tree and commit contents2026-08-18
- Git's interface is poor and it's easy to make destructive mistakes2026-08-18
- Splitting a commit requires an obscure rebase-edit sequence most users wouldn't guess2026-08-18
- Worktrees are annoying to manage: branch-name workarounds, many directories to track, stale ones needing prune2026-07-30
- Unfriendly interface that is hard for people to use2026-07-29
- Can't revisit hunks already accepted or rejected, so accidental skips mean starting over2026-07-29
- Same conflict reappears on each commit, so earlier resolutions seem lost2026-07-27
- Easy to know what to do in its model but hard to tell git how2026-07-27
- Never got comfortable with merging in Git2026-07-26
- Git is considered unintuitive and hard to use2026-07-26
- Confusing terms and inconsistent CLI make it hard to learn2026-07-26
- Confusing mix of branch and path syntax trips up newcomers to git2026-07-23
- Command-line interface is wildly inconsistent, hard to understand2026-07-23
- Its user experience is notoriously confusing and hard to make sense of2026-07-23
- CLI is inconsistent and hard to learn2026-07-23
- Git's --end-of-options flag breaks the usual -- convention, so users must remember a special case2026-07-23
- CLI has an awful confusing UX and doesn't show repository state easily2026-07-23
- CLI is too painfully inconsistent, so the author avoids it2026-07-23
- Advanced git features are confusing and unintuitive to understand2026-07-23
- Reverting one file while keeping other changes requires many obscure steps and memorized incantations2026-07-19
- Commands are barely related to what they do, needing knowledge of the storage model2026-07-19
- Forces users to read full documentation and pass a value for every parameter2026-07-15
- Interactive rebase commands can leave the working tree half-broken, causing fear2026-07-14
- Merge-heavy history makes git log output a screenful of pipes, hard to read2026-07-14
- Git commands are confusing until the user understands the underlying data structures2026-07-14
- Checkout command has overlapping modes that can silently discard uncommitted changes2026-07-14
- Rebase requires memorizing command line options and building a mental model2026-07-14