From: David Aguilar Date: Mon, 15 Jun 2009 07:36:43 GMT Subject: Re: A question about using 'add -p' to split the patch Message-ID: <20090615073635.GA53643@gmail.com> In-Reply-To: <46dff0320906142324i191e50d5v1e89ba6311377a47@mail.gmail.com> On Mon, Jun 15, 2009 at 02:24:39PM +0800, Ping Yin wrote: > On Mon, Jun 15, 2009 at 2:12 PM, David Aguilar wrote: > > On Mon, Jun 15, 2009 at 11:08:51AM +0800, Ping Yin wrote: > >> file bt.php in the HEAD: > >> > >> function bt_add($path) { > >>  return; > >> } > >> > >> file bt.php in the working directory: > >> > >> function bt_move($path, $pos) { > >>   return; > >> } > >> function bt_add($path, $pos) { > >>   bt_move($path, $pos) > >>   return; > >> } > >> > >> Now i want to split the change into two parts: > >> First introduce bt_move > >> Then add a param pos to bt_add and call bt_move > >> > >> With the 'e' action of 'add -p', i got > >> > >> -function bt_add($path) { > >> +function bt_move($path, $pos) { > >> +  return; > >> +} > >> +function bt_add($path, $pos) { > >> +  bt_move($path, $pos) > >>    return; > >>  } > >> > >> Then, i want to edit the patch to get > >> > >> > >> function bt_move($path, $pos) { > >>   return; > >> } > >> function bt_add($path) { > >>   return; > >> } > >> > >> However, whatever i do, the patch fails to apply. Any suggestion? > > > > Use git-gui or git-cola to select just bt_move() for addition. > > You can stage specific lines. > > Doesn't the 'e' action of 'add -p' do the same job with git-gui? It should. I tried it in git-{cola,gui} and I was able to do it by first staging the +bt_add(a,b) line, and then staging only the -bt_add(a) line. For add -e I got it to work by editing the patch to; +function bt_move($path, $pos) { +  return; +} function bt_add($path) {    return;  } The reason it's hard to get right is that you have to reconstruct the context of the original content for the adds/removes and remember to add the space before the reconstructed bt_add($path). Those kinda details are usually easier for software to get right ;-) -- David