2012-12-02 16 views
5

Ich habe ein lokales Git Repo, ein Remote Repo. Ich habe 5 Commits zum lokalen Repo seit dem letzten Pull von remote gemacht.git, squashing commits on the fly

Jetzt muss ich auf die Fernbedienung drücken. Und ich muss meine letzten 5 Commits quetschen.

Ich kann es tun, indem git rebase -i HEAD~5

Aber es ist nicht gut. Ich möchte nichts in meinem lokalen Repo ändern. Ich möchte ein gequetschtes Commit auf Remote übertragen und 5 unveränderte Commits in meinem lokalen Repo hinterlassen.

Irgendwelche Ideen?

UPD: was ist, wenn ich meinen lokalen Repo mit 5 commits habe. und ich muss ein neues Remote-Repo erstellen, um meinen Code mit anderen zu teilen. Wie man Squash für dieses neue Repo festlegt?

Antwort

1

Leichte Abweichungen von Titas ‚s answer, ohne Ihren master Zweig zu berühren, und auf einen neuen Zweig Quetschen (die Sie zu Ihrem neuen Repo schieben würden)

git remote add newrepo url://of/your/new/repo 
git checkout -b newbranch master 
git merge --squash master 
git push -u newrepo newbranch:master 

Aber das würde die vollständige Geschichte der Master-Push , +1 (gequetscht), begib dich auf dein neues Repo.

Wenn Sie einen Zweig neue Geschichte, mit Ihrem Repo als nach den 5 neuen Commits wollten, ist es leichter zu:

  • Klon lokal Ihr Repo,
  • die .git in diesem lokalen Klon entfernen,
  • git init. (dh, erstellen Sie einen neuen lokalen git Repo aus allen vorhandenen Dateien),
  • alles addieren und tun begehen ein,
  • fügen Sie Ihre Fernbedienung (auf Ihre neue remote Repo),
  • und drücken Sie das eine Commit Ihres neuen lokalen Repo.
5

Wenn Sie nur Ihre fünf Commits als Referenz behalten möchten, sollten Sie vielleicht in einer Zweigstelle mit ihnen arbeiten.

  1. git branch new-branch master
  2. Ihre Commits tun. Da Sie dies getan haben, setzen Sie einfach den Kopf des Kapitäns:

    git reset --hard HEAD~5

  3. git merge --squash master new-branch
  4. git push

werden Sie mit gequetschten Ende begehen auf master und origin/master und 5 Commits auf new-branch.

+1

+1. Siehe auch http://stackoverflow.com/questions/2427238/in-git-what-is-the-difference-between-merge-squash-and-rebase/2427520#2427520 – VonC

+0

ja. Es ist eine gute Wahl. Aber ich habe eine Frage gestellt, die meine Situation nicht genau beschreibt :).Ich habe 5 commits und muss sie an die NEW (leer) remote Repo/So habe ich nicht Tag, die in meinem lokalen und ich meine remote Repo ... Also habe ich über "on the fly" Quetschen gefragt. .. –