Re: Proposal: tell git a file has been renamed
- From
- Jeremy Morton <admin@game-point.net>
- Date
- Apr 22, 2023, 19:54 UTC
- Message-ID
- <3ac19159-7314-c299-5112-b0f7aa2cc409@game-point.net>
- In-Reply-To
- <01ce01d97553$4361f990$ca25ecb0$@nexbridge.com>
https://stackoverflow.com/a/1094392/178757
says:
git mv oldname newname
is just shorthand for:
mv oldname newname git add newname git rm oldname
-- Best regards, Jeremy Morton (Jez) On 22/04/2023 20:47, rsbecker@nexbridge.com wrote: > No, history is preserved in the rename. > >> -----Original Message----- >> From: Jeremy Morton <admin@game-point.net> >> Sent: Saturday, April 22, 2023 3:45 PM >> To: rsbecker@nexbridge.com; git@vger.kernel.org >> Subject: Re: Proposal: tell git a file has been renamed >> >> I read that git mv is basically the equivalent to deleting the old file, creating the new >> file, and adding the changes. Isn't it? If so it's gonna have the same problem as I >> have now. >> >> -- >> Best regards, >> Jeremy Morton (Jez) >> >> On 22/04/2023 19:54, rsbecker@nexbridge.com wrote: >>> On Saturday, April 22, 2023 2:02 PM, Jeremy Morton wrote: >>>> Yes, I know Linus specifically doesn't store file rename info in Git. >>>> The trouble is, every now and then, I'll come across a situation >>>> where Git doesn't successfully detect that I've renamed a file >>>> because I'm doing something like renaming a class at the same time. >>>> So I'll have a file OldClassNameTests.cs and a NewClassNameTests.cs >>>> but a bunch of lines in that file have also changed from >>>> OldClassName.DoThing() to NewClassName.DoThing(). I can clearly see >>>> that this is a rename, but Git sees enough changed content that it >>>> doesn't realize it, and puts it in as a delete/add, losing the content history. >>>> >>>> The standard answer for this is to rename the file in one commit, >>>> then make the changes. That's fine if you know ahead of time you'll >>>> want to do this. However it's a total PITA if you have a bunch of >>>> changes and you realize that a rename has caused this problem. You >>>> now have to back out your changes to the renamed file, add the rename, commit >> it, then re-apply the changes. >>>> >>>> Could a command be added to git that means you tell Git that counts >>>> as a file rename? Git would add a marker to the staging area that >>>> the file has been renamed, and upon commit, would first generate an >>>> additional commit for each rename before generating the main commit, >>>> ensuring the rename operation counts as an actual rename, and the content's >> history is maintained. >>> >>> Would git mv work in your situation? You can stage changes to the original file, >> then use git mv. Or use git mv first. The rename shows as staged in any event. >>> --Randall >>> >>> > >