Сжатие около 6 Кб фиксирует в одном - PullRequest
2 голосов
/ 05 марта 2020

У меня есть веб-сайт, когда я начал его разрабатывать, я клонировал Laravel репозиторий github со всеми его коммитами. Теперь я хочу удалить все оригинальные коммиты, оставить только мои. Есть какой-либо способ сделать это? Я попытался git rebase, но он требует, чтобы выбрать все 6k коммитов вручную и удаляет коммиты из последних. (Мне нужно от самого старого).

Ответы [ 3 ]

3 голосов
/ 05 марта 2020

Я думаю, что вы можете сделать это, проверяя указанный c коммит, создавая потерянную ветвь на этом коммите, а затем перебираясь на ветку.

  1. Извлекайте коммит перед вашим первым коммитом
    git checkout <commit hash before your first commit>
  2. Создание сиротской ветви. Индекс будет содержать файлы в этом состоянии, но история коммитов не будет.
    git checkout --orphan foo
  3. Фиксация сдавленных изменений
    git commit -m 'Squashed!'
  4. Извлечь основную ветку
    git checkout <original branch name>
  5. Перебазирование в новую сжатую ветвь.
    git rebase foo

Я проверил это с хранилищем с 5 коммитами на master:

* 40f82e6 - 5
* 78deb2c - 4
* aff34f8 - 3
* 15cd469 - 2
* 6e420cb - 1

Давайте сква sh первые три (вывод сокращен):

$ git checkout aff34f8
Note: checking out 'aff34f8'.
HEAD is now at aff34f8 3

$ git checkout --orphan foo
Switched to a new branch 'foo'

$ git commit -m 'Squashed!'
[foo (root-commit) 933b62d] Squashed!

$ git checkout master
Switched to branch 'master'

$ git rebase foo
First, rewinding head to replay your work on top of it...
Applying: 1
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
No changes -- Patch already applied.
Applying: 2
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
No changes -- Patch already applied.
Applying: 3
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
No changes -- Patch already applied.
Applying: 4
Applying: 5

После этого изменения мастер теперь выглядит так:

* 5d908c9 - 5
* 477ee53 - 4
* 933b62d - Squashed!
2 голосов
/ 05 марта 2020

Вы можете использовать git rebase, но с коммитом 6k или около того в squa sh, что может быть довольно громоздким.

Другой вариант может быть следующим:

  1. Из вашего последнего коммита создайте новую ветку: git checkout -b my-branch

  2. «Сброс» ваших промежуточных файлов, чтобы быть разницей между самым первым коммитом и вашим текущим состоянием: git reset --soft [hash of initial commit]

  3. Теперь ваши промежуточные файлы - это все различия между начальным и последним коммитами. Выполните git commit, чтобы зафиксировать эти изменения.

Теперь в этой вновь созданной ветви у вас есть один коммит после начального, который содержит все изменения по сравнению с этими первоначальными коммитами 6k.

2 голосов
/ 05 марта 2020

Вы можете просто создать новую потерянную ветку, если хотите потерять свои коммиты.

В этом примере ветка будет называться "fre sh":

git checkout --orphan fresh

Узнайте больше о git checkout --orphan в этом вопросе .

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