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

[BUG] Silent data loss on merge with uncommited changes + renames

From
Matthieu Moy <matthieu.moy@grenoble-inp.fr>
Date
Apr 22, 2013, 09:24 UTC
Message-ID
<vpqobd6q5nm.fsf@grenoble-inp.fr>
Hi,

Following the discussion on "merge with uncommited changes" inside the "git pull --autostash" thread, I did a bit of testing, and encountered a case with silent data loss. In short: merge a branch introducing changes to a file. If the file has been renamed in the current branch, then "git merge" follows the rename and brings changes to the renamed file, but uncommited changes in this file are overriden silently.

I could have expected "git merge --abort" to fail, but the problem is really more serious here: data loss is done silently before giving me an opportunity to do or abort anything.

Reproduction script below:
#! /bin/sh

# Create repo git init git.$$ cd git.$$ echo init > test.txt git add test.txt git commit -m init

# Make a branch changing test.txt git checkout -b branch echo new > test.txt git commit -am new

# Move test.txt on master git checkout master git mv test.txt moved.txt git commit -m move

# Make uncommited changes to moved.txt echo precious > moved.txt

# Merge loses uncommited content "precious" in "moved.txt" silently git merge --no-edit branch ls # lists just moved.txt git status # nothing to commit, working directory clean cat moved.txt # Says "new".

-- 
Matthieu Moy
http://www-verimag.imag.fr/~moy/
Next: Johannes Sixt
Message 1 of 4 in “[BUG] Silent data loss on merge with uncommited changes + renames”
  1. Matthieu MoyApr 22, 2013
  2. Johannes SixtApr 22, 2013
  3. Matthieu MoyApr 22, 2013
  4. Junio C HamanoApr 22, 2013

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.