2016-06-16 4 views
1

Хорошо, это немного сложнее и, скорее всего, очень специфично. Позвольте мне попытаться объяснить.Git совершить, затем переустановить от мастера, а затем внести небольшие изменения в исходное совершение

Допустим, я вытащил это git repo на свой локальный диск. Затем сделайте ряд изменений. Поскольку эти изменения во многих разных файлах и нацелены на разные цели, коммиты более чем одни. Допустим, что фиксация из этих изменений имеет значение хэша ab001 to ab005 (пять коммитов). И затем я создаю серию патчей и отправлю в сообщество для просмотра.

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

Все это хорошо.

Но на следующий день я получаю комментарии и советы по предыдущему патчу (один с этими 5 коммитами). Итак, теперь я должен внести некоторые изменения в соответствии с этими комментариями и отправить v2 (версия 2) более старого патча (т. Е. 5 коммитов). Поэтому я должен разоблачить эти 5 коммитов, внести изменения и снова зафиксировать и создать еще один патч (с этими 5 коммитами).

Как я могу это сделать, я не могу отказаться от него, так как в HEAD есть фиксация переадресации. Я действительно смущен этим.

+0

Документация git предлагает вам внести изменения в новые коммиты вместо того, чтобы исправлять те, которые у вас есть. См. Раздел «Восстановление из восходящей базы», ​​https://git-scm.com/docs/git-rebase – declan

+0

@declan, True. Но для каждого небольшого изменения и предложения я не могу отправлять дополнительные посылки. Он выглядит неряшливым, и рецензент теряет понимание предыдущих изменений (так как он не был объединен). – Haris

+0

Конечно, справедливо. – declan

ответ

2

Вы можете «отменить» переустановку у хозяина, затем внести поправки ab001 в ab005.

git log 

# commit ab005 
# Fifth commit on the topic branch 
# ... 
# 
# commit ab001 
# First commit on the topic branch 
# 
# commit xy999 
# Last commit on master before I started this new branch 

git reset --hard xy999 
git cherry-pick ab001 
... 
git cherry-pick ab005 

Теперь ваша история чистая, и вы можете вносить изменения в раздел ветви. При необходимости вы можете переделать rebase на master, хотя, если это вообще возможно, я рекомендую дождаться завершения работы в этой ветке.