Git: Стадия в Commit, каков правильный рабочий процесс? - PullRequest
21 голосов
/ 17 апреля 2010

Я только что создал большой кусок кода, который хочу зафиксировать несколькими отдельными коммитами.
Таким образом, я могу ставить соответствующие части, фиксировать, ставить, фиксировать, ... и так далее, пока все изменения не будут зафиксированы.

Отсутствует часть, как я могу проверить, правильно ли я делю коммит.
То есть компилируется ли хотя бы та часть, которая находится в области подготовки?

Для этого я должен каким-то образом привести свое рабочее дерево в синхронизацию с индексом (областью подготовки), не теряя изменений, которые будут зафиксированы позже.

Каков правильный способ сделать это?
Каков самый быстрый способ сделать это?

Обновление:
Как это сделать с помощью magit?

Ответы [ 2 ]

16 голосов
/ 17 апреля 2010

Вы можете сделать это с:

$ git branch task1 # first set of commit to do

Промежуточная ветвь может быть полезна для записи некоторых промежуточных коммитов, когда вы медленно добавляете некоторый контент в индекс.

Затем попробуйте интерактивный сеанс для добавления того, что вы хотите:

$ git add -i

Добавьте в любое время, когда вы хотите проверить, что вы добавили:

$ git stash --keep-index

Если он компилируется, git commit ваша текущая работа, а если task1 еще не завершена, git stash pop, чтобы восстановить полное рабочее дерево и повторить.

Как только task1 будет полностью выпечен, вы можете обрезать все эти коммиты 'task1' и объединить всю работу в мастер:

$ git checkout master
$ git merge task1
$ git branch -D task1 # no need for that intermediate branch

Если вы хотите сохранить историю некоторых значительных task1 коммитов, вы можете перебазировать сначала task1 поверх мастера, прежде чем объединить master в task1 (ускоренная перемотка вперед)

Наконец, если ваш тайник все еще содержит незавершенную работу, повторите весь процесс для task2.

0 голосов
/ 07 октября 2011

Вот магический способ, которым я пользуюсь:

  • сделайте ваш индекс для первого коммита с помощью magit "u" или "s", чтобы поставить или отключить блок / files / region. (Это можно сделать и с помощью git gui). Как только ваш индекс готов к фиксации:
  • коммит с "c", напишите ваше сообщение коммита, Ctrl-C Ctrl-C для коммита.
  • заначка с "z", за которым следует << Enter >>, это сохранит все ваши изменения. Чтобы вернуть ваши изменения, вы можете использовать «A», когда ваш указатель находится на правильной записи тайника.

сделайте ваши тесты, чтобы проверить, хорош ли ваш коммит. Если необходимо внести какие-либо изменения, повторите действия, как и раньше, но нажмите Ctrl-C Ctrl-A, прежде чем совершать коммит, находясь на экране сообщения фиксации. Это изменит (завершит) ваш последний коммит вместо создания нового.

Обратите внимание, что если позже вы поймете, что какой-то код должен изменить коммит, который находится перед последним, что вы сделали, вы должны зафиксировать код самостоятельно (с временной сводкой) и сложить их в правильный коммит на «L» для доступа к экрану журнала, затем наведите указатель перед тем, как оба коммита вы хотите сжать, и нажмите «E», чтобы запустить сеанс «git rebase -i». Переупорядочьте коммиты так, чтобы временная сводка «исправила» целевой коммит. Выйти из буфера и ТАДА. Все сделано.

...