# how to apply patch in the middle

2 messages from 2009-01-15 to 2009-01-15. Participants: bill lam, Shawn O. Pearce.
Thread: https://gitlist.dev/t/17187

## bill lam, 2009-01-15 01:35

Subject: how to apply patch in the middle
Message-ID: <20090115013535.GB6937@b2j>
URL: https://gitlist.dev/e/20090115013535.GB6937%40b2j

```
I want to change history to rewrite

  - A - B - C - D - E - ..
 
as

 - A - C' - D - E - ..

because rebase/squash cannot automatically resolve conflicts, I
generate a patch file from A to C

  git diff A C >pat

However I don't know how apply this patch and cancel the old B and C.
Sorry for this newbie question.

-- 
regards,
====================================================
GPG key 1024D/4434BAB3 2008-08-24
gpg --keyserver subkeys.pgp.net --recv-keys 4434BAB3
唐詩008 杜甫  望嶽
    岱宗夫如何  齊魯青未了  造化鍾神秀  陰陽割昏曉
    盪胸生層雲  決眥入歸鳥  會當凌絕頂  一覽眾山小

```

## Shawn O. Pearce, 2009-01-15 01:39

Subject: Re: how to apply patch in the middle
Message-ID: <20090115013913.GC10179@spearce.org>
URL: https://gitlist.dev/e/20090115013913.GC10179%40spearce.org
In-Reply-To: <20090115013535.GB6937@b2j>

```
bill lam <cbill.lam@gmail.com> wrote:
> I want to change history to rewrite
> 
>   - A - B - C - D - E - ..
>  
> as
> 
>  - A - C' - D - E - ..

Uh, "git rebase -i A", change "pick" on line "C" to "squash".
This should have the same impact as what you are trying.

> because rebase/squash cannot automatically resolve conflicts, I
> generate a patch file from A to C
> 
>   git diff A C >pat
> 
> However I don't know how apply this patch and cancel the old B and C.

One way you can insert this is:

  git rebase -i A^
  change "pick" on line "A" to "edit"
  delete lines "B" and "C".

  when it stops for amend, don't amend.
  git apply --index pat
  git commit -m "my new B and C"
  git rebase --continue

-- 
Shawn.

```
