Problems rebasing branch after renaming files

2 messages, 2 authors, 2016-06-15 · open the first message on its own page

Problems rebasing branch after renaming files

From: Salvatore Iovene <hidden>
Date: 2016-06-15 22:46:17

Hi list,
I ran into a problem, and I'm unsure it's a git bug or a misuse of mine.

Here's the scenario:

1) Have the master branch and a branch called A

master
|
|----- A

2) Work more in master

master
|
|----- A
|
|

3) Create branch B and work on it. In this branch, rename a directory
containing source files with git-mv

master
|
|----- A
|
|----- B

4) Merge B to master

master
|
|------ A
|
|
|
|

5) Rebase A to master

master
|
|
|
|
|
|----- A

I found that, checking out A, my files in the now renamed directories
are as the were in B, i.e. not including the changes made in A,
because I have rebased A to master and git didn't realize that the
files in old_directory_name are the same as in new_directory_name so
they should have been merged.

Either this is a git bug or not, can anyone suggest a way to fix this?
All I've thought so far is to git-format-patch the patches that I had
in A, use sed to replace the old_directory_name with the new one,
create a new branch called A2 at master's head, apply the patches
there and git-branch -D A.

Thanks!

PS: please CC me as I'm not on the list.

-- 
Salvatore Iovene
http://www.iovene.com/
http://www.geekherocomic.com/

Re: Problems rebasing branch after renaming files

From: Jakub Narebski <hidden>
Date: 2016-06-15 22:46:17

Salvatore Iovene [off-list ref] writes:
Hi list,
I ran into a problem, and I'm unsure it's a git bug or a misuse of mine.
[...]
3) Create branch B and work on it. In this branch, rename a directory
containing source files with git-mv
4) Merge B to master
5) Rebase A to master
[...]
I found that, checking out A, my files in the now renamed directories
are as the were in B, i.e. not including the changes made in A,
because I have rebased A to master and git didn't realize that the
files in old_directory_name are the same as in new_directory_name so
they should have been merged.

Either this is a git bug or not, can anyone suggest a way to fix this?
All I've thought so far is to git-format-patch the patches that I had
in A, use sed to replace the old_directory_name with the new one,
create a new branch called A2 at master's head, apply the patches
there and git-branch -D A.
In short: you have rename in mainline, and want to rebase branch from
before rename.

This problem is not bug in git, it is rather limitation of default
patch based rebase. The git-format-patch | git-am pipeline is fast,
but it cannot deal with renames in mainline. You have to use
merge-based rebase, i.e. use

  $ git rebase --merge <upstream>
From git-rebase(1):
  -m, --merge
    Use merging strategies to rebase. When the recursive (default) merge
    strategy is used, this allows rebase to be aware of renames  on  the
    upstream side.

  -s <strategy>, --strategy=<strategy>
    Use  the  given  merge  strategy;  can be supplied more than once to
    specify them in the order they should be tried. If there  is  no  -s
    option, a built-in list of strategies is used instead
    (git-merge-recursive when merging a single head, git-merge-octopus
    otherwise). This implies --merge.

Or use "git rebase --interactive".

-- 
Jakub Narebski
Poland
ShadeHawk on #git
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help