Избавиться от нескольких коммитов - PullRequest
0 голосов
/ 02 октября 2018

Это мой журнал основной ветки github:

---newest commits---
dfnjk35 - I dont want theese changes
fsdjk5k - I dont want theese changes
sdfnjk5 - ok
zchnjk4 - ok
jqwio75 - I dont want theese changes
dsfnk51 - I dont want theese changes
asnmm12 - ok
hfgaut1 - ok
zxdfsd2 - ok
---oldest commits---

Как мне избавиться от ненужных изменений?Я хочу иметь состояние от asnmm12 и zchnjk4 и sdfnjk5.Я не хочу больше портить это, поэтому прошу помощи.

Ответы [ 3 ]

0 голосов
/ 02 октября 2018

Учитывая, что ваша ветка уже опубликована на GitHub, история переписывания практически не обсуждается.В этом случае я бы посоветовал использовать git revert для функциональной отмены коммитов, которые вам не нужны:

git revert dsfnk51
git revert jqwio75
git revert fsdjk5k
git revert dfnjk35

Эти команды создадут четыре новых коммитов в верхней части вашей ветви.который функционально отменит то, что сделал коммит.Обратите внимание, что использование интерактивной перебазировки здесь, вероятно, не целесообразно, так как переписывание истории общей публичной ветви может привести к хаосу для всех, кто ее разделяет.

Обратите внимание, что вы можете столкнуться с конфликтами при выполненииgit revert.Если это произойдет, вам придется разрешить конфликты, git add файлы, которые были в конфликте, а затем git commit.Я также предполагаю, что в диапазоне, который вы показали нам выше, нет коммитов слияния.

0 голосов
/ 02 октября 2018

Создайте новую ветку из коммитов master и cherry pick, которые вы хотите в новую ветку, с помощью команды git cherry-pick

0 голосов
/ 02 октября 2018

Научитесь использовать интерактивную функцию перебазирования в Git, это здорово.

git rebase -i COMMIT-ID откроет редактор и попросит вас выбрать, что делать с каждым коммитом после COMMIT-ID.Вы можете выбрать одновременное сжатие нескольких коммитов или их полное удаление (что может повлиять на то, будут ли корректно применяться последующие коммиты, поэтому вам, возможно, придется разрешить конфликт).

Запустите git rebase -i zxdfsd2 и в редакторе выможете просто удалить строки для коммитов, которые вам не нужны, и Git воссоздает ветку без этих коммитов.

Альтернативой может быть создание новой ветки, cherry-pick коммиты, которые вы хотите в этой веткезатем, как только вы достигнете желаемого состояния, сбросьте master так же, как и эту ветвь.

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

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