232

I have installed the newest version of git (1.8.3) using homebrew but when I type

git --version

in my terminal, it prints:

git version 1.7.10.2 (Apple Git-33)

What should I do to replace the old version of git with the new one?

dan
  • 12,177
  • 8
  • 58
  • 136
Levani
  • 4,425
  • In Terminal, Install it

    ``` brew install git ````

    In $HOME/.zshrc you need to add path to make it available

    PATH="$(brew --prefix)/opt/git/libexec/git-core:$PATH"

    In Terminal reload it

    source ~/.zshrc

    Test it

    which git
    /usr/local/opt/git/libexec/git-core/git

    – Gedw99 Mar 03 '23 at 12:26

14 Answers14

184

Status 2022

All the tricks mentioned here in several answers are not necessary anymore on Intel Macs running macOS Sierra or higher with the latest Homebrew. Forget export PATH="..." and modifications to ~/.bash_profile.

You simply do

brew install git

and you're done.

To confirm, open a new terminal window/tab and type

git --version

Please don't forget to open a new window. Terminals that were open before you started to install will not inherit any changes.

nohillside
  • 100,768
Jpsy
  • 2,457
  • 9
    For those that cannot get this to work, chances are your PATH is not set properly. If you run brew doctor it will tell you that your system paths take precedence over the homebrew ones. The output will also include how to fix it. E.g. by running echo export PATH="/opt/homebrew/bin:$PATH" >> .zshrc – Kerim Güney Mar 10 '21 at 12:45
  • 1
    This only works on Intel macs where /usr/local/bin seems to be in /etc/paths now. It for sure does not work for ARM Macs where Homebrew binaries are installed in /opt/homebrew/bin. – nohillside Jun 19 '22 at 10:15
  • 3
    "Please don't forget to open a new window. " was key. :) – Scott Pelak Mar 30 '23 at 12:49
  • Also, if you want to stay on the same window, just do a source ~/.zshrc to refresh environment. – mindOf_L Jul 19 '23 at 14:56
175

If on Intel, add

export PATH="/usr/local/bin:${PATH}"

if on ARM/M1, add

export PATH="/opt/homebrew/bin:${PATH}"

in ~/.bash_profile followed by

source ~/.bash_profile

solved the problem for my user.

vvvvv
  • 891
Levani
  • 4,425
  • 22
    If you want the change persistent across users, you can move /usr/local/bin above /usr/bin in /etc/paths. – kevin Nov 12 '13 at 05:08
  • 4
    This is the solution proposed by Homebrew itself when running brew doctor to diagnose the issue – VoxPelli Dec 04 '13 at 14:22
  • 1
    this answer should be updated with the KevinT proposed solution of defining /etc/paths. Defining only the "export" may not be enough, if /usr/bin has "precedence" over /usr/local/bin (from brew)... – emgsilva Dec 09 '13 at 11:43
  • "solved the problem." What was the problem? – B Seven Aug 24 '14 at 01:44
  • 12
    Remember to restart terminal! Didn't occur to me until i saw Juan Diego Gonzales's comment below – Souleiman Jun 30 '15 at 14:33
  • 4
    @Souleiman: Restarting isn't necessary. source ~/.bash_profile will re-read that. Restarting is just probably faster/easier. :) –  Oct 05 '15 at 23:12
  • @BSeven "What should I do to replace the old version of git with the new one?", is the problem. – Priya Ranjan Singh Mar 20 '17 at 09:24
  • Do we know why adding /usr/local/bin in PATH fixes the problem? How does homebrew takes priority on xcode git? – Priya Ranjan Singh Mar 20 '17 at 09:24
  • @PriyaRanjanSingh: including /usr/local/bin in PATH before /usr/bin make every command find the version of git which is in /usr/local/bin before the one which is the standard Apple one in /usr/bin. And this version is the one installed by Homebrew. – dan May 29 '17 at 10:15
  • 3
    brew link --overwrite git worked for me – wickdninja Feb 20 '19 at 03:50
  • For people using zsh instead of bash, add the following to .zprofile:

    eval "$(/opt/homebrew/bin/brew shellenv)"

    – Willow Media Jul 07 '23 at 12:47
56

Ok, I'm ready to get serious about scm.

$ git --version
git version 1.9.5 (Apple Git-50.3)

Nope, that's not what I wanted. I <3 homebrew, so:

$ brew install git

All set?

$ git --version
git version 1.9.5 (Apple Git-50.3)

Doh! (scratches head)

$ which git
/usr/bin/git

Ah, Apple's git is in /usr/bin, so it trumps the homebrew one. What to do?

(A) Just rename Apple's binary

(B) Let homebrew-managed one take precedence:

[edit PATH export e.g. in ~/.zshrc (oh-my-zsh + iTerm2 FTW! /tangent)]

[specifically: move /usr/local/bin/git: before /usr/bin:]

... and/or (e.g. to more broadly let homebrew stuff trump system installs, and have the precedence apply to all shells and users) also edit /etc/paths file, [moving /usr/local/bin above /usr/bin]

But assuming just the simplest / least invasive approach:

$ sudo mv /usr/bin/git /usr/bin/git-apple

Did it work?

$ which git
/usr/local/bin/git

So far so good, now the moment of truth:

$ git --version
git version 2.2.1

w00t! :) Time to go read http://git-scm.com ! :)

cweekly
  • 685
  • PS Rel to comments about risks of editing /usr/bin: IMHO it's NBD. (Tho I do like Global nomad's sugg. to do "sudo ln -s /usr/local/bin/git /usr/bin/git" ... which ensures that anything calling "/usr/bin/git" explicitly will get your brew-managed one. But my take is, installing git implies you're taking ownership of git on your system. Worries about unknown processes using an older, alternate version of git, might be misplaced. I recommend keeping up to date w/ git versions (for security, not just features), and managing it yourself. Homebrew makes this easy. /$0.02 – cweekly Jun 17 '15 at 18:41
  • This didn't work for me, to undo it, just do: sudo mv /usr/bin/git-apple /usr/bin/git . Juan Diego Gonzales's comment worked. (basically, follow the accepted answer then restart terminal). – Souleiman Jun 30 '15 at 14:33
  • 1
    Even with which git pointing to /usr/local/bin/git, this didn't work for me. To solve this, I had to uninstall the GitHub Mac app. – Ben Dec 22 '15 at 18:28
  • 8
    MacOS 10.12.5: `sudo mv /usr/bin/git /usr/bin/git-apple

    mv: rename /usr/bin/git to /usr/bin/git-apple: Operation not permitted`

    – Vladislav Rastrusny Jun 19 '17 at 13:45
  • These days it seems homebrew puts itself at the "front" of the PATH so hopefully no longer needed :) – rogerdpack Jan 09 '18 at 23:05
  • 2
    Just use brew doctor. In 2020, it recommended brew link —overwrite git – ReinstateMonica3167040 Jan 18 '20 at 16:03
  • I was having the same issue, but installing OhMyZsh seemed to solve it, and put /usr/local/bin/git: before /usr/bin:. In hindsight, maybe all I needed to do was start a new terminal session! – samjewell Feb 16 '21 at 17:02
  • Use export PATH="/opt/homebrew/bin:$PATH" to put homebrew git to the leading position in system PATH. – Zhou Haibo Jul 28 '22 at 02:29
27

I tried this and it works for me.

brew link --overwrite git
Song Wang
  • 819
16

Once you've installed the latest git via brew (brew install git), run this one-liner (as suggested by brew doctor) if it isn't already there:

echo "export PATH=/usr/local/bin:$PATH" >> ~/.bash_profile

Then quit Terminal an open it again (restart your bash session). You need to do this even if your PATH was already correct, as ZSH and Bash cache the contents of PATH (see the documentation on the built-in command hash).

That should fix things really fast.

Flimm
  • 2,016
  • 1
    How does this differ from the accepted answer? – mmmmmm Jan 21 '14 at 13:52
  • 6
    In my case, I didn't know I had to restart Terminal, so that part may help some people. Is faster than the accepted because of the one liner. If it's a competition I think my answer is misplaced. Otherwise I think it contributes. (Tell me if you want me to make an edit instead of this). – Juan Diego Gonzales Jan 22 '14 at 00:51
  • You do that one liner when you install Homebrew – mmmmmm Jan 22 '14 at 12:19
  • 7
    I found this answer helpful. Restarting the terminal is a non-obvious issue for many people unfamiliar with the workings of .bash_profile, and a gentle reminder for the rest of us. – Magne Jan 28 '15 at 09:59
  • @JuanDiegoGonzales Excellent observation! I was wondering the exact same thing after I installed git and didn't know why. After the cache hint, I did a bit more research: http://unix.stackexchange.com/q/5609/52921 – stratis Dec 07 '15 at 11:24
  • These days it seems homebrew puts itself at the "front" of the PATH so hopefully no longer needed :) – rogerdpack Jan 09 '18 at 23:05
3

When you use brew install git for the installation, notice that it install git under:

==> Summary
  /usr/local/Cellar/git/2.29.2: 1,480 files, 39.7MB

You will also get an error, which appears earlier in the log and probably you missed it:

==> Downloading https://homebrew.bintray.com/bottles/git-2.29.2.big_sur.bottle.t
Already downloaded: /Users/chadjinik/Library/Caches/Homebrew/downloads/08165d120fcebc7823c487a6778b2ea0e67fd2cd9177d6e7d656268f474ab5da--git-2.29.2.big_sur.bottle.tar.gz
==> Pouring git-2.29.2.big_sur.bottle.tar.gz

Error: The brew link step did not complete successfully The formula built, but is not symlinked into /usr/local Could not symlink bin/git Target /usr/local/bin/git already exists. You may want to remove it: rm '/usr/local/bin/git'

To force the link and overwrite all conflicting files: brew link --overwrite git

Just run:

brew link --overwrite git

and you should be good.

3

When you type

git --version

in Terminal.app or console, your comment on another question indicated the version it returns is the git in /usr/bin/git

If you installed Xcode 4.5 (and newer), and type

xcrun git --version

in Terminal.app or console, the version it returns is the git in the Xcode app bundle.

If you are using Homebrew to install and update git, the simplest solution is to

  1. make sure you have admin rights as you'll be asked for the password for the admin
  2. rename the original location by renaming it using mv. For example

    sudo mv /usr/bin/git /usr/bin/git-ORIGINAL

  3. create a soft link using 'ln -s' to the git binary you installed with Homebrew.

Note that MattDMo has a better solution in the comments.

Global nomad
  • 2,807
  • 11
    Please don't do this - you really shouldn't be messing around with /usr/bin, as it's possible that other programs you don't even know about depend on vagaries associated with a particular version. The easiest solution, without moving anything, is to add /usr/local/bin to your $PATH environment variable before /usr/bin - IIRC, homebrew installs to /usr/local/bin – MattDMo Jun 03 '13 at 17:03
2

Install git with brew, the run this.

brew link --force git

Close and reopen terminal to run which git.

John
  • 121
1

Do a simple alias to avoid changing path:

alias git=/usr/local/bin/git
Jinesh
  • 19
  • Yep! This is what I ended up doing too. I didn't want to change the PATH precedence or any other hacky stuff. – Akash Agarwal Mar 21 '22 at 23:55
  • this is the only thing that worked for me. even changing path didn't work for me - possibly related to Xcode Command Line Tools – ehacinom Jul 06 '22 at 06:47
1

Ok so I ran brew doctor and I saw this:

Warning: You have unlinked kegs in your Cellar.
Leaving kegs unlinked can lead to build-trouble and cause formulae that depend on
those kegs to fail to run properly once built. Run `brew link` on these:
git

Of course I run brew link git. Then I got:

Error: Could not symlink bin/git
Target /usr/local/bin/git
already exists. You may want to remove it:
  rm '/usr/local/bin/git'

To force the link and overwrite all conflicting files: brew link --overwrite git

To list all files that would be deleted: brew link --overwrite --dry-run git

I ran brew link --overwrite git and it worked!

1

You have to rename the original git by apple in /usr/bin/ to e. g. git-org since /usr/bin is normally before /usr/local/bin in your path directory where the brew stuff is.

So:

cd /usr/bin
sudo mv git git-org

and do not forget to link the brew git

brew link git

This assumes that /usr/local/bin is in your $PATH environment variable. If you still have problem try to run

brew doctor 

and fix the problems mentioned there.

Pfitz
  • 1,624
  • 15
  • 19
  • 3
    Don;t rename or chnage things in /usr/bin as it could break Apple thigs and they will get chnaged when you do a system or XCode update. use the path which is what it is designed for, – mmmmmm Jun 03 '13 at 14:16
  • 3
    I think it would be much easier to add /usr/local/bin (homebrew's install directory, IIRC) to the $PATH ahead of /usr/bin instead of mucking around with renaming and backing up, etc. – MattDMo Jun 03 '13 at 17:05
0

If you are installing git from git-scm.com directly and would want to use the latest downloaded git instead of apple(old) version of git.

  1. Install git from git-scm.com
  2. Most probably new git will be installed in /usr/local/bin/git
  3. Try git --version, if it returns Apple old version of git then proceed below
  4. cd ~ (change directory to your home directory)
  5. type vi .bashrc
  6. Use i (to insert text in vi editor)
  7. If you find a line with export PATH......., press enter on top of the export and type the following: export PATH=/usr/local/:$PATH (Pay extreme caution with PATH variable do not mess it up else it will cause problems for your OS) (hopefully new git should be installed in /usr/local/git)
  8. Press esc
  9. Enter :wq (to save the .bashrc file)
  10. Exit out of terminal and start new terminal
  11. Now try git --version (you should see new version)
jherran
  • 13,284
-1

I've tried many things including all of this post's answers. Finally I was able to get brew's version of git to run instead of Xcode's by simply deleting Xcode's additional tools folder:

sudo rm -rf /Library/Developer/CommandLineTools

  • Those 'command line tools' are needed to install some Homebrew packages (when they need to be built from source). – Kenny Evitt Dec 29 '21 at 22:46
-1

It depends on where your git comes from. Xcode brings a version for example, maybe that is upfront in your path.

Maybe typing

which git

will show where the old one is.

Nicholaz
  • 637