Abstract
We are comparing Git functionality in Visual Studio 2022 IDE to other Git Gui clients. Git inside VS2022 has a simplified interface compared to some other Git Gui clients, like MeGit/EGit and SourceTree. That will bring many developers to VS2022/Git platform faster but power users will need other tools too.
1. Introduction
Git is integrated into Visual Studio IDE since version 2019, and with version 2022 it has got more features and is becoming Visual Studio/Microsoft’s favorite version control management tool. We plan to give a basic overview of GUI Git tools in VS2022 in this article.
1.1 MeGit/EGit Git Gui client as a reference
I feel and is my strong opinion that standalone Git Gui client MeGit/EGit [1] is “doing Git right”. It is a Git Gui tool, but from all the Git Gui tools I have seen, this one is closest to “Git philosophy and terminology” and I like how it “looks and feels”. So, I will use it as a reference, and to better present how Gui options could/might look like compared to VS2022 Gui “look and feel”. The real reference should be, of course, Git command line interface, but I find it too hard to read for the purpose of presentation for this article. Truth is that no Git Gui can offer all the options that the command line Git interface offers to the user. But also, the truth is maybe the user does not really need all those options in everyday work. For example, I work with TFS for years and do everything from Gui and never used TFS command line [2].

1.2 VS2022 Git philosophy
By looking at VS2022 Git Gui interface, I get the impression that its designers had their own view of how Git should look like. It seems they didn’t want to follow closely Git philosophy in all the details, like for example designers of MeGit/EGit did. It looks like they believed that nasty Git details should be hidden as much as possible from the developers and the user interface simplified so developers with no knowledge of Git, but just basic knowledge of “Version control” concepts can use it and check-in (commit) their work locally and to the version control server. Maybe that was a smart approach that will bring many users/developers fast to the VS2022/Git platform due to the easy learning path. But some power Git users might feel they are missing some tools/options or might feel that Git is not being done/presented in the proper way.

1.3 SourceTree Git Gui client as a reference
Atlassian SourceTree application [3] is another popular Git Gui client. We will show in parallel how its panels look compared with VS2022 for the same operations. We think that MeGit/EGit a bit more powerful and better follows “Git philosophy” of work. SourceTree designers, similar to VS2022 designers have chosen to hide part of “Git internals” like HEAD and Refs information. Though, they are showing more of it than VS2022.

1.4 Git is not intuitive for learning
I am sure that many developers will try to “hack their way into Git” just by playing with Git Gui options of VS2022. And especially those that are coming from other Version control systems, like TFS. And it will work up to a certain level, especially since VS2022 is deliberately hiding some Git concepts, like the staging of files (typical TFS-user question would be what is staging and why do I need it?). But my advice would be, sooner or later, you need to read some Git book since Git has its own terminology and philosophy of work, and if you ever get stuck with a problem with Git, like always, you need to know exactly what you are doing and what is the proper way to resolve the problem. If you like learning by “hacking Gui tools”, my advice for learning Git would be to try playing with MeGit/EGit since that way you will see more details that VS2022 is deliberately hiding.
1.5 This is not a Git tutorial
This is not meant to be a Git tutorial. The intended audience is developers with some knowledge of Git that want to see how Git looks now in VS2002 IDE.
2. VS2002 vs MeGit
2.1 Testing methodology
We will be looking at the same Git repository from 4 tools, VS2022, MeGIt, SourceTree and GitBash.
We created a simple C# application project locally and chose GitHub for the remote repository.

The version of Visual Studio I tested with was:

2.2 Viewing the history of commits to the repository
One very basic and important function is to enable users to see the content of their repository.
2.2.1 History from GitBash
Git command git log will provide log of all commits.
Here are all commits for the current branch “master”

Here are all commits of all branches, with the current branch “master”

Here is a “graph” that GitBash can produce, all commits of all branches, with the current branch “master”

2.2.2 History from MeGit
Here is the corresponding graph that MeGit produces. It is nice graphical presentation.

It looks analogous to a “graph” that GitBash produced. Note that GitBash graph contained one more piece of information, that is the location of the place where “stash” was made, commit ac95254. MeGit can show that location, but only on request (when clicking a particular stash).
2.2.3 History from VS2022
To my best effort, I found 3 history graphs in VS2022, and all are inferior to even a command line Git graph. It seems they didn’t really care to implement it. What is happening here is VS2022 History panel is filtering and showing commits only related to the currently selected branch.
The first one, for the same repository setup, with the current branch “master” is:

They offer an even simpler version, without other branches

There is one more version, with branches refs shown:

My opinion is that VS2022 history graphs are inferior to MeGit history graph, and the power user can find such graphs useful. They provide a nice overview of changes to the repository.
A have seen people on the internet commenting: why do you need a fancy graph? To me, the answer is simple: it is called a GRAPHICAL user interface, so it would be nice to have a quality graph competitive to for example MeGit history graph.
Sadly, please notice that VS2022 does NOT show in the graph location of HEAD reference, while both GitBash and MeGit clearly show HEAD reference. It seems that VS designers concluded that Git terms like HEAD reference need to be hidden from users. I am not sure that it is really possible to use Git competently over a long period of time without the knowledge of what is HEAD reference.
2.2.2 History from SourceTree
Here is the corresponding graph that SourceTree produces. It is a nice graphical presentation.

But again, designers of SourceTree decided to hide from the user concepts like HEAD and Refs.
2.3 Viewing the Branches, Tags, Refs
2.3.1 Branches, Tags, Refs in MeGit
Branches, Tags and Refs of the project/repository can easily be seen:

Note how the currently checked-out branch “master” is marked. Also, you can see that HEAD ref is pointing to the local “master” branch tip and commit ec56b90.
In order to checkout branch “Feature1” you would need to right-click desired branch and select the option from the context menu.

2.3.2 Branches, Tags, Refs in VS2022
In VS2022, displayed info is humbler:

As far as I can see, the list of Tags is not available per se, and applied Tags can only be seen in the history graph. The list of Refs is also not available, obviously, designers thought that is too low level and not needed so they have hidden that info.
Note how the currently checked-out branch “master” is bolded. Also, the currently checked-out branch can be seen at the right bottom corner.

In order to checkout branch “Feature1” you would need to right-click the desired branch and select the option from the context menu.

But also, you can perform branch check-out from the pop-up menu in the right bottom corner:

2.3.3 Branches, Tags, Refs in SoureTree
Branches, Tags of the project/repository can easily be seen. But Refs are not shown by the GUI. Again, designer of the tool decided to hide “Git details” from the user

Note how the currently checked-out branch “master” is bolded.
In order to checkout branch “Feature1” you would need to right-click the desired branch and select the option from the context menu.

2.4 Viewing the Detached HEAD state
It is not difficult to get to the “Detached HEAD” state. You just need to check out some commit that is not the tip of the branch and then commit some more changes. Let us see how such a state is presented.
2.4.1 Detached HEAD in MeGit
Here is how the Detached HEAD state looks in the History panel:

As you can see, HEAD is pointing to the commit 40c21ff and is NOT on any branch tip. In Git terminology, that commit is in Detached HEAD state. In branches overview panel that is presented like this:

Note that NO branch is marked as selected and the HEAD ref contains id value of that commit 40c21ff.
2.4.2 Detached HEAD in VS2022
We will have a look at the same repository situation from VS2022. Here is how it looks in the Branches panel:









































Join the conversation! Your thoughts help the community grow.