Intro

Допустим есть код:

def f(x)
  x * x
end

puts f(19)

А теперь мы хотим узнать, чему будет равна сумма квадратов 19, а заодно провести небольшой рефакторинг:

def square(x)
  x * x
end

def sum_of_squares(x)
  2 * square(x)
end

puts sqr(19)
puts sum_of_squares(19)

Рефакторинг и новая функция - разные задачи и хотелось бы их закоммитить по отдельности. Как?

Решение

Используем:

git add -p

Это запустит интерактивную утилиту, которая будет предлагать застейджить отдельные куски диффа.

На каждом шаге гит покажет кусок диффа и спросит, стейджить его или нет. Для справки можно ввести ?. Лично я использовал 4 варианта:

  • y - да, стейджим данный кусок.
  • n - нет, не стейджим.
  • q - прекратить стейджинг (текущие изменения сохраняются).
  • e - ручная правка текущего куска. Откроется в текстовом редакторе. Чтобы исключить какие-то строки из куска, просто комментим их.