Using git add --patch, git can stage smaller chunks of code for creating more atomic commits. The interactive mode provides chunks, and each can be staged using y or rejected using n. But sometimes, a more granular chunk is needed, and that is where s and e come into play. Where s tries to split it into smaller chunks, it might not always work wanted. You can then use e to manually edit a patch.
The desired change in the following example would be only to commit changes around variable z:
--- a/main.rs
+++ b/main.rs
@@ -1,5 +1,5 @@
fn main() {
let x = 5;
- let y = 6;
- let z = 7;
+ let y = 7;
+ let z = 8;
println!("{} {} {}", x, y, z);
}
We can use the e command to edit the chunk in a text editor manually. To only commit the changes for variable z, we need to remove the line + let y = 7; and change the - before let y = 6 into a space ` `. The patch should then look like this:
fn main() {
let x = 5;
let y = 6;
- let z = 7;
+ let z = 8;
println!("{} {} {}", x, y, z);
}
After saving and closing the editor, git will stage the modified patch, allowing you to create a commit with only the changes to variable z.