Thanks Ben, this is indeed descriptive of the mess I got into.  I'll read at length, but the takeaway is that git pull is to be avoided.  Looks like also some kind of stash check could go into the scripts/gitci script prior to doing the actual commit.

_,,,^..^,,,_ (phone)

On Dec 22, 2017, at 8:57 AM, Ben Coman <btc@openinworld.com> wrote:

Just to clarify, the command you ran was the raw commit command...
$ git commit -m "message"
and not some greater script that surrounds a commit with other logic including stashing ?

And also, did those "need merge" errors immediately appear running that command, 
or did they show later after running another command like `git pull`?


In the meantime, just guessing this is related...
  https://stackoverflow.com/questions/5483213/fatal-git-write-tree-error-building-trees
"It is unfortunate that git stash does not work with merge conflicts. "

as is this...
  https://www.spinics.net/lists/git/msg195457.html

In essence, if there are merge conflicts - i.e. `git merge` did not complete 
and is in a halfway state waiting for the conflicts to be resolved,
the don't stash.  Stashing a halfway state seems a bad thing to do.

To reverse out of such a half-way state, a `git merge --abort`
should make everything well.  However its not always easy to make 
that connection since `git merge --abort` is not symmetrical with `git pull`.  

btw, I'd suggest you avoid `git pull` since it is over-helpful and 
conflates underlying git concepts which undermines your understanding
to leave you floundering when things go wrong.  
Instead split `git pull` into its components. Assuming you are active on the "Cog" branch,
you would instead do...
$ git fetch origin
$ git merge origin/Cog  

Then if errors show up during `git merge` its easier to remember that `git merge --abort`
reverts things.  Also a nice thing about fetching and merging separately is that 
it gives you the chance to examine what you’ve fetched before deciding what to do next.
For example, optionally between fetchign and merging you can do...

$ git diff Cog origin/Cog 


Here are some further viewpoints on avoiding `git pull`...
  https://adamcod.es/2014/12/10/git-pull-correct-workflow.html


cheers -ben
 

On 22 December 2017 at 14:48, Eliot Miranda <eliot.miranda@gmail.com> wrote:
 
Hi git mavens,

    I'm screwed.  Had a perfectly fine repository that declared itself at the tip of Cog, I committed and then suddenly

[Cog 59455f2] CogVM source as per VMMaker.oscog-eem.2302
 80 files changed, 4207 insertions(+), 2489 deletions(-)
nsspur64src/vm/cogit.h: needs merge
nsspur64src/vm/cogitX64SysV.c: needs merge
nsspur64src/vm/cogitX64WIN64.c: needs merge
nsspur64src/vm/cointerp.c: needs merge
nsspur64src/vm/cointerp.h: needs merge
nsspur64src/vm/gcc3x-cointerp.c: needs merge
nsspursrc/vm/cogit.h: needs merge
nsspursrc/vm/cointerp.c: needs merge
nsspursrc/vm/cointerp.h: needs merge
nsspursrc/vm/gcc3x-cointerp.c: needs merge
nsspurstack64src/vm/gcc3x-interp.c: needs merge
nsspurstack64src/vm/interp.c: needs merge
nsspurstacksrc/vm/gcc3x-interp.c: needs merge
nsspurstacksrc/vm/interp.c: needs merge
spur64src/vm/cogit.h: needs merge
spur64src/vm/cogitX64SysV.c: needs merge
spur64src/vm/cogitX64WIN64.c: needs merge
spur64src/vm/cointerp.c: needs merge
spur64src/vm/cointerp.h: needs merge
spur64src/vm/gcc3x-cointerp.c: needs merge
spurlowcode64src/vm/cogit.h: needs merge
spurlowcode64src/vm/cogitX64SysV.c: needs merge
spurlowcode64src/vm/cogitX64WIN64.c: needs merge
spurlowcode64src/vm/cointerp.c: needs merge
spurlowcode64src/vm/cointerp.h: needs merge
spurlowcode64src/vm/gcc3x-cointerp.c: needs merge
spurlowcodesrc/vm/cogit.h: needs merge
spurlowcodesrc/vm/cointerp.c: needs merge
spurlowcodesrc/vm/cointerp.h: needs merge
spurlowcodesrc/vm/gcc3x-cointerp.c: needs merge
spurlowcodestack64src/vm/gcc3x-interp.c: needs merge
spurlowcodestack64src/vm/interp.c: needs merge
spurlowcodestacksrc/vm/gcc3x-interp.c: needs merge
spurlowcodestacksrc/vm/interp.c: needs merge
spursista64src/vm/cogit.h: needs merge
spursista64src/vm/cogitX64SysV.c: needs merge
spursista64src/vm/cogitX64WIN64.c: needs merge
spursista64src/vm/cointerp.c: needs merge
spursista64src/vm/cointerp.h: needs merge
spursista64src/vm/gcc3x-cointerp.c: needs merge
spursistasrc/vm/cogit.h: needs merge
spursistasrc/vm/cointerp.c: needs merge
spursistasrc/vm/cointerp.h: needs merge
spursistasrc/vm/gcc3x-cointerp.c: needs merge
spursrc/vm/cogit.h: needs merge
spursrc/vm/cointerp.c: needs merge
spursrc/vm/cointerp.h: needs merge
spursrc/vm/gcc3x-cointerp.c: needs merge
spurstack64src/vm/gcc3x-interp.c: needs merge
spurstack64src/vm/interp.c: needs merge
spurstacksrc/vm/gcc3x-interp.c: needs merge
spurstacksrc/vm/interp.c: needs merge
src/plugins/SqueakFFIPrims/ARM32FFIPlugin.c: needs merge
src/plugins/SqueakFFIPrims/IA32FFIPlugin.c: needs merge
src/plugins/SqueakFFIPrims/X64SysVFFIPlugin.c: needs merge
src/plugins/SqueakFFIPrims/X64Win64FFIPlugin.c: needs merge
src/vm/cogit.h: needs merge
src/vm/cointerp.c: needs merge
src/vm/cointerp.h: needs merge
src/vm/cointerpmt.c: needs merge
src/vm/cointerpmt.h: needs merge
src/vm/gcc3x-cointerp.c: needs merge
src/vm/gcc3x-cointerpmt.c: needs merge
stacksrc/vm/gcc3x-interp.c: needs merge
stacksrc/vm/interp.c: needs merge
nsspur64src/vm/cogit.h: needs merge
nsspur64src/vm/cogitX64SysV.c: needs merge
nsspur64src/vm/cogitX64WIN64.c: needs merge
nsspur64src/vm/cointerp.c: needs merge
nsspur64src/vm/cointerp.h: needs merge
nsspur64src/vm/gcc3x-cointerp.c: needs merge
nsspursrc/vm/cogit.h: needs merge
nsspursrc/vm/cointerp.c: needs merge
nsspursrc/vm/cointerp.h: needs merge
nsspursrc/vm/gcc3x-cointerp.c: needs merge
nsspurstack64src/vm/gcc3x-interp.c: needs merge
nsspurstack64src/vm/interp.c: needs merge
nsspurstacksrc/vm/gcc3x-interp.c: needs merge
nsspurstacksrc/vm/interp.c: needs merge
spur64src/vm/cogit.h: needs merge
spur64src/vm/cogitX64SysV.c: needs merge
spur64src/vm/cogitX64WIN64.c: needs merge
spur64src/vm/cointerp.c: needs merge
spur64src/vm/cointerp.h: needs merge
spur64src/vm/gcc3x-cointerp.c: needs merge
spurlowcode64src/vm/cogit.h: needs merge
spurlowcode64src/vm/cogitX64SysV.c: needs merge
spurlowcode64src/vm/cogitX64WIN64.c: needs merge
spurlowcode64src/vm/cointerp.c: needs merge
spurlowcode64src/vm/cointerp.h: needs merge
spurlowcode64src/vm/gcc3x-cointerp.c: needs merge
spurlowcodesrc/vm/cogit.h: needs merge
spurlowcodesrc/vm/cointerp.c: needs merge
spurlowcodesrc/vm/cointerp.h: needs merge
spurlowcodesrc/vm/gcc3x-cointerp.c: needs merge
spurlowcodestack64src/vm/gcc3x-interp.c: needs merge
spurlowcodestack64src/vm/interp.c: needs merge
spurlowcodestacksrc/vm/gcc3x-interp.c: needs merge
spurlowcodestacksrc/vm/interp.c: needs merge
spursista64src/vm/cogit.h: needs merge
spursista64src/vm/cogitX64SysV.c: needs merge
spursista64src/vm/cogitX64WIN64.c: needs merge
spursista64src/vm/cointerp.c: needs merge
spursista64src/vm/cointerp.h: needs merge
spursista64src/vm/gcc3x-cointerp.c: needs merge
spursistasrc/vm/cogit.h: needs merge
spursistasrc/vm/cointerp.c: needs merge
spursistasrc/vm/cointerp.h: needs merge
spursistasrc/vm/gcc3x-cointerp.c: needs merge
spursrc/vm/cogit.h: needs merge
spursrc/vm/cointerp.c: needs merge
spursrc/vm/cointerp.h: needs merge
spursrc/vm/gcc3x-cointerp.c: needs merge
spurstack64src/vm/gcc3x-interp.c: needs merge
spurstack64src/vm/interp.c: needs merge
spurstacksrc/vm/gcc3x-interp.c: needs merge
spurstacksrc/vm/interp.c: needs merge
src/plugins/SqueakFFIPrims/ARM32FFIPlugin.c: needs merge
src/plugins/SqueakFFIPrims/IA32FFIPlugin.c: needs merge
src/plugins/SqueakFFIPrims/X64SysVFFIPlugin.c: needs merge
src/plugins/SqueakFFIPrims/X64Win64FFIPlugin.c: needs merge
src/vm/cogit.h: needs merge
src/vm/cointerp.c: needs merge
src/vm/cointerp.h: needs merge
src/vm/cointerpmt.c: needs merge
src/vm/cointerpmt.h: needs merge
src/vm/gcc3x-cointerp.c: needs merge
src/vm/gcc3x-cointerpmt.c: needs merge
stacksrc/vm/gcc3x-interp.c: needs merge
stacksrc/vm/interp.c: needs merge
nsspur64src/vm/cogit.h: unmerged (ed6bf51d9ab7c6f5927f69e5661f22ad5cdf93d8)
nsspur64src/vm/cogit.h: unmerged (6b84b3adf311e7e9655802800cf3c66cca5ae590)
nsspur64src/vm/cogit.h: unmerged (8aeef63d69b098a39eea676e8707de91ff7d4097)
nsspur64src/vm/cogitX64SysV.c: unmerged (197c00a9998d01982af526043c15480549118225)
nsspur64src/vm/cogitX64SysV.c: unmerged (41adeb695b6a1d13c802967b1b2a08fcb48a7934)
nsspur64src/vm/cogitX64SysV.c: unmerged (b61a13f47897197e7b58aa9c147ba87eb5cdc8f1)
nsspur64src/vm/cogitX64WIN64.c: unmerged (ff6c102e326c6f85a5129ab03ee09b1f24b33304)
nsspur64src/vm/cogitX64WIN64.c: unmerged (2cb03481942943a106feef898e2a99dd7e316a28)
nsspur64src/vm/cogitX64WIN64.c: unmerged (ec4b0edb7cd243b040a5982f0a374c3fb3862f77)
nsspur64src/vm/cointerp.c: unmerged (56db95c989c194930e8d7eeeebebb372ec63258d)
...
fatal: git-write-tree: error building trees
Cannot save the current index state
/Users/eliot/oscogvm
/Users/eliot/oscogvm
nsspur64src/vm/cogit.h: needs merge
nsspur64src/vm/cogitX64SysV.c: needs merge
nsspur64src/vm/cogitX64WIN64.c: needs merge
nsspur64src/vm/cointerp.c: needs merge
nsspur64src/vm/cointerp.h: needs merge
nsspur64src/vm/gcc3x-cointerp.c: needs merge
nsspursrc/vm/cogit.h: needs merge
nsspursrc/vm/cointerp.c: needs merge
nsspursrc/vm/cointerp.h: needs merge
nsspursrc/vm/gcc3x-cointerp.c: needs merge
nsspurstack64src/vm/gcc3x-interp.c: needs merge
nsspurstack64src/vm/interp.c: needs merge
nsspurstacksrc/vm/gcc3x-interp.c: needs merge
nsspurstacksrc/vm/interp.c: needs merge
spur64src/vm/cogit.h: needs merge
spur64src/vm/cogitX64SysV.c: needs merge
spur64src/vm/cogitX64WIN64.c: needs merge
spur64src/vm/cointerp.c: needs merge
spur64src/vm/cointerp.h: needs merge
spur64src/vm/gcc3x-cointerp.c: needs merge
spurlowcode64src/vm/cogit.h: needs merge
spurlowcode64src/vm/cogitX64SysV.c: needs merge
spurlowcode64src/vm/cogitX64WIN64.c: needs merge
spurlowcode64src/vm/cointerp.c: needs merge
spurlowcode64src/vm/cointerp.h: needs merge
spurlowcode64src/vm/gcc3x-cointerp.c: needs merge
spurlowcodesrc/vm/cogit.h: needs merge
spurlowcodesrc/vm/cointerp.c: needs merge
spurlowcodesrc/vm/cointerp.h: needs merge
spurlowcodesrc/vm/gcc3x-cointerp.c: needs merge
spurlowcodestack64src/vm/gcc3x-interp.c: needs merge
spurlowcodestack64src/vm/interp.c: needs merge
spurlowcodestacksrc/vm/gcc3x-interp.c: needs merge
spurlowcodestacksrc/vm/interp.c: needs merge
spursista64src/vm/cogit.h: needs merge
spursista64src/vm/cogitX64SysV.c: needs merge
spursista64src/vm/cogitX64WIN64.c: needs merge
spursista64src/vm/cointerp.c: needs merge
spursista64src/vm/cointerp.h: needs merge
spursista64src/vm/gcc3x-cointerp.c: needs merge
spursistasrc/vm/cogit.h: needs merge
spursistasrc/vm/cointerp.c: needs merge
spursistasrc/vm/cointerp.h: needs merge
spursistasrc/vm/gcc3x-cointerp.c: needs merge
spursrc/vm/cogit.h: needs merge
spursrc/vm/cointerp.c: needs merge
spursrc/vm/cointerp.h: needs merge
spursrc/vm/gcc3x-cointerp.c: needs merge
spurstack64src/vm/gcc3x-interp.c: needs merge
spurstack64src/vm/interp.c: needs merge
spurstacksrc/vm/gcc3x-interp.c: needs merge
spurstacksrc/vm/interp.c: needs merge
src/plugins/SqueakFFIPrims/ARM32FFIPlugin.c: needs merge
src/plugins/SqueakFFIPrims/IA32FFIPlugin.c: needs merge
src/plugins/SqueakFFIPrims/X64SysVFFIPlugin.c: needs merge
src/plugins/SqueakFFIPrims/X64Win64FFIPlugin.c: needs merge
src/vm/cogit.h: needs merge
src/vm/cointerp.c: needs merge
src/vm/cointerp.h: needs merge
src/vm/cointerpmt.c: needs merge
src/vm/cointerpmt.h: needs merge
src/vm/gcc3x-cointerp.c: needs merge
src/vm/gcc3x-cointerpmt.c: needs merge
stacksrc/vm/gcc3x-interp.c: needs merge
stacksrc/vm/interp.c: needs merge
unable to refresh index
_,,,^..^,,,_
best, Eliot