325

I thought if you want to track the files you should git add [files you want to track]

I don't know why I got the messages Changes not staged for commit.

If those files were not staged, shouldn't git shows me those files were Untracked like that

enter image description here

All I've done was create a new feature from develop branch and worked in feature/change_excel_format branch

I thought Those files should be in staged status,

But git status told me Changes not staged for commit

enter image description here

To brief, I only know there are 3 stages in git untracked, staged, committed Can any one tell me , what was the stage in for Changes not staged for commit enter image description here

So if I modified the file a (already in the repo)

and type git st , the git will tell me Changes not staged for commit

if I git a then the file a will be in staged status

if I modified the file a now, there will be two status of file a in git, right ?

So I have to decide if make the staged a be commit or make the not stage a to be staged, and then the previous staged file awill be discard ?

enter image description here

Super Kai - Kazuya Ito
  • 22,221
  • 10
  • 124
  • 129
newBike
  • 14,385
  • 29
  • 109
  • 192
  • 5
    if get this message, and do you want this file (a) needs to commit, make sure you are in the correct directory path (project root path for add all) while you git add – Sadee Nov 26 '18 at 16:34

12 Answers12

430

when you change a file which is already in the repository, you have to git add it again if you want it to be staged.

This allows you to commit only a subset of the changes you made since the last commit. For example, let's say you have file a, file b and file c. You modify file a and file b but the changes are very different in nature and you don't want all of them to be in one single commit. You issue

git add a
git commit a -m "bugfix, in a"
git add b
git commit b -m "new feature, in b"

As a side note, if you want to commit everything you can just type

git commit -a
starball
  • 20,030
  • 7
  • 43
  • 238
Stefano Falasca
  • 8,837
  • 2
  • 18
  • 24
  • 1
    So, If those files are alreday in repo. and I have changed them, I also can `git commit THEM` directly without add them , right ? – newBike Jan 15 '14 at 10:42
  • 1
    of course. And in that case only the listed files would be committed, regardless of the presence of staged changes in different files. – Stefano Falasca Jan 15 '14 at 11:03
  • 1
    I've got same issue but my problem was also about submodule cause of untracked files. So in my sub directory I also add all changes with git and the problem has gone. – eemrah Feb 19 '18 at 19:34
  • 1
    I've already done `git clean -fd` and I'm still getting this. I want to get rid of all the changes. What else should I be doing? – mfaani Aug 06 '18 at 16:25
  • 4
    `git commit -a` doesn't commit everything, only the updated files, not the new ones... – Martin Apr 17 '19 at 19:24
  • is `git add .` enough to stage everything at once? – Ayoub Laazazi Apr 10 '20 at 17:08
  • Did the default behavior change in a recent git version? I could swear I used to be able to just do "edit file" + "git commit" without running "git add" every time. – Z. Cochrane May 18 '20 at 03:29
  • @Z.Cochrane I have never seen the behaviour you describe and I've been using git for 10 years. You are probably thinking of "git commit -a", which commits all unstaged changes. – Stefano Falasca May 19 '20 at 09:25
92

You have to use git add to stage them, or they won't commit. Take it that it informs git which are the changes you want to commit.

git add -u :/ adds all modified file changes to the stage git add * :/ adds modified and any new files (that's not gitignore'ed) to the stage

Dannie
  • 2,430
  • 14
  • 16
22

It's another way of Git telling you:

Hey, I see you made some changes to your files, but keep in mind that when you write pages to my history, those changes won't be in these pages.

Changes to files are not staged if you do not explicitly git add them (and this makes sense).

So when you git commit, those changes won't be added since they are not staged. If you want to commit them, you have to stage them first (ie. git add).

Agis
  • 32,639
  • 3
  • 73
  • 81
  • 3
    But I didn't change the file it's referencing – Eoin Sep 05 '19 at 15:49
  • 5
    I don't understand how exactly this behaviour makes sense. If I've already told Git to track a file by doing `add .` when I set up the repostiry, and it can detect I've made changes to it, why do I need to explicitly add files every time I commit? Just to make a change to a file, I have to `add`, `commit` *and* `push`. The demarcation between `commit` and push makes sense to me, the demarcation between `add` and `commit` seems ridiculously redundant. – Hashim Aziz Sep 10 '19 at 15:11
  • 2
    @Hashim I agree, I really don't understand the logic. – Herman Toothrot May 19 '20 at 17:51
  • @Prometheus; caveat: I'm still a total newbie when it comes to git, so this may be way wrong. "Committing" in git is a 2-step process: 1. Tell git what will be included in the "commit" (the default is *NOT* all changed files) using "git add", and, 2. Do the "commit". When committing, git ignores files that aren't explicitly "added"; even if that file is in the local repository and has been changed. Not "adding" a file is a way to tell the "commit" that you don't want to send it to the local repository at this time. – mnemotronic Oct 20 '20 at 22:38
  • @Prometheus It's because Git basically has three "spaces". 1. The working area, which is viewed as temporary and prone to deletion. 2. The staging area, which is where files are placed before being placed in the repo. 3. The repo itself. This allows you to do things like move to a different commit in your history before committing the files in your staging area to the repo (and probably lots of other things I don't fully understand). If you can find the tutorials by Paola Perrotta, I'd strongly recommend them – Chuck Le Butt Jan 08 '21 at 21:22
15

Try following int git bash

1.git add -u :/

2.git commit -m "your commit message"

  1. git push -u origin master

Note:if you have not initialized your repo.

First of all

git init 

and follow above mentioned steps in order. This worked for me

10

With Git Version 2.x.x(Current Version)

"Changes not staged for commit" means Some changes are not staged.

So, to stage all changes perfectly, run this command:

git add -A

Then, run this command:

git commit -m "Update"

In addition, when getting "Changes not staged for commit", just run this command as I've already said above to stage all changes perfectly:

git add -A

If you run these commands, all changes won't be staged perfectly:

git add .
git add --ignore-removal .
git add -u  

This table shows the differences of the commands which I mentioned above in Git Version 2.x.x(Current Version):

Command New Files Modified Files Deleted Files Description
git add -A ✔️ ✔️ ✔️ Stage all (new, modified, deleted) files
git add . ✔️ ✔️ ✔️ Stage all (new, modified, deleted) files in current folder
git add --ignore-removal . ✔️ ✔️ Stage new and modified files only
git add -u ✔️ ✔️ Stage modified and deleted files only
sideshowbarker
  • 81,827
  • 26
  • 193
  • 197
Super Kai - Kazuya Ito
  • 22,221
  • 10
  • 124
  • 129
5

Suposed you saved a new file changes. (navbar.component.html for example)

Run:

ng status
modified:   src/app/components/shared/navbar/navbar.component.html

If you want to upload those changes for that file you must run:

git add src/app/components/shared/navbar/navbar.component.html

And then:

git commit src/app/components/shared/navbar/navbar.component.html -m "new navbar changes and fixes"

And then:

git push origin [your branch name, usually "master"]

---------------------------------------------------------------

Or if you want to upload all your changes (several/all files):

git commit -a

And them this will appear "Please enter the commit message for your changes."

  • You'll see this message if you git commit without a message (-m)
  • You can get out of it with two steps:
  • 1.a. Type a multi-line message to move foward with the commit.
  • 1.b. Leave blank to abort the commit.
    1. Hit "esc" then type ":wq" and hit enter to save your choice. Viola!

And then:

git push

And Viola!

David Castro
  • 1,773
  • 21
  • 21
  • 2
    Same I said above: `git commit -a` doesn't upload al the changes, it doesn't include the new files. It will only commit the updates to existent files. – Martin Apr 17 '19 at 19:28
4

What worked for me was to go to the root folder, where .git/ is. I was inside one the child folders and got the error there.

SoloDolo
  • 174
  • 1
  • 5
2

Follow the steps below:

1- git stash
2- git add .
3- git commit -m "your commit message"

Mam's
  • 255
  • 2
  • 5
1

You may see this error when you have added a new file to your code and you're now trying to commit the code without staging(adding) it.

To overcome this, you may first add the file by using git add (git add your_file_name.py) and then committing the changes (git commit -m "Rename Files" -m "Sample script to rename files as you like")

0

I also received this message, so I did it like this in my python code:

text = input("Insert commit: ")
os.system("git add .")
os.system("git commit -m %s" %(text))
os.system("git push origin master")

And it worked, now it goes without problems. These commands use on a debian server with python3.

Nebenzahl
  • 351
  • 2
  • 11
0

I made a silly mistake. I was trying to run this command in a folder where git was not initialized. Make sure you have .git folder there or run the command

git init
Prince
  • 103
  • 1
  • 6
-10

Remove dir/.../.git

works for me.

aji stack
  • 41
  • 10