git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: git apply -3 doesn't work

From
KKKonstantin Kharlamov <hi-angel@yandex.ru>
Date
May 8, 2020, 13:52 UTC
Message-ID
<f5e4a133-8cfc-0f6f-bfeb-b62acca5d110@yandex.ru>
In-Reply-To
<bf5fab9b-78f0-8c8c-dcf6-e6672014412f@gmail.com>
On 5/8/20 4:47 PM, Phillip Wood wrote:
Show 32 quoted lines
> Hi Konstantin
> 
> On 08/05/2020 11:35, Konstantin Kharlamov wrote:
>> As description says. To check that the 3-way merge should actually work subsitute `git apply -3` with `git am -3` in the following steps. This way it works.
>>
>> # Steps to reproduce
>>
>>      $ git init
>>      Initialized empty Git repository in /tmp/foo/.git/
>>      $ echo hello > file1 && git add file1 && git commit -m "initial commit"
>>      [master (root-commit) 8334093] initial commit
>>       1 file changed, 1 insertion(+)
>>       create mode 100644 file1
>>      $ git checkout -b mybranch
>>      Switched to a new branch 'mybranch'
>>      $ echo bye > file1 && git add file1 && git commit -m "change file1 text"
>>      [mybranch 1807900] change file1 text
>>       1 file changed, 1 insertion(+), 1 deletion(-)
>>      $ git format-patch -1 --stdout > 1.patch
>>      $ git checkout master
>>      Switched to branch 'master'
>>      $ mv file1 file2
>>      $ git add -u && git add file2 && git commit -m "renamed file1 to file2"
>>      $ git apply -3 1.patch
>>      error: file1: does not exist in index
> 
> Judging from the error message it never gets as far as trying the 3 way merge because it first tries to apply the patch which modifies file1 but file1 does not exist in the index. If it were to try a 3 way merge in this case then on one side of the merge you've modified file1 and on the other side it has been deleted so there would be a merge conflict. The reason 'git am' succeeds is that the rename detection kicks in and so it applies the patch to file2 rather than file1
> 
> Best Wishes
> 
> Phillip
> 
Thank you. I wonder if it would make sense to `git aplly -3 1.patch` to behave similarly to `git am -3 1.patch && git reset HEAD^` (except without modifying reflog). I.e. so all heuristics `git am` makes use of would also apply to `git apply`
Previous: Phillip Wood
Message 3 of 3 in “git apply -3 doesn't work”
  1. Konstantin KharlamovMay 8, 2020
  2. Phillip WoodMay 8, 2020
  3. Konstantin KharlamovMay 8, 2020

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.