Pour corriger le problème "stdout is not a tty", il existe plusieurs possibilités.

Problème : git bash windows : stdout is not a tty

Fonctionne très bien en créant le fichier output.txt avec le contenu "OK" :

$ echo "OK" > /d/output.txt

Ne fonctionne pas résultant d'un fichier vide, et du stderr "stdout is not a tty" :

$ php -v > /d/output.txt
stdout is not a tty

Alors qu'en utilisant le nom complet du programme avec l'extension ".exe", cela fonctionne :

$ php.exe -v > /d/output.txt

Alternative "lancer le bash"

ryzen@RYZEN MINGW64 ~
$ php -v > /d/output.txt
stdout is not a tty

ryzen@RYZEN MINGW64 ~
$ bash

ryzen@RYZEN MINGW64 ~
$ php -v > /d/output.txt

Alternative "définir les alias pour chaque programme avec son .exe"

Vous pouvez ajouter l'alias (à chacun de vos programmes) :

printf "\nalias php='php.exe'" >> ~/.bashrc
# et pour qu'il soit prise en compte immédiatement, inclure cette configuration :
$ source .bashrc
# et le problème "stdout is not a tty" disparait :)

Mais vous constaterez l'avertissement :

WARNING: Found ~/.bashrc but no ~/.bash_profile, ~/.bash_login or ~/.profile.

This looks like an incorrect setup.
A ~/.bash_profile that loads ~/.bashrc will be created for you.

Et le fichier créé :

$ cat ~/.bash_profile
# generated by Git for Windows
test -f ~/.profile && . ~/.profile
test -f ~/.bashrc && . ~/.bashrc

Sous Windows, le variable d’environnement %pathext% qui liste des extensions des fichiers reconnus comme étant "exécutables".

C:\Users\ryzen>echo %PATHEXT%
.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC