Вам следует отказаться от идеи коммитов, которая используется в нераспределенных системах scm ... git add -i
и варианты - это то, что вы ищете:
выберите ваши изменения с помощью 'git добавить -i 'и передать их;не пытайтесь быть идеальным и не стесняйтесь делать несколько коммитов
для новых файлов, я бы сначала зафиксировал пустой файл (возможно, с некоторыми заголовками);Вы можете сделать это один за другим в вашем редакторе:
очистить файл (выбросить свою работу)
git add the-file
+git commit -m "the-file: initial checkin"
отменить шаг 1
Повторите шаги выше;когда у вас есть некоторый опыт, вы можете использовать 'git commit --fixup HEAD ~ 2` или создавать сообщения коммита, такие как "fixup! добавлен параметр xyz" или "squash! исправлена глупая ошибка".
Естьнекоторые инструменты, которые помогают с git add -i
;например, git-gutter+-mode
в emacs делает почти идеальную работу, а последовательность magit c f
действительно крутая.
Теперь у вас есть история вроде
added parameter xyz
the-file-A: initial checkin
fixed stupid bug
the-file-B: initial checkin
fixup! added parameter xyz
fixup! added parameter xyz
squash! fixed stupid bug
...
Теперь, git rebase -i --autosquash
для вашеговетвь master, изменение порядка коммитов, и вы получите:
the-file-A: initial checkin
the-file-B: initial checkin
added parameter xyz
fixed stupid bug
, где последние два коммита содержат изменения в нескольких файлах / местах.
Каждый из этих коммитов связан с одной проблемой и может бытьобзор.
Вы можете запускать компиляцию и юнит-тесты с git rebase -f -e make
.