Question: I made 3 'git commit' but I have not done a 'git push'.

```
1. commit 1
2. commit 2
   touches fileA
   touches fileB
   touches fileC
3. commit 3

```

So How can I 

1. roll back changes I made in file b for commit 2? (I can't do a 'git checkout -- fileB' anymore since I already 'git commit', how can i roll back my changes?
2. make changes in fileC and make it like part of commit 2? I think I can go and change the file now and then run a 'git rebase -i HEAD~2' Correct?

Answer: 
Use `git rebase -i HEAD~2` and edit the second commit.
This is how I would do it.

Checkout the old version of fileB and commit it

```
git checkout HEAD~3 -- fileB
git commit -m"fix fileB" fileB

```

Now rebase to squash in your fix with the old commit

```
git rebase -i HEAD~3

```

now move your most recent commit "fix fileB" to be after commit 2, and change the "pick" instruction to "squash", joining the commit changing fileB with the commit resetting it.