I've heard this multiple times now and it still boggles my mind that git is something you have to test for.
not even joking: i've seen people with like 10y of experience trying to push to main :(
https://www.davefarley.net/?p=247
What's incredible is how set some people are in their ways that they can't conceive of alternatives.
This is more about opportunity cost because instead of asking about git, you could ask about other valuable skills in your limited time with the interviewee, but I guess if git is really that important, then it's justified.
Because LLMs aren't a reason to not learn your tools. A determinist CLI command vs using a statistical machine for it. It's just a waste of tokens at the very least.
add_github_remote() {
git remote add $1 [email protected]:$2/$3.git
}2. Give your shell functions a common prefix, and/or big-endian naming convention (e.g. things that help you with git start with `@git-`)
3. Tab completion is your friend.
Some 6-figure per year developer spending a dime’s worth of tokens to do something they do once a month or so is not something I’ll ever care to optimize away…
I don't disagree that having a deterministic CLI is useful, but I'd argue that's not the question here, because the CLI is what the statistical machine will be using. The question is whether the time spend doing it manually is worthwhile compared to the tokens spend on it. I'd argue that if you instead learn how to pick the right model for the right job so that you don't use something way more expensive than needed for the task at hand, the token overhead will be extremely minimal for stuff like git operations; knowing that you can use something cheaper than like, Astra or Opus if all you want to do is a quick git cleanup and push is going to save your employer a lot more money in the long run than if you insist on doing every messy rebase by hand.
In terms of team practices, that basically seems like a code review thing. If my team has conventions around git, and a PR doesn't fit them, that's something I would point out regardless of how the PR was generated. If a team member is repeatedly not meeting the expectations we've all agreed upon, I would deal with it in the same way I always have; reach out and offer guidance for how to do things the way they're supposed to, notify my manager if they continue having trouble with it, and eventually just not bother looking at their PRs if they absolutely refuse to do things the way everyone else on the team has agreed they should be done.
Even if an LLM can hold your hand through everything, the disruption I've had because people don't understand what the LLM tool is doing, and ultimately does damage (we've had repos corrupted, systems taken offline, systems brought their knees, numerous data security incidents... it's been a fucking nightmare) is immense.
Even worse, it gave a developer a command to run that basically crushed all history across all branches, it was a mess to clean up and lost a significant amount of work. It wasn't Claude running it on its own, but was entirely driven by a mix of a developer's lack of understanding their tools, and trusting Claude's output too much.
This was also the dev trying to "remove a key he had accidentally committed" again, just letting Claude take the wheel.
Of course, the new team _also_ really loved leaning on AI so they were all behind his plan to "clean up the repo" and not just reset the key and move on.
It was a nightmare.
One time setup commands are the sort of thing people do once when setting up the repo, but dont use day to day. its understandable that people dont have that memorized and will reach for a man page, google or an AI.
Though ideally interviewers should appreciate this - unless its a hard requirement you do it by hand day to day - the rest of us can look this up quick enough.
My OS professor in college once told us about what he considered the difference between "knowledge" and "information", with "knowledge" being the underlying facts about how something works and "information" being the terminology/labeling/bucketing/etc. of how to refer to it. The point he made was that knowledge was more important than information, and that he would try to test us on knowledge rather than information. To me, knowing how the underlying version control model works and what "shapes" you might want to make with it is useful knowledge. The exact set of commands, interactions with an IDE, or specific prompts you can use to ask an LLM to produce them is information. Arguably the entire benefit of LLMs is that you can ask them to do things even if you don't have the exact information memorized; if you can describe it in a rigorous way, and recognize whether what it gives you as an output fits that or not, you don't need to know any of the actual information of how to do it manually.
jj? what's that?
I wish better names would be chosen by the tech industry, that would make search engine discoverability easier.
WHERE?! This is the first time I'm hearing about it.
They... are?
https://www.google.com/search?aep=11&udm=50&q=should+you+swi...
You can't google for "X" like it's early stack overflow days, but adding the minimum context "X that has something to do with Y" works 99% of the time.
> The command-line tool is called jj for now because it's easy to type and easy to replace (rare in English). The project is called "Jujutsu" because it matches "jj".
There is no way to verify it just by talking.
like, i dont really need to know all the stash details when i only stash one thing at a time, very temporarily
i also dont really care to know all the origin and remote definitions stuff when i only touch it once per project or so.
i could certainly draw graphs of what different git repos look like, but what makes it salient to know the rest of the details unless im actually building git itself? if youre using every git feature regularly you're probably doing something wrong
If I were hiring, I would care about whether you can `git help stash`, skim over it (bonus points for actually using the pager competently) and figure out what you need to do.
I couldn’t care less about stashing commands.
I do care about … if someone understands origins and not by definition because developer needs to know what is his local version and what is on the server and how those two affect each other. Bonus points if they understand server is not special in Git and their colleagues copy on their laptop can be origin as well.
Drawing graphs of what different repos look like? That’s irrelevant.
Irrelevant if one understands that Git uses DAG and is content addressable store.
You see someone might know those hard words but when working daily with Git reasoning about rebase or merge, cleaning up their own work with interactive rebase, making pull/merge requests or resolving conflicts it is much easier if one knows what is local what is remote and how Git stores data.
You also learn it once. In my 15 years of using Git I basically didn’t learn much new commands but having mental model of how it works was my tool to fix any problems other people had. Knowing commands or definitions is secondary.
Now I just ask google, and I get a straightforward "do this", and it works.
That's the thing, though. Stack Overflow is not and never was intended to solve your problem, nor to solve the OP's problem. It was intended to answer questions. It was your responsibility, both as someone posting a question and as someone reading the Q&A later, to adapt knowledge to your circumstances. That's why they're called questions and answers, and are not called problems and solutions.
People who use a web site to get a solution to a problem are looking for a help desk, or a forum. Stack Overflow was specifically created to be not that, and that choice was specifically motivated by the frustration people had with trying to search those kinds of sites for information, and the frustration that experts had with trying to help people (for free) in that kind of environment.
Personally I ask the LLM to summarise what the commit does and explain it to me, make sure I understand it, then review the PR. I'm getting half the speed the High Speed Sloperators are getting but I was the only person submitting PRs the other day when the LLM service was down.
For nasty multi-way git merges and rebases, it's been a game changer. And of course that's reviewable by doing a delta on the final rebase branch vs. the original branch.
With all that said... having to use LLMs at work is making me want to use them less on my own projects.
For the more important changes, I find it easier to stay on my toes by taking a pass at the codebase before comparing notes with the LLM. Looking up the answer key first makes it too easy to nod uncritically.
Git is an essential tool; not knowing how a key tool works is dangerous IMO
I have not run a single git command in like the entire 2026.
Should you resolve the conflicts in a bad way we're going to see the result in the MR, will we not?
I don't think git knowledge is essential anymore.
Back in the days of the crappy git GUIs this was a problem, because people would regularly misunderstand even the basics of what they were doing and managed to lose their local changes.
That shouldn't happen with LLMs.
Because someone who's familiar with those sorts of things can get the commands typed and running before someone who isn't has even figured out the prompt.
(Well, not so much if there's a need to identify the base commit for a squash, do some cherry-picking, etc. But in those cases I'd rather see direct human judgment of what to do than hoping the LLM understands a vague description.)
initializing a repo, staging files, adding them to the changeset, commiting then pushing those changes are easy to do. solving merge conflicts is a little complicated but IDEs make that much easier to do.
Fundamentally git is conceptually complex in a way that almost no other tool is. Others might have scarier syntax to newcomers but rarely expose the same level of underlying complexity.
the coding challenge itself is just a way to make sure that people can understand a request within an existing codebase. as an example, i pay attention to the questions the candidate asks -- questions asked always mean something.
my general assumption with seniors are "they can think high level", which means i "mark them" with that assumption, so for me, the architecture talk is much more important.
at the end of the day, you need to understand what your org needs and adapt.
The trick is to get a good sense of the algorithms associated with basic data structures (list, stack, queue, graph, hashmap,...). They are primitives and almost any standard problem can be solved with those.
What you need to train most is the capability to break down problems: Like I have this input (and associated metadata), I have this context (may be null), I have those constraints (values, ranges, memory space, time, both, or neither), and I need these outputs. Then it's just a puzzle.
I no longer prepare for coding problems other than a quick refresh of the syntax of the main language. And if it's a whiteboard type of things, I go with pseudocode.
we also ask the candidate to open a PR against the repo just to see if they know the basics of git
That's the basics of Github, not git.A candidate may be able to open a PR and not be able to make a commit without an IDE.
Another candidate might know plenty of git, but haven't worked with Github.
That seems very unlikely. Github is the entire reason git is so popular, vs. any of the other distributed VC systems.
Github was like Yahoo's directory, a way to share content in a searchable place and as a backup/bounce point. In the early days you could also upload to 'downloads' so it was a quick share host. Before that we had email, exposed ssh and cgit/gitweb but Github gave us `PR` to promote social interactions with forking. So it could be argued that Github tainted the spirit of git.
Having personally evolved from making date stamped zip files, to subversion and then to git, it earned its place quite quickly for myself and my roaming nature, didn't hurt who hacked it together either. When Linux adopted it from Bitkeeper, it became the way for many.
Personally I prefer GitLab over GitHub. The CI is better, and it doesn't go down every other week unless you self host on Azure.
I have no problem with letting an IDE or LLM handle those details in practice... but I don't think I'd want to work with someone who doesn't understand the very basics of what's going on under the hood.
The GP said "open a PR", not "make a commit and push it to a remote".
When I tell my LLM to "open a PR for those changes" (which is how I do it nowadays), my LLM understands that what I mean is "make a commit, push it to a remote and raise a PR".
Does it mean we've reached AGI when machines understand what we mean better than some humans?
This makes it seem like all of those things are part of a single operation to you. That doesn't make sense to me.
On the occasions where I've submitted a PR to a project (anywhere, not just on Github), making the commit was not part of the same operation. I'd already made the commit and satisfied myself that it captured everything I wanted, before making the PR. I don't see those things as part of a single operation. I don't think the poster you were responding to does either.
> That doesn't make sense to me.
So you think the OP is asking candidates a question, where the solution is:1. Navigate your browser to GitHub.mycompany.example.com
2. Click the repo name
3. Click pull requests
4. Click the source branch[1] and destination branch
5. Click "create pull request"
???
I started out by assuming this was some kind of good-faith disagreement, but I guess you're just trying to be funny.
[1] Presumably already extant, because they never mentioned anything about committing code, nor pushing it to github (and that's not the same operation!).
The OP said:
"we also ask the candidate to open a PR"
So I think the OP meant to have the candidate, um, open a PR. Which is not the same thing as making a commit and pushing it to a remote. Maybe you always conflate those operations, but that doesn't make them the same operation. If the OP actually meant "make a commit, push it to the remote, and then open a PR", I would have expected the OP to say, um, all of those things, instead of just the last one.
I couldn't say how the OP expected the candidate to open a PR, since I don't know what their standard workflow is. There are ways of doing it from the CLI, as well as through the web interface, as well as through various IDEs.
> I started out by assuming this was some kind of good-faith disagreement, but I guess you're just trying to be funny.
Please save your patronizing for another time. And stop trying to put words in my mouth.
How does that work? Git has no concept of pull requests.
Doesn't surprise me at all that many developers can't do this, most professional software development isn't happening on Gitub.
Interestingly, an LLM involved feels like it’s made it easier to assess candidates. Senior candidates know exactly what they’re doing and strongly driving the LLM. They pre-communicating design decisions, gotchas, and requirements. They also ask a lot of clarifying questions and dial in the scope (after all not building something is better than building it).
Less experienced candidates tend to jump right in, build way too much, and stumble because they delegated all of the critical thinking to the agent. They often end up in a place where the agent doesn’t align with their vision and they can’t really reign it back in.
Worked with a "super senior", lead architect. Management was raving about the guy before he joined. Insane resume. Skipped the regular interview process because of this.
Had to show him how to open a PR and setup his git config so his commits are linked to his account. And then his PR's failed the automated ci checks for descriptions and titles, and he came to me to ask how to fix it. The failing gh action literally says what was broken.
This is all with Claude available btw, so one could literally just ask.
I guess it's a bit of a modern fizzbuzz. Where it's so simple but still manages to stump a lot of candidates.
The idea is to see how the candidates deals with it. Maybe he will just say "fuck it" and do it by hand, or patiently point out every mistake so that the LLM gets it right. Both indicate competence, what you don't want is someone who doesn't see the mistakes and hand you slop.
You have missed the point entirely.
Will you allow jj instead. I switched to jj 1.5 years ago (as many others have), and my git is now rusty.
I mean sure, I can do add, commit, basic diff, etc. But rebase/merge - oh dear, I forget which one is source/target (jj made the infinite design choice that the ordering doesn't matter - you have two parents making a child - it's symmetric).
> we also ask the candidate to open a PR against the repo just to see if they know the basics of git -- you would be surprise how many people cannot do it
This part seems weird. "[B]asics of git"? You can Google for that and find a fossilized answer on StackOverflow. Do you really have candidates who cannot do git commit/push? Also, if you allow LLMs, then any idiot LLM will also know git basics.
first, a coding problem that is solved live (right now, online) -- it's not a hard one and most LLMs can easily one shot it.
BUT: if you are not a senior developer, you need to do it without LLM, and if you are a senior+ and do it via LLM, the bar is super raised and now you need to explain in details everything the LLM wrote as if you wrote it yourself.
the main component here is to know that the candidate understand coding in general, understands problem solving and how to dive into an existing (although quite small) codebase. solving the problem is not really the goal -- in fact, most candidates we hired did not solve it 100%, but were able to understand and explain everything that they put it on code. this usually takes 1h30.
(we also ask the candidate to open a PR against the repo just to see if they know the basics of git -- you would be surprise how many people cannot do it).
the second is an architecture interview, where we build a system together BUT instead of doing the whole spec, miro board, whatever, we do it in more of a free way: we start with a really simple, MVP level, spec and we ask how the candidate would build it. then, we add another feature, and we ask how they would go for it. during this whole thing, i ask random questions like "why would you use x instead of y?" or "why do you prefer this approach?".
one important thing: we allow the candidate to say "i don't know" and we tell the candidate that there's no gotcha questions (which is true, i hate these kind of questions). this lets the candidate be super comfortable (feedback we had from real people).
in general, this flow helped us a ton and i really really like running it :)