git branching and committing — can you explain the theory behind this puzzling (to me) behavior?

0

Issue

I have a master branch and everything is fine in it. Then I create a branch called experimental and I create a new file. While in my experimental branch I add this file using the git add command. Then I checkout my master branch. While in my master branch I run git status and discover that this file has also been added to my master branch. I then run git commit -m "message" while in my master branch and the commit happens. Then I switch to my experimental branch and run git status and discover that the file has also been committed in my experimental branch.

Here is what I would have expected: Upon switching to the master branch after adding the new file I would expect that the file would not appear there. After all, I did not create the file while in the master branch and I did not add the file while in the master branch. So when I switch to the master branch and run git status why does it find the file already added and ready to commit? And when I then do commit it while in the master branch, why do I also find it committed in the experimental branch when I switch back? Did it commit to two branches at once?

Solution

When you run git add, the file is not committed, it’s only added to Git’s “index”. You probably wanted to run git commit after doing git add on your experimental branch.

When you switch branches in Git, the changes in your working directory and in the index are carried over as long as they don’t conflict with any other files that change during the branch switch.

To address your specific concern:

…and discover that this file has also been added to my master branch.

If you haven’t run git commit, then the file has not yet been added to any branch at all.

Answered By – Greg Hewgill

This Answer collected from stackoverflow, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0

Leave A Reply

Your email address will not be published.

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More