Keyboard-driven git UI's which aren't GUI are relatively niche. (I can think of magit, tig, and lazygit).
Whereas, a git beginner may be more likely to start using git with a GUI, e.g. the git panel in VSCode, or something like GitKraken.
Keyboard-driven git UI's which aren't GUI are relatively niche. (I can think of magit, tig, and lazygit).
Whereas, a git beginner may be more likely to start using git with a GUI, e.g. the git panel in VSCode, or something like GitKraken.
they make it the default to merge current branch into current branch (pull with merge) and they default to committing large amounts of code under a simple message.
i know fulltime devs who use git every day, who have no idea what a rebase is - they think merge does what really rebase does, and thats mostly the fault of bad defaults.
git commit -p should be the default committing interface also; assuming you like git history which can be bisected, reverted, etc.
Even if they cater to novice users, they aren’t novice users themselves and lack of experience is no longer an excuse when Git wrapper authors make bad choices about defaults.
The main problem is that many people just don’t care, and view VCS as an afterthought, after the actual work is done. They don’t even know how powerful git can be when used optimally.
Maintaining a clean git history is work. You have to think about it, and invest into it. But it is well worth it, in the mid to long term.
I understand different projects have different requirements for version control, but as someone who does not work on massive codebases with a huge amount of collaborators I enjoy that the GUI I use somewhat hides the complexity I don’t want to engage with.
Merged master into master
commitsHow true is this? I believed that people learned git using the CLI.
I learned git from the official book - pro-git. It's entirely based on the CLI. I've trained many to use git - again with CLI. Magit is fun to use - primarily because its UI is directly based on the CLI paradigms. Magit is often just a shortcut for the git CLI (using transient menus).
I was never really able to settle on a GUI, other than for inspecting the commit graph/DAG. The only VC tool I learned with a GUI was subversion, using TortoiseSVN. But the limitations of that GUI was very apparent and had to drop it soon afterwards.
The problem is if you mainly use a UI and get into a bad state then the UI tends to make it worse and you have a bad mental model so you're left asking for help and finding it hard to describe what you need. That's my experience anyway, I see that happen about once a month among my peers.
I used Mercurial a lot before trying Git for the first time, the projects then switched to Git.
With Mercurial I felt right at home with the command line. Everything was simple and made sense, and I seldom had to consult the documentation after a short time learning it. I never felt the need for a GUI, or that it would improve things.
With Git it was the complete opposite. Nothing made sense at the command line. I had to do web searches for just about everything I did, either to figure out what arcane set of switches to use or to make sure I didn't fuck things up. After a short while I gave up and found a GUI, which made Git much, much better to use.
Perhaps things have improved somewhat, I hear they've cleaned up the command line options a bit. But looking at the manual[1] its clearly still far from Mercurial-level of usability[2].
[1]: https://git-scm.com/docs/git-reset#Documentation/git-reset.t...
[2]: https://book.mercurial-scm.org/read/undo.html#rolling-back-a...
TortoiseGit is ugly and sucks, but the only time I've had to drop to the command line is when I need to look for the intersection or disjoint commits
TortoiseGit has many great features, including ways to compare anything you can think of.
I'm still not over Mercurial losing the DVCS wars.
With Mercurial I didn't have to, it just flowed.
Rebasing isn't difficult, merging isn't difficult. Staging is stupid so I ignore it. The stash is stupid, so I ignore it (why not just make a new branch and commit?). Bisecting isn't difficult.
Seriously, the concepts are not rocket science. Git just makes it hard to remember how to correctly invoke the thing you want to do for no good reason other than that it was hacked together in a fit of pique and those decisions have stayed with us ever since.
And a lot of the functionality is centered around an email-based workflow, which makes sense for the Linux kernel, and doesn't make sense for anybody else.
[1]: https://git-scm.com/book/en/v2/Git-Basics-Undoing-Things
I'm someone who used to train newbie staff using the git CLI. As the other commenter pointed out, the CLI often doesn't feel very intuitive. However, I personally felt that it's hard to convey what's happening behind the scenes unless you're on the CLI. And in git, it's very important to know the underlying data format and operations - unlike in case of Mercurial, for example.
All of my co-workers use git GUIs.
I use the CLI, not out of love for it, but because git is so needlessly complex and arcane that I'm scared to use GUIs. For every other tool, I prefer to use GUIs, but they're simple enough that I don't get surprised and there's no major consequences (such as making me spend 2 hours researching a solution) if there's an issue. Not so with git. Git has an awful CLI. It's needlessly complex for 99.999% of projects.
I write in Evernote notebooks as a learning journal and also a personal knowledge base (howto guides, troubleshooting guide, snippets, etc). Every note is written for a good reason, there's no meaningless info in it.
Here is the number of notes in my git notebook, along with a few others for comparison:
-git: 55 notes
-Linux: 200 notes
-C++: 130 notes
It's insane that git occupies so much mental space considering it's a single-purpose tool.
I truly wish it was never created, or at least never caught on, we might have another decentralized VCS dominating the space with an interface written for normal people.
If anyone other than Linus Torvalds had written it, we would all be using something else. If midwit geeks weren't so vain and wanted to feel cool for using the same VCS as the Linux kernel, we could've been using something else. (No, I can't choose to use something else, the dominant winner affects you whether you like it or not, same as IE6 and Chrome.)
No arguments here. What I meant is that it's very hard for me to understand what's happening behind the scenes unless I'm using the CLI. The tool is hard nevertheless.
> If midwit geeks weren't so vain and wanted to feel cool for using the same VCS as the Linux kernel, we could've been using something else.
The fact is, git won. I was personally into mercurial. The CLI was much more sane.
One of the biggest issue with git is that it uses both the snapshot model (for the storage format) and the diff/patch model (for many operations like merge and rebase). You have to know which of these applies to any operation for it to make sense.
Git always uses snapshots. The diff thing is just a question of how this is exposed in the UI.
For example, consider the case of an interactive rebase where you delete a commit. If it was based on snapshots, only that commit should disappear. The changes introduced by that commit should remain in the subsequent snapshots/commits. However, that is not what happens. The change introduced by the commit disappears from all subsequent commits/snapshots. This means that all the subsequent snapshots are modified by subtracting the patch from the commit that was deleted.
Visual Studio has an excellent history browser when I need to operate on specific commits. Both Visual Studio and Visual Studio Code have great basic git capabilities and amazing conflict editors to never touch the cli.