Git push won't do anything (everything up-to-date)

dvcs, git

Solution

`git push` doesn't push all of your local branches: how would it know which remote branches to push them to? It only pushes local branches which have been configured to push to a particular remote branch.

On my version of Git (1.6.5.3), when I run `git remote show origin` it actually prints out which branches are configured for push:

Local refs configured for 'git push':
  master pushes to master (up to date)
  quux   pushes to quux   (fast forwardable)

Q. But I could push to `master` without worrying about all this!

When you `git clone`, by default it sets up your local `master` branch to push to the remote's `master` branch (locally referred to as `origin/master`), so if you only commit on `master`, then a simple `git push` will always push your changes back.

However, from the output snippet you posted, you're on a branch called `develop`, which I'm guessing hasn't been set up to push to anything. So `git push` without arguments won't push commits on that branch.

When it says "Everything up-to-date", it means "all the branches you've told me how to push are up to date".

Q. So how can I push my commits?

If what you want to do is put your changes from `develop` into `origin/master`, then you should probably merge them into your local `master` then push that:

git checkout master
git merge develop
git push             # will push 'master'

If what you want is to create a `develop` branch on the remote, separate from `master`, then supply arguments to `git push`:

git push origin develop

That will: create a new branch on the remote called `develop`; and bring that branch up to date with your local `develop` branch; and set `develop` to push to `origin/develop` so that in future, `git push` without arguments will push `develop` automatically.

If you want to push your local `develop` to a remote branch called something other than `develop`, then you can say:

git push origin develop:something-else

However, that form won't set up `develop` to always push to `origin/something-else` in future; it's a one-shot operation.

Problem

I'm trying to update a Git repository on GitHub. I made a bunch of changes, added them, committed then attempted to do a `git push`. The response tells me that everything is up to date, but clearly it's not. ``` git remote show origin ``` responds with the repository I'd expect. Why is Git telling me the repository is up to date when there are local commits that aren't visible on the repository? ``` [searchgraph] git status # On branch develop # Untracked files: # (use "git add <file>..." to include in what will be committed) # # Capfile # config/deploy.rb nothing added to commit but untracked files present (use "git add" to track) [searchgraph] git add . [searchgraph] git status # On branch develop # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: Capfile # new file: config/deploy.rb # [searchgraph] git commit -m "Added Capistrano deployment" [develop 12e8af7] Added Capistrano deployment 2 files changed, 26 insertions(+), 0 deletions(-) create mode 100644 Capfile create mode 100644 config/deploy.rb [searchgraph] git push Everything up-to-date [searchgraph] git status # On branch develop nothing to commit (working directory clean) ```

Original source