I am experiencing a strange behavior and I'm not certain if it is a problem with golang or the cygwin version of git. Steps to reproduce: Use golang's os/exec library to execute exec.Command(os.Args[1],"log","@{u}") // where os.Args[1] is either cygwin git or Windows git Expected result: commit 09357db3a29909c3498143b0d06989e00f5e2442 Author: John Cheng <johnlicheng@xxxxxxxxx> Date: Sun Jan 14 10:57:01 2018 -0800 ... Actual result: Suppose that cygwin git is specified, the result becomes: exit status 128 fatal: ambiguous argument '@u': unknown revision or path not in the working tree. Version: git version 2.15.1.windows.2 git version 2.15.1 I'm not certain if this is a git problem, as I could not reproduce this problem using python to script cygwin git. A list of scenarios I've tested are 1. golang + cygwin git = "exit code 128" 2. golang + windows git = "exit code 0" 3. python + cygwin git = "exit code 0" 4. python + windows git = "exit code 0" I've tried to write a simple program to echo the command line parameters passed by go into the process it executes - and it appears that go itself does not change "@{u}" into "@u". I'm a bit stuck at point to figure out which may be the cause: golang or git. I figured I'd start here. -- --- John L Cheng