636 Stimmen

Die erste Übergabe eines Projekts mit Git ändern?

Ich möchte etwas im ersten Commit meines Projekts ändern, ohne dass alle nachfolgenden Commits verloren gehen. Gibt es eine Möglichkeit, dies zu tun?

Ich habe versehentlich meine Roh-E-Mail-Adresse in einem Kommentar im Quellcode angegeben und möchte sie ändern, da ich von Bots, die GitHub indizieren, mit Spam überschüttet werde.

967voto

VonC Punkte 1117238

Wie bereits von ecdpalma unter , git 1.7.12+ (August 2012) hat die Option erweitert --root pour git rebase :

" git rebase [-i] --root $tip " kann nun verwendet werden, um die gesamte Geschichte, die zu "" führt, umzuschreiben. $tip "bis hin zur Root-Übertragung.

Dieses neue Verhalten war zunächst hier diskutiert :

Ich persönlich denke " git rebase -i --root " sollte so gestaltet werden, dass es einfach funktioniert, ohne dass man " --onto "und lässt Sie sogar den ersten Eintrag in der Historie "bearbeiten".
Es ist verständlich, dass sich niemand daran gestört hat, da die Menschen am Anfang der Geschichte viel seltener umschreiben als sonst.

El Patch folgt .


(Originalantwort, Februar 2010)

Wie bereits in der Git-FAQ (und diese SO Frage ), ist die Idee:

  1. Neue temporäre Verzweigung erstellen
  2. Spulen Sie zu der Übergabe zurück, die Sie ändern möchten, indem Sie git reset --hard
  3. Ändern Sie diesen Commit (er würde über dem aktuellen HEAD stehen, und Sie können den Inhalt jeder Datei ändern)
  4. Den Zweig auf die geänderte Übergabe zurücksetzen, mit:

    git rebase --onto <tmp branch> <commit after changed> <branch>`

Der Trick besteht darin, sicherzustellen, dass die Informationen, die Sie entfernen wollen, nicht durch eine spätere Übertragung an anderer Stelle in Ihrer Datei wieder eingefügt werden. Wenn Sie das vermuten, dann müssen Sie filter-branch --tree-filter um sicherzustellen, dass der Inhalt dieser Datei keine sensiblen Informationen enthält.

In beiden Fällen wird die SHA1 jedes Commits neu geschrieben. Seien Sie also vorsichtig, wenn Sie den Zweig, dessen Inhalt Sie ändern wollen, bereits veröffentlicht haben. Sie sollten es wahrscheinlich nicht tun, es sei denn, Ihr Projekt ist noch nicht öffentlich und andere Leute haben noch keine Arbeit auf den Commits aufgebaut, die Sie umschreiben wollen.

318voto

ecdpalma Punkte 10022

Wie in 1.7.12 Versionshinweise können Sie verwenden

$ git rebase -i --root

97voto

cmcginty Punkte 106764

git rebase -i können Sie bequem alle früheren Übertragungen bearbeiten, mit Ausnahme der Root-Übertragung . Die folgenden Befehle zeigen Ihnen, wie Sie dies manuell tun können.

# tag the old root, "git rev-list ..." will return the hash of first commit
git tag root `git rev-list HEAD | tail -1`

# switch to a new branch pointing at the first commit
git checkout -b new-root root

# make any edits and then commit them with:
git commit --amend

# check out the previous branch (i.e. master)
git checkout @{-1}

# replace old root with amended version
git rebase --onto new-root root

# you might encounter merge conflicts, fix any conflicts and continue with:
# git rebase --continue

# delete the branch "new-root"
git branch -d new-root

# delete the tag "root"
git tag -d root

-2voto

ZelluX Punkte 62786

Wenn Sie nur den ersten Commit ändern wollen, können Sie git rebase ausprobieren und den Commit ändern, ähnlich wie in diesem Beitrag: Wie kann man einen bestimmten Commit in Git ändern?

Und wenn Sie alle Commits ändern wollen, die die Roh-E-Mail enthalten, ist filter-branch die beste Wahl. Es gibt ein Beispiel dafür, wie man die E-Mail Adresse global im Buch ändern kann Pro Git und diesen Link finden Sie vielleicht nützlich http://git-scm.com/book/en/Git-Tools-Rewriting-History

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X