Re: retrospective move
- From
Thomas Rast <trast@student.ethz.ch>
- Date
- Feb 4, 2009, 12:33 UTC
- Message-ID
- <200902041333.40776.trast@student.ethz.ch>
- In-Reply-To
- <adf1fd3d0902040231h2fb6f199oee143e36a7501a2a@mail.gmail.com>
Santi Béjar wrote:
Show 21 quoted lines
> 2009/2/4 Thomas Rast <trast@student.ethz.ch>: > > jemmyw wrote: > >> > >> Hi. Awhile ago I copied some files in my local repo then commited. In another > >> commit I deleted the original files, so essentially I did a mv that git > >> doesn't know about. Now I'm trying to merge from another branch where > >> changes have happened to the files in their original locations, and it's > >> making the merge somewhat difficult. Is there a way to ease this? > > > > Git never "knows" about a move, it only detects them after the fact. > > A corollary of this is that 'git mv a b' is more or less the same as > > 'cp a b; git rm a; git add b'. > > > > Now since you have a copy followed by a removal in two separate > > commits, the merge logic won't treat this as a rename. > > I don't think it holds. Git only sees the endpoints and the bases, it > does not matter if the "move" was actually two commits. Maybe they > have changed dramatically and git is not able to detect the rename (or > the files are small). Another possible cause could be that you have a > lot of renames (see config merge.renamelimit).
Hmm, you're right. I stand corrected.
Here's a sequence of commands that makes a test case:
git init seq 1 10 > A git add A git commit -m initial seq 11 15 >> A git commit -m second A seq 16 20 >> A git commit -m third git checkout -b side HEAD~2 cp A B git add B git commit -m copy seq 3 10 > B # <-- git commit -m edit B git rm A git commit -m delete
Then running
git merge master
goes through cleanly, but changing the line indicated above to 'seq 5 10' makes it less similar, falling through the detection and causing a conflict. The minimum required similarity for merges does not seem to be configurable unfortunately.
--
Thomas Rast
trast@{inf,student}.ethz.ch