ag

git switch and restore

🌸 This post has bloomed and is unlikely to change.

Git is getting easier with two new experimental commands, git switch and git restore, that were introduced in Git 2.23. They are basically git checkout split up into two, one for changing branches and another for changing files. Let’s start by taking a look at how we work with branches today and how it changes with switch.

git switch

To change to an existing branch today we use git checkout [branch-name] or if we pass the --branch flag we can create the branch at the same time (git checkout --branch [branch-name]).

With git switch the process is very similar, to change branch we pass it the branch name:

git switch another-branch

Switched to branch 'another-branch'

And if we want to create a new branch and change to it, we can pass the --create flag (or -c):

git switch -c new-feature

Switched to a new branch 'new-feature'

You can find more examples and things like creating a new branch from a specific commit in the documentation.

git restore

The other thing we often use git checkout for is restoring files to it’s “unchanged” state (resetting the working copy to how it looks in the repository).

I’ve never completely grasped the intricities of checkout for restoring files, but with git restore it becomes much easier. To restore a file that you have changed but not yet git added you do this:

git restore file.js

If you have already run git add and the file is in the index you can restore it by passing the --staged flag:

git restore --staged file.js

Finally, we can also specify where we want to restore from. By default this is the index but by passing the --source flag we can adjust it. For example we can restore the index to a revision a couple of commits back:

git restore --source HEAD~2 --staged file.js

Like switch there are a lot more examples in the documentation.

Summary

switch and restore are two new experimental commands that hopefully will make it easier to work with git from the command line. switch for changing branches and restore to change files.

WebMentions

What's this?
Nothing's here yet! Tweet about this post to show up here.