Skip to content

Software Engineer at Polygon

TIL — git switch & git restore

It was such an ordinary day at work. I was pair programming with my friend (hi Pedro), we finished a feature and then he jumped to the command line to type git switch. Instant WTF moment! I have been using git for years and I have never come across this one. I jumped on the docs, learned a thing and now it is time to share it with you.

New stuff in Git 2.23 #

Switching branches and restoring files to its initial state are very common operations. Why the hell should we use a single git checkout command to perform such different actions? Turns out that Git 2.23 added much more descriptive commands:

  • git switch to switch branches
  • git restore to restore working tree files

Nice and simple! Let’s have a look at the related part of release notes.

Two new commands “git switch” and “git restore” are introduced to split “checking out a branch to work on advancing its history” and “checking out paths out of the index and/or a tree-ish to work on advancing the current history” out of the single “git checkout” command.

Examples #

Some examples of how to use commands that we have learned today. Enjoy!

# switch to new-feature branch
git switch new-feature

# create and switch to new-feature branch
git switch -c new-feature

# create and switch to blank new-feature branch
# all tracked files are removed
git switch --orphan new-feature
# discard index.js changes
git restore index.js

# discard all files in the current directory
git restore .

# restore index.js from master branch
git restore --source master index.js

Comments

  • M
    Maciek Grzybek

    This is amazing. I've always had a problem with understanding why checkout is meant to do almost everything :)

    👆 you can use Markdown here

    Your comment is awaiting moderation. Thanks!
    • Pawel Grzybek
      Pawel Grzybek

      Exactly the sam my friend! Enjoy the tip :-)

      👆 you can use Markdown here

      Your comment is awaiting moderation. Thanks!
  • A
    A. Matías Quezada

    Another eye-opening post for a better command interface, thanks!

    👆 you can use Markdown here

    Your comment is awaiting moderation. Thanks!
    • Pawel Grzybek
      Pawel Grzybek

      I'm glad that you found it helpful dude!

      👆 you can use Markdown here

      Your comment is awaiting moderation. Thanks!

Leave a comment

👆 you can use Markdown here

Your comment is awaiting moderation. Thanks!