Opcja git merge
--squash
może być przydatne i jest dostępne w git 1.4.1 i nowszych. W ten sposób powstaje efekt scalenia, ale nie tworzy się zatwierdzenia. Tak więc, jeśli 143eff
jest najstarszym popełnić chcesz dołączyć w zgnieciony popełnić, aktualna gałąź jest master
i „miesiąc temu” popełnić jest dcb7e5
, można zrobić:
# Save the old position of "master" by creating a branch old-master:
$ git checkout master
$ git branch old-master
# Create and checkout a branch called "new-master" that's at the old commit:
$ git checkout -b new-master 143eff
# Stage the effects of merging the "one month ago" commit:
$ git merge --squash dcb7e5
Updating 143eff3..dcb7e5b
Fast-forward
Squash commit -- not updating HEAD
[... status output showing the staged changes ..]
# Create the squashed commit:
$ git commit -m "A commit squashing history up to a month ago"
# (You could use --amend if you want them to be squashed into 143eff
# instead of being a commit after that.)
Teraz można sprawdzić z git diff dcb7e5 new-master
że oni naprawdę są tacy sami.
Następnie chcesz rebase resztę pracy na nowym-master:
$ git rebase --onto new-master dcb7e5 master
To zostawię cię na rebased master
który powinien mieć historię chcesz. . (Ponownie, można to sprawdzić z git diff old-master master
i git log
Kiedy naciska kapitanowi GitHub trzeba będzie dodać --force
odkąd przepisany historia:
# Push master to github, with "--force", since you've rewritten history:
$ git push --force origin master
Teraz można usunąć new-master
, który znajduje się na squash popełnienia, z:
git branch -d new-master
Widocznie github biegnie git gc --auto
na pchnięć, więc powinieneś zobaczyć trochę oszczędność miejsca wkrótce ...
możliwy duplikat [Jak połączyć pierwsze dwa zatwierdzenia repozytorium Git?] (Http://stackoverflow.com/questions/435646/how-do-i-combine-the-first-two-commits- of-a-git-repository) Podczas gdy pytanie tutaj powiązane mówi o połączeniu tylko dwóch commitów, opisane tam receptury działają również dla większej ilości zatwierdzeń. –
Dzięki Pavel. Sprawdzę to. – dugla
Czy chcesz zmiażdżyć wszystkie te zatwierdzenia w jeden commit, czy rzeczywiście chcesz odrzucić zmiany, które każdy z nich wprowadził? Na podstawie twoich komentarzy, które chcesz "odrzucić", a projekt zmierza w innym kierunku, nie jest dla mnie całkowicie jasne. – masonk