Is git stash branch-specific or for the whole repository?

后端 未结 4 1923
小鲜肉
小鲜肉 2020-12-12 18:32

I went into a branch and did some work. I wanted to go into another branch but didn\'t want to commit so I did git stash. Then I did git checkout

相关标签:
4条回答
  • 2020-12-12 19:09

    git stash is not per-branch.

    • Instead of git stash (which can be lost easily when you have lots of stashes and branches)
    • I suggest doing a git commit to save the unfinished code in your branch and when you are ready to finish the code do a git reset ${COMMIT_HASH_VALUE} to get the unfinished code back
    • git commit and git reset when used together correctly can simulate a git stash for a specific branch

    Here is a common real-life scenario that demonstrates the value and the usage the commit and reset commands:

    • you are working on feature branch X and your code doesn't even compile or pass the tests
    • there is a bug that is higher priority than the current new feature and so you must start work immediately on the bug fix
    • rather than do a git stash (and the stash gets lost in the mix because you have many stashes and many branches)
    • you can do a git commit on feature branch X
      • write down the COMMIT_HASH_VALUE for later
    • checkout a new branch Y for the hot fix
    • finish the hot fix on branch Y (do a merge request to get the hot fix into the baseline and delete the hot fix branch)
    • then checkout the feature branch X again
    • to pop your unfinished work that didn't compile or pass testing --> just do a git reset ${COMMIT_HASH_VALUE}

    (FYI the default for git reset is --mixed)

    0 讨论(0)
  • 2020-12-12 19:13

    I am not sure why every answer here suggest to emulate stash with commit+reset. Stash is perfectly fine to use, especially when working on multiple branches. I also do not want to commit when I work on multiple branches, because I want that all modified changes are still highlighted in my editor when I return.

    So here is the stash workflow:

    Whenever you have to switch the branch and your not ready to commit, save your changes to the stack

    git stash save "Your custom stash message"
    

    When you return to a branch, checkout the stash

    git stash list
    

    If you on branch FixIssue0203 you could use use git stash pop because this will apply the top stash@{0} and remove it from stash.

    However, if your in branch ImproveReadme you should first apply the stash 1 git stash apply stash@{1} and then remove stash 1 from stack git stash drop stash@{1}.

    That's it!

    0 讨论(0)
  • 2020-12-12 19:16

    No and No. git stash is per-repository.

    Here is a nice page on how to use it.

    0 讨论(0)
  • 2020-12-12 19:30

    To see the current stash stack:

    git stash list
    

    To pick a specific stash from the stack, refer to it by the stash@{number} shown by the above.

    If you want the behavior to be per-branch, you can just make a commit (or multiple commits) on the branch. You can always "unmake" the commit(s) later (e.g., with git reset, either --soft or --mixed; see the git reset documentation; or with git rebase -i to keep only the eventual "real" commit(s) while discarding the temporaries).

    (To really emulate git stash you need at least two commits, one for the index state and one for the work-tree state. If you're not planning to save and restore the index state, though, you can just git add -A the entire work-tree state and put that in the temporary commit. Alternatively, git stash is a shell script so you could copy and modify it pretty easily to make it work per-branch by default, using, e.g., refs/pb-stash/branch as its working name-space, rather than the single global refs/stash for the entire repo. You'd still be able to bring a stash from one branch to another by naming it explicitly.)

    0 讨论(0)
提交回复
热议问题