Skip to content
Theme:

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!