Subject: Re: git-rebase + git-mergetool results in broken state

From: David Aguilar <[email-masked]>
Date: Tue, 1 Mar 2016 08:38:01 -0800

On Tue, Feb 23, 2016 at 04:44:49PM -0600, Joe Einertson wrote:
> I'm experiencing an annoying issue which leaves the repository in a
> weird, broken state. I am attempting a rather vanilla rebase, rebasing
> the commits from a feature branch on top of the newest commits on
> master.

Can you tell us a little more about what's in the branch being
rebased?  Is it perhaps a public project that you can share so
that we can reproduce the issue?

Here are a few more questions that can help narrow down the
issue:

* What Git vesion are you using?

* What mergetool are you using?
  - See the output "git config merge.tool"

* What platform are you on?  Are you on Windows?

* Does the conflicting commit contain renames?

I'm trying to figure out whether we are missing a `mkdir -p`
somewhere, and whether we hadn't run into this in the past
because the merge needs to involve renames.

> So, I run a typical series of commands:
> 1. git checkout feature-branch
> 2. git rebase master (conflicts ensue)
> 3. git mergetool
> 
> The conflicts are expected, but when using mergetool to resolve them,
> I encounter many "no such file or directory" errors.
> 
> mv: cannot stat
> ‘app/components/mediaManager/kbImageEditor.directive.coffee’: No such
> file or directory
> cp: cannot stat
> ‘./app/components/mediaManager/kbImageEditor.directive_BACKUP_13615.coffee’:
> No such file or directory
> mv: cannot move ‘.merge_file_ogGjXX’ to
> ‘./app/components/mediaManager/kbImageEditor.directive_BASE_13615.coffee’:
> No such file or directory
> /usr/lib/git-core/git-mergetool: 229: /usr/lib/git-core/git-mergetool:
> cannot create ./app/components/mediaManager/kbImageEditor.directive_LOCAL_13615.coffee:
> Directory nonexistent
> /usr/lib/git-core/git-mergetool: 229: /usr/lib/git-core/git-mergetool:
> cannot create ./app/components/mediaManager/kbImageEditor.directive_REMOTE_13615.coffee:
> Directory nonexistent

* Does the directory ./app/components/medaiManager/ exist in master?

* Did a commit on master perhaps move its content somewhere else?

* Does that directory have some chmod permissions, or is it owned
  by a different user?

* Are you able to create new files in that directory?

> This leaves weird dangling files like '.merge_file_ogGjXX' in the
> repo, and I assume I should not proceed with the merge since it
> couldn't even create the files to compare.

If you got a failure at this step you can safely delete those
temporary dangling files and then follow the advice given by
`git status`.

Typically it'll list files with conflicts.  Open them with
your $EDITOR, resolve conflicts like normal, and add the
result using `git add`.  Nonetheless, we'd like to get to the
bottom of this issue.

> Is this a known issue? Is there any workaround? Is it safe to proceed
> with the merge?

I've never ran into this myself, and it's never been reported
here so this is not a known issue.

It's still safe to proceed with the merge and resolve files the
normal way.  If you would rather undo the rebase and go back to
your original state (before the rebase) then you can do
`git rebase --abort` anytime.

I'm not sure about a workaround, but.. it might possibly work if
you were to `mkdir -p` the directory mentioned above, but that's
a guess.  If that does workaround the issue then please let us
know since that would be an interesting data point.
-- 
David