.bash_history does not update in Git for Windows (git bash)

26,696

Solution 1

I put this in my ~/.bash_profile

PROMPT_COMMAND='history -a'

Solution 2

As it was said here, to save git bash history on Windows you must not close the terminal with X button. Use exit command instead. History of commands will be saved then regardless of configuration mentioned in the accepted answer.

Solution 3

Create the following files

~/.bash_profile
~/.bashrc

And put the following line in both of them

PROMPT_COMMAND='history -a'

To do this from the console (git bash) itself use the following commands

echo "PROMPT_COMMAND='history -a'" >> ~/.bash_profile
echo "PROMPT_COMMAND='history -a'" >> ~/.bashrc

What history -a means

From history --help command

-a append history lines from this session to the history file

What is PROMPT_COMMAND ?

Bash provides an environment variable called PROMPT_COMMAND. The contents of this variable are executed as a regular Bash command just before Bash displays a prompt.

Difference between .bash_profile AND .bashrc

.bash_profile is executed for login shells, while .bashrc is executed for interactive non-login shells.

When you login (type username and password) via console, either sitting at the machine, or remotely via ssh: .bash_profile is executed to configure your shell before the initial command prompt.

But, if you’ve already logged into your machine and open a new terminal window (xterm) then .bashrc is executed before the window command prompt. .bashrc is also run when you start a new bash instance by typing /bin/bash in a terminal.

On OS X, Terminal by default runs a login shell every time, so this is a little different to most other systems, but you can configure that in the preferences.

References

https://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x264.html https://apple.stackexchange.com/questions/51036/what-is-the-difference-between-bash-profile-and-bashrc

Solution 4

If you're using Git bash in VSCode please see C.M.'s comment above.

This worked for running git's bash in Visual Studio Code, but I had to put it ~/.bashrc not ~/.bash_profile. – C.M. Jul 29 at 14:43

This solved it for me.

Solution 5

A more complete answer from Unix Stackexchange, by Pablo R. and LinuxSecurityFreak:

Add the following to your ~/.bashrc

# Avoid duplicates
HISTCONTROL=ignoredups:erasedups
# When the shell exits, append to the history file instead of overwriting it
shopt -s histappend

# After each command, append to the history file and reread it
PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND$'\n'}history -a; history -c; history -r"

Be Careful as: "The problem with this PROMPT_COMMAND solution is that the numbers for each history item changes after each command :(. For example if you type history(1) ls (2) rm, then you do !1 to repeat (1), the history number might change and might run the rm command..." (Chris Kimpton)

Share:
26,696

Related videos on Youtube

franmon
Author by

franmon

I have an electric engineering degree (Jr. Eng., B.Eng. here in Québec) with a specialization in computer science and I currently work in a video hardware manufacturing company as a software developer since 2007. I have been a support engineer for the majority of my rather short work experience as an engineer. By doing so, I learned a lot about system programming, application programming and debugging live systems and crash dumps. My language of choice is C/C++, but I have some experience with assembly coding and I follow somehow java, c# and VB.

Updated on January 18, 2022

Comments

  • franmon
    franmon over 2 years

    I am using Git for Windows (ver. 1.7.8-preview20111206) and even though I have a .bash_history file in my HOME folder, it never automatically gets updated. When I start Git Bash, I can see in the history commands that I manually added to the .bash_history file, but it does not get updated automatically.

    I used the shopt -s histappend command to make sure that the history gets saved every time I close the shell, but it does not work.

    If I manually use the history -w command, then my file gets updated, but I would want to understand why the shopt command does not work as I understand it should.

    Anyone can tell me why is this behavior happening?

    • SourceSeeker
      SourceSeeker almost 12 years
      What are the values of $HISTSIZE, $HISTFILESIZE and $HISTFILE?
    • franmon
      franmon almost 12 years
      $HISTSIZE is 10000, $HISTFILESIZE is 10000 and $HISTFILE is /h/.bash_history.
  • pbaranski
    pbaranski almost 10 years
    Windows 8.1 and GNU bash, version 3.1.0(1)-release (i686-pc-msys) - works!
  • psdie
    psdie over 9 years
    @CamiloMartin - see my comment above about making sure you've used Unix line endings (I used .bash_profile).
  • Camilo Martin
    Camilo Martin over 9 years
    @psdie Thanks for the heads-up! EOLs, those bastards.
  • Chance
    Chance about 9 years
    that's good to know, but I'm going to have a hard time remembering that.
  • Godsmith
    Godsmith almost 8 years
    To avoid the line ending problem, you can just type echo "PROMT_COMMAND='history -a'" >> ~/.bash_profile in Git bash to add the row to the end of your .bash_profile file (or to create a new one if one doesn't exist).
  • Godsmith
    Godsmith almost 8 years
    Not working for me. As @fracz pointed out above, the issue is that Git bash does not save the history if you close the window with the X in the top right corner.
  • Superole
    Superole over 7 years
    @Chance luckily you no longer have to remember this, because in the newer versions of Git for windows this is not true. Tested with version 2.9.3 on win7 and win10.
  • M'sieur Toph'
    M'sieur Toph' over 7 years
    @Godsmith You missed a 'P' in your command : PROM*P*T_COMMAND=...
  • Sebastian
    Sebastian about 7 years
    @Superole not true on my machine. I have git 2.12.2 for windows 8.1 (newest for 04/17), and the only way to save history i am aware of is to type "exit" before clicking x button
  • Marius Tamulis
    Marius Tamulis almost 7 years
    This also works for me on Win10. The above code makes bash append to history file on every command, as per answer in AskUbuntu.
  • dbreaux
    dbreaux about 5 years
    Which regrettably also occurs when Windows updates apply and reboot.
  • C.M.
    C.M. almost 5 years
    This worked for running git's bash in Visual Studio Code, but I had to put it ~/.bashrc not ~/.bash_profile.
  • EvgenKo423
    EvgenKo423 about 3 years
    You can also press Ctrl+D instead of typing exit, it's much faster and simpler to use. It's even faster than using a Close button!
  • harleybl
    harleybl over 2 years
    This answer did not work for me because history includes the command numbers. Adding history -w to the ~/.bash_logout file did work since that writes the history without numbers
  • Alex Marty
    Alex Marty over 2 years
    Thank you for the detailed explanation how it works and why it is so and for information about difference between .bash_profile and .bashrc configuration files.
  • s3c
    s3c over 2 years
    This worked perfectly.
  • gawkface
    gawkface over 2 years
    I prefer option -n instead of -a : ss64.com/bash/history.html