.bash_history does not update in Git for Windows (git bash)
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)
Related videos on Youtube
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, 2022Comments
-
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 almost 12 yearsWhat are the values of
$HISTSIZE
,$HISTFILESIZE
and$HISTFILE
? -
franmon almost 12 years$HISTSIZE is 10000, $HISTFILESIZE is 10000 and $HISTFILE is /h/.bash_history.
-
-
pbaranski almost 10 yearsWindows 8.1 and GNU bash, version 3.1.0(1)-release (i686-pc-msys) - works!
-
psdie over 9 years@CamiloMartin - see my comment above about making sure you've used Unix line endings (I used .bash_profile).
-
Camilo Martin over 9 years@psdie Thanks for the heads-up! EOLs, those bastards.
-
Chance about 9 yearsthat's good to know, but I'm going to have a hard time remembering that.
-
Godsmith almost 8 yearsTo 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 almost 8 yearsNot 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 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' over 7 years@Godsmith You missed a 'P' in your command :
PROM*P*T_COMMAND=...
-
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 almost 7 yearsThis also works for me on Win10. The above code makes bash append to history file on every command, as per answer in AskUbuntu.
-
dbreaux about 5 yearsWhich regrettably also occurs when Windows updates apply and reboot.
-
C.M. almost 5 yearsThis worked for running git's bash in Visual Studio Code, but I had to put it ~/.bashrc not ~/.bash_profile.
-
EvgenKo423 about 3 yearsYou can also press
Ctrl+D
instead of typingexit
, it's much faster and simpler to use. It's even faster than using a Close button! -
harleybl over 2 yearsThis 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 over 2 yearsThank 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 over 2 yearsThis worked perfectly.
-
gawkface over 2 years