Frage

    

Diese Frage bereits eine Antwort hier:

    
            
  •              Bearbeiten Sie die Wurzel begehen in Git?                                      5 Antworten                          
  •     
    

Ich mag zuerst in denen etwas ändern, um mit meinem Projekt verpflichten Sie alle nachfolgenden Commits zu verlieren. Gibt es eine Möglichkeit, dies zu tun?

ich meine rohe E-Mail versehentlich in einem Kommentar aufgeführt innerhalb des Quellcodes, und ich möchte es ändern, wie ich von Bots spammed immer GitHub Indizierung.

War es hilfreich?

Lösung

Wie bereits erwähnt von ecdpalma unten , git 1.7.12+ (August 2012) hat die Option --root für git rebase erweitert:

git rebase [-i] --root $tip“ kann nun verwendet werden, um alle, die Geschichte neu zu schreiben, die zu „$tip“ bis auf die Wurzel begehen.

Das neue Verhalten war zunächst hier besprochen :

  

Ich persönlich denke, „git rebase -i --root“ sollte, ohne dass „--onto“ nur Arbeit gemacht werden, und lassen Sie „Bearbeiten“ auch die erste in der Geschichte.
  Es ist verständlich, dass niemand die Mühe gemacht, da die Menschen weniger oft viel sind Umschreiben in der Nähe der Anfang der Geschichte, als sonst.

Die Patch gefolgt .


(original Antwort, Februar 2010)

erwähnt Wie in der Git FAQ (und diese SO Frage ), die Idee ist:

  1. Erstellen Sie neuen temporären Zweig
  2. Rewind es das Festschreiben Sie wollen mit git reset --hard ändern
  3. ändern, die commit (wäre es Anfang der aktuellen HEAD sein, und Sie können den Inhalt einer Datei ändern)
  4. Rebase Zweig auf der Oberseite geändert begehen, mit:

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

Der Trick ist, um sicherzustellen, dass die Informationen, die Sie entfernen möchten nicht wieder eingeführt werden durch eine später irgendwo anders in der Datei zu begehen. Wenn Sie das vermuten, dann haben Sie filter-branch --tree-filter zu verwenden, sicher, dass der Inhalt zu machen diese Datei enthält nicht in jeder der fühlbaren Informationen verpflichten.

In beiden Fällen können Sie die SHA1 von jedem Commit Umschreiben am Ende, also seien Sie vorsichtig, wenn Sie bereits den Zweig veröffentlicht haben Sie den Inhalt modifizieren. Sie sollten wahrscheinlich tun es nicht, es sei denn Ihr Projekt noch nicht öffentlich und andere Menschen haben keine Arbeit von den Commits basierend Sie sind neu zu schreiben.

Andere Tipps

angegeben Wie in 1.7.12 Release Notes , können Sie Verwendung

$ git rebase -i --root

git rebase -i können Sie alle vorherigen Commits bequem bearbeiten, mit Ausnahme der Wurzel commit . Die folgenden Befehle zeigen, wie Sie dies manuell tun.

# 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

Wenn Sie nur die erste verpflichten ändern möchten, können Sie git rebase versuchen und ändern, die zu begehen, die zu diesem Beitrag ähnelt: Wie ein modifizieren angegeben in git commit?

Und wenn Sie alle Commits ändern möchten, die die rohe E-Mail enthalten, Filter-Zweig ist die beste Wahl. Es ist ein Beispiel dafür, wie zu ändern E-Mail-Adresse global auf dem Buch Pro Git , und Sie können diesen Link nützlich http://git-scm.com/book/en/Git-Tools-Rewriting-History

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top