Удаление нескольких коммитов git из истории
Я работаю над проектом с некоторыми одноклассниками, и мы используем git для контроля версий. У одного из членов группы было имя пользователя, отличное от имени пользователя для учетной записи git, которую он использовал, поэтому после нескольких коммитов он не появлялся как участник. Пытаясь это исправить, он случайно сделал копию каждого сделанного коммита, причем его собственное имя пользователя имеет автора.
Есть ли способ просмотреть и удалить эти дубликаты из истории, фактически не изменив состояние репо?
Изменить: Например, предположим, что история коммитов репо это:
"Обновленный файл readme" - joesmith0x539
"Добавлены рамки пользовательского интерфейса" - johnnybravo22
После того, как другой участник попытался изменить свое имя пользователя с johnnybravo22, скажем, на johnnyb32, история стала такой:
"Обновленный файл readme" - joesmith0x539
"Обновленный файл readme" - johnnyb32
"Добавлены рамки пользовательского интерфейса" - johnnybravo22
"Добавлен фреймворк пользовательского интерфейса" - johnnyb32
Теперь я хочу удалить все ненужные дубликаты, которые он сделал.
1 ответ
Вы должны использовать SQUASH COMMITS. Но Changing-Multiple-Commit-Messages позволяют другим разработчикам предоставлять альтернативную версию того же самого изменения.
Не включайте никакие коммиты, которые вы уже отправили на центральный сервер - это может сбить с толку других разработчиков, предоставив альтернативную версию того же самого изменения.
Позвольте мне взять пример
1: git rebase -i HEAD~4
# вы увидите последние четыре коммита
2: эта команда всплывающего редактора с несколькими командами
pick 44d59fa Add capybaras page.
pick 7d2edea Add capybaras to index.
pick 6e8e5d6 Change plural on detail page to 'capybara'.
pick e8005f4 Change plural on index page to 'capybara'.
3: Они 2 были лучше как один коммит.
pick 44d59fa Add capybaras page.
pick 7d2edea Add capybaras to index.
pick 6e8e5d6 Change plural on detail page to 'capybara'.
squash e8005f4 Change plural on index page to 'capybara'.
Замечания: squash
объединяет коммит с предыдущим коммитом
4: всплывает еще один редактор с коммитами
# This is a combination of 2 commits.
# The first commit's message is:
Change plural on detail page to 'capybara'.
# This is the 2nd commit message:
Change plural on index page to 'capybara'.
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit
5: введите сообщение для новой фиксации, сохранения и выхода
6: git log --oneline
Мир снова будет счастлив!!! и надеюсь, это поможет вам!