Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What's the difference between the index, cached, and staged in git?

Tags:

git

Are these the same thing? If so, why are there so many terms?!

Also, I know there is this thing called git stash, which is a place where you can temporarily store changes to your working copy without committing them to the repo. I find this tool really useful, but again, the name is very similar to a bunch of other concepts in git -> this is very confusing!!

like image 901
allyourcode Avatar asked Aug 18 '10 21:08

allyourcode


People also ask

What is definition of index and staging area in Git?

The Git index is a staging area between the working directory and repository. It is used to build up a set of changes that you want to commit together. To better understand the Git index, then first understand the working directory and repository.

What is Git cached?

Consider a Git tutorial — as knowing how/what this is, and how it is used, is very important to using Git. The “cache”, in this context, contains staged changes. The contents are stored on disk, in repo's . git folder.

What is staging area in Git?

The staging area is like a rough draft space, it's where you can git add the version of a file or multiple files that you want to save in your next commit (in other words in the next version of your project).

What is the difference between Stash and stage in Git?

- Stash will move your modified files into a stack. So, later in the same or in another branch, you will be able to bring them back and see those modifications in your project. Stage is the step before to make a commit, you add modified files to "Staged files" to create your next commit.


1 Answers

The index/stage/cache are the same thing - as for why so many terms, I think that index was the 'original' term, but people found it confusing, so the other terms were introduced. And I agree that it makes things a bit confusing sometimes at first.

The stash facility of git is a way to store 'in-progress' work that you don't want to commit right now in a commit object that gets stored in a particular stash directory/database). The basic stash command will store uncommitted changes made to the working directory (both cached/staged and uncached/unstaged changes) and will then revert the working directory to HEAD.

It's not really related to the index/stage/cache except that it'll store away uncommitted changes that are in the cache.

This lets you quickly save the state of a dirty working directory and index so you can perform different work in a clean environment. Later you can get back the information in the stash object and apply it to your working directory (even if the working directory itself is in a different state).

The official git stash manpage has pretty good detail, while remaining understandable. It also has good examples of scenarios of how stash might be used.

like image 151
Michael Burr Avatar answered Oct 01 '22 11:10

Michael Burr