If you are newbie at Git and learning to use Git, then you will come across the common situation that is you have to change branches.
And here, these things could become a bit difficult and confusing for you. If you search for how to switch branches in git, you will come across some examples where git checkout is used and some examples where git switch is used.
So, what’s the difference between both of them? If both of these can be used for switching branches, then why are there two commands for the same thing? This article will cover the major differences between git switch and git checkout and will give you a clear understanding of both the command.
Git Checkout
The checkout command can switch the currently active branch as well as it can also be used to restore files and discard changes.
The most common use for checkout is when you want to switch to some different branch that make it the new HEAD branch.
Another useful case for checkout is when you want to restore a historic version of a certain file. Moreover , you can also reset single files to previous revisions while keeping the rest of the project untouched.
Usage Examples
1. Switch to a Branch:
In its simplest form, only the name of an existing local branch is specified:
$ git checkout other-branch
This will make the given branch the new HEAD branch.
2. Create and Switch to a New Branch:
If you also want to create a new local branch, you can use the “-b” parameter:
$ git checkout -b new-branch
By using the “–track” parameter, you can use a remote branch as the basis for the new local branch; this will also set up a “tracking relationship” between the two:
$ git checkout -b new-branch --track origin/develop
3. Checkout a Specific File from Another Branch:
Another use case for “checkout” is when you want to restore an old revision of a file:
$ git checkout 8a7b201 index.html
If you specify “HEAD” as the revision, you will restore the last version of the file, effectively undoing local changes that you have in that current file:
$ git checkout HEAD index.html
Git Switch
The switch command permits you to switch the current HEAD branch. It is relatively new and serves as a simpler alternative to the traditional checkout command.
Before switch was available, the developers uses checkout command in changing branches. The checkout command is a very versatile command. It can not only use to switch branches, but also to restore files, discard changes, and much more.
The switch command a simple alternative to checkout command . It has a very limited yet clear purpose: switching and creating branches!
Usage Examples
The most common example to simply specify the local branch you want to switch to:
1.Switch to a Branch:
$ git switch other-branch
This will make the given branch the new HEAD branch
2.Create and Switch to a New Branch:
$ git switch -c new-branch
3. Switch to a Specific Commit
git switch <commit_hash>
4. Create and Switch to a New Branch Based on a Remote Branch:
If you want to check out a remote branch, you can simply provide the remote branch’s name. When Git cannot find the specified name as a local branch, it will assume you want to check out the respective remote branch of that name:
$ git switch remote-branch
This will not only create a local branch, but also set up a “tracking relationship” between the two branches, making sure that pulling and pushing will be as easy as “git pull” and “git push”.
If you have local modifications that would conflict with the branch you want to switch to, you can instruct Git to clear your working copy of any local changes (please be careful with this!):
$ git switch other-branch --discard-changes
5. Switch to the Previous Branch
Finally, if you want to switch back to the previously checked out branch, you can simply do this by specifying only the “-” character:
$ git switch -
Which one should you use? Git Switch or Git Checkout?
If you want to switch branches then it is recommended to use the git switch command instead of git checkout. But the question is why? Git Switch was created for this specific task and due to this feature it is suitable to use for switching branches. In short for newbies Git users it is more convenient to remember that git switch
is used for switching branches, git restore
is used for restoring a commit.
So, it’s a best practice to replace the branch switching functionality from git checkout to git switch command.
Conclusion
In conclusion, Git checkout is the traditional command, used to create and switch the branches. It is also used to restore changes from a specific commit. Not limited to these, it also allows you to copy files from specific branch or commit directly into the working tree without switching branches. The features can be describes in three points:
- switch branches
- copy files from the stage to the working tree
- copy files from a tree-ish to the working tree
Remember that git checkout does more than what you think. From simple branch switching to the additional functionalities.
The idea behind this move is to let people use git switch
for switching branches and git restore for undoing changes from a commit. At the same time git checkout
remains there for advanced options to deal with tree-ish.