There are multiple questions on Stack Overflow addressing the problem of staging and committing only parts from files. However, I can't make it work.
Let's say we want to implement a dummy math class in php (the language doesn't matter) with some basic methods like: add
, subtract
, multiply
and divide.
Let's start with the class definition:
<?php
class Math {
}
?>
Now:
$ git add math.php
$ git commit -m "Create Math class."
In the next step we implement both add
and subtract
four methods:
<?php
class Math {
public function add($a, $b) {
return $a + $b;
}
public function subtract($a, $b) {
return $a - $b;
}
}
?>
But now we want to commit the implementation of the add
and the subtract
methods in separate commits.
Is this possible?
What I tried
$ git add -p
The following appears:
I would love to split the hunk into smaller hunks, so I press s
, and the following appears:
It seems that git didn't split it into smaller hunks.
Let's try now to manually edit the current hunk. So I press: e
.
My default text editor (sublime text) opens up, and here I can edit the hunk:
I try to simply delete line 8,9,10,11 - because I want to stage only the add
function.
I save, close the editor, but git says:
Your edited hunk does not apply. Edit again (saying "no" discards!) [y/n]?
I'm really new to git add -p
and interactive staging, so maybe it's something I do wrong, or simply it's not possible what I want, and really hope some more experienced git users have some instructions maybe also a solution for me.
Thank you!