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

git add --patch bug with split+edit?

From
HKHannu Koivisto <azure@iki.fi>
Date
Jan 17, 2009, 01:37 UTC
Message-ID
<833afihfvc.fsf@kalahari.s2.org>
Greetings,

If I have a hunk that adds three lines, I can edit the hunk and remove the last line but I can't split it in two, stage the first part, edit the second part and remove the last line. An example:

mkdir gittest cd gittest git init echo "baz\nbaz" > baz git add baz git commit -m baz baz rm baz echo "sur\nbaz\nbaz\njee\njee" > baz git add --patch

Now say 's RET y RET e RET' and remove the second "+jee" line using your editor. The output for me looks like this:

--8<-----------------------------------------------------------------
diff --git a/baz b/baz
index 1f55335..48a5f83 100644
--- a/baz
+++ b/baz
@@ -1,2 +1,5 @@
+sur
 baz
 baz
+jee
+jee
Stage this hunk [y/n/a/d/s/e/?]? s
Split into 2 hunks.
@@ -1,2 +1,3 @@
+sur
 baz
 baz
Stage this hunk [y/n/a/d/j/J/e/?]? y
@@ -1,2 +2,4 @@
 baz
 baz
+jee
+jee
Stage this hunk [y/n/a/d/K/e/?]? e
Waiting for Emacs...
error: patch failed: baz:1
error: baz: patch does not apply
Your edited hunk does not apply. Edit again (saying "no" discards!) [y/n]?
--8<-----------------------------------------------------------------

What I also didn't expect is that if I answer 'n' to that last
question, I get...

@@ -1,2 +1,3 @@
+sur
 baz
 baz
Stage this hunk [y/n/a/d/j/J/e/?]?

...which is the first part of the splitted hunk that I already
staged.  If I answer 'd', git status and git diff indicate that
"+sur" is nevertheless staged.

Now, if instead of splitting the hunk and editing it, I edit the
entire...

@@ -1,2 +1,5 @@
+sur
 baz
 baz
+jee
+jee

...hunk and remove the last "+jee" line, I get no error.

I'm using git 1.6.1 on Linux.
-- 
Hannu
Next: Jeff King
Message 1 of 2 in “git add --patch bug with split+edit?”
  1. Hannu KoivistoJan 17, 2009
  2. Jeff KingJan 17, 2009

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.