Equivalent Perforce Shelving Command in GitHub
Tags: beginners, perforce, github
Published: 2023-12-02 02:10:55

**Let's explore git stash usages, which is equivalent to (not 100%) perforce shelving files concept**

In Perforce, you can shelve files. The idea allows you to save your temporary changes (shelve files) and retrieve them later (unshelve files).

I'm a Perforce guy. So, I wonder what is the equivalent shelving files in GitHub? After doing some research, I think the equivalent Perforce shelving files command in GitHub is **git stash**.

## git stash is Similar to Shelving Files

Well, it is not 100% equivalent. The key difference is **git stash is purely local,** while Perforce **shelved files are in the server**. Since it is local, you're the only one who can access the changes. If you want to share with others, you have to create a branch and commit your changes to the remote repository (this will not be covered in this article).

Other than that, I think git stash is pretty much similar to shelving files in Perforce. Let's explore its usages!

## git stash save "&lt;description&gt;"

You can also just use `git stash` but it automatically generates the description for you which is often wrong and incorrect. So, I prefer to use `git stash save` command instead with a description that I want to save.

```plaintext
C:\Work\AndroidStudy\Demo\CleanEmptyCompose> git stash save "First Changes"
Saved working directory and index state On master: First Changes
```

Once your changes are stashed, it restores to the original version before you make any changes. You can now make another change and stash it again.

```plaintext
C:\Work\AndroidStudy\Demo\CleanEmptyCompose> git stash save "Second Changes"
Saved working directory and index state On master: Second Changes
```

## git stash list

To see all the stashed files, you can `git stash list` command.

```plaintext
C:\Work\AndroidStudy\Demo\CleanEmptyCompose> git stash list 
stash@{0}: On master: Second Changes
stash@{1}: On master: First Changes
```

So, I have 2 changes now.

## git stash apply "&lt;stash name&gt;"

To restore my first changes, I run `git stash apply "stash{1}"` command:

```plaintext
C:\Work\AndroidStudy\Demo\CleanEmptyCompose> git stash apply "stash@{1}"
On branch master
Your branch is up to date with 'origin/master'.
```

## git stash drop"&lt;stash name&gt;"

To delete the stashed files for my first changes, I run `git stash drop "stash{1}"` command:

```plaintext
C:\Work\AndroidStudy\Demo\CleanEmptyCompose> git stash drop "stash@{1}"
Dropped stash@{1} (5c1cced4511bb453492f27fd6c71d74ff570b7ae)
```

If you perform `git stash list`, now you see the first changes stashed files are removed now.

```plaintext
C:\Work\AndroidStudy\Demo\CleanEmptyCompose> git stash list            
stash@{0}: On master: Second Changes
```

## git stash clear

This deletes all the stashed files! `git stash list` doesn't show anything now after you run the command.

```plaintext
C:\Work\AndroidStudy\Demo\CleanEmptyCompose> git stash clear
C:\Work\AndroidStudy\Demo\CleanEmptyCompose> git stash list
```

## Summary

There are other git stash commands (e.g. `git stash pop`/ `git stash push`, etc.) but I think the above commands are good enough for me.

For complete git stash commands, you can refer to the official documentation [here](https://git-scm.com/docs/git-stash).

---

*Originally published at [https://vtsen.hashnode.dev](https://vtsen.hashnode.dev/equivalent-perforce-shelving-command-in-github)*.