112

I am trying to push a project to a remote repository from the command line.

From inside my local directory, I hit:

$ git push

and obtain the following error:

remote: Permission to username1/repo.git denied to username2.
fatal: unable to access 'https://github.com/username1/repo.git/':
The requested URL returned error: 403

Where username1 is my github account username hosting the repository I want to push to and username2 is an old account I used to use on this machine.

I am using OS X Yosemite (v10.10.5) on a Macbook Air. And I would prefer to use https instead of ssh.

How do I update to username1 so I can successfully push to my remote?

Edit: To be clear, I am not talking about simply editing the config user object, e.g.,

$ git config --global user.name "Billy Everyteen"
$ git config --global user.email "billyeveryteen@example.com"

They have nothing to do with authentication. My question deals with user authentication necessary to write to my remote repository.

Mowzer
  • 2,509

9 Answers9

94

In addition to changing username and email from terminal using git config:

$ git config --global user.name "Bob"
$ git config --global user.email "bob@example.com"

you'll need to remove authorization info from Keychain. This is something I've also struggled with until I found that I also had certificate in my Keychain.

Open up Keychain access, click on All Items and search for git. You will get some items like this:

Screenshot

Delete them. Now try to push the repo and git will ask you to write password for the user and you will be good to go.

Said Sikira
  • 1,064
  • 8
  • 4
52

For command-line users:

git config credential.username username1

Replace usename1 from the question with your own github.com/username1

https://git-scm.com/docs/git-config#Documentation/git-config.txt-credentialusername

Jackman
  • 621
  • 5
  • 2
35

List your git config.

git config --list

Change username and email global

git config --global user.name "Nanhe Kumar"
git config --global user.email "info@nanhekumar.com"

Change username and email for current repo

git config  user.name "Nanhe Kumar"
git config  user.email "info@nanhekumar.com"

Change your repo url if you are using bit bucket.

nano .git/config

This file will be something like this.

[core]
        repositoryformatversion = 0
        fileMode = false
        bare = false
        logallrefupdates = true
        ignorecase = true
        precomposeunicode = true
[remote "origin"]
        url = https://nanhe@bitbucket.org/nanhekumar/myproject.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master`

    [user]
            name = Nanhe Kumar
            email = info@nanhekumar.com

DrakaSAN
  • 867
29

For Windows User:
Follow Instructions:
Control Panel >> User Account >> Credential Manager >> Windows Credential >> Generic Credential

remove git credential.
next time when you'll push repo it'll ask you for credential.
Answer reference for detailed explanation

8

Other plausible option, if you wanted to use the "new user" on only one project, you can do it by configuring it just for the project's directory in which you are working. e.g:

 git config --local user.name "Mike"
 git config --local user.email "mike@example.com"

note that I'm using --local instead of --global.

5

Solving the actual authentication issue, one needs to specify the correct remote, if the standard git config suggestions don't work.

If so, you're probably using an SSH key and it's in your keychain. When using a repository with a new user, make sure your SSH key is configured in ~/.ssh/config (handy link to instructions if you need to add a new key), like so:

Host github.com
   HostName github.com
   IdentityFile ~/.ssh/myFirstAccountKey
   IdentitiesOnly yes

Host github-second-account HostName github.com IdentityFile ~/.ssh/mySecondAccountKey IdentitiesOnly yes

I'm not sure if the IdentitiesOnly attribute is required for either of the two.

Then update the remote origin of the repository you're having auth issues to use the second account:

git remote add origin git@github-second-account:[YOUR_GITHUB_USERNAME]/[YOUR_GITHUB_REPO].git

See for more detail: https://gist.github.com/oanhnn/80a89405ab9023894df7

3

GitHub CLI:

As a contractor, I use several GitHub accounts so this is a constant struggle for me. I just started using the gh command line tool from GitHub and it really simplifies logging in from terminal for me.

  1. Install gh: Just follow the installation instructions here: https://cli.github.com/

  2. Login: In your terminal type: gh auth login Then simply select the options they provide. They even allow you to login with your browser.

After that, you are authenticated and you can use your git commands as a fully authenticated user for whichever account you chose.

ibyard
  • 31
1

If you're on windows you can simply use GitManager (GitAccountManager on npm): https://github.com/paul-hanneforth/GitManager. There you can do it all with only one command.

0

i was having the same problem. What i did was to remove the ssh key i had in my other account.

To explain in a better way. I have 2 accounts in the same computer and both accounts I have ssh keys, so it was confliting in the moment i tried to push in the newest account I created. So i logged in the oldest account and deleted the ssh key, then I tried pushing in my newest account and it worked.

Thiago
  • 1