wake-up-neo.net

Wie kann man Commits von einem Git-Repo in ein anderes kopieren?

Letzte Woche habe ich ein Github-Repo erstellt und vergessen, eine Lizenz für das Repo auszuwählen. Jetzt gibt es bereits 3 große Commits.

Ich habe die 3 Mitwirkenden gefragt, ob es in Ordnung ist, ob ich das Repo lösche und es dann erneut mit demselben Namen erstellt habe und dieses Mal beim Erstellen des Repos die Lizenz auswähle.

Frage

Gibt es eine Möglichkeit, wie ich die Commits in das neue Repo bekomme (diesmal ist das erste Commit die LICENSE-Datei) und trotzdem die Commit-Meta-Informationen beibehalten?

32
Jasmine Lognnes

Gibt es eine Möglichkeit, wie ich die Commits in das neue Repo bekomme (diesmal ist das erste Commit die LICENSE-Datei) und die Commit-Metainformationen trotzdem beibehalten?

Ja, indem Sie eine Fernbedienung hinzufügen und die Commits zusätzlich zu Ihrem ersten Commit auswählen.

# add the old repo as a remote repository 
git remote add oldrepo https://github.com/path/to/oldrepo

# get the old repo commits
git remote update

# examine the whole tree
git log --all --oneline --graph --decorate

# copy (cherry-pick) the commits from the old repo into your new local one
git cherry-pick sha-of-commit-one
git cherry-pick sha-of-commit-two
git cherry-pick sha-of-commit-three

# check your local repo is correct
git log

# send your new tree (repo state) to github
git Push Origin master

# remove the now-unneeded reference to oldrepo
git remote remove oldrepo

Der Rest dieser Antwort ist, wenn Sie die LIZENZ noch zu Ihrem vorherigen Repo hinzufügen möchten.

Ja. Sie können Ihr LICENSE-Commit als erstes Commit durch Umbasierung platzieren.

Das Neuanstellen ist eine gute Möglichkeit, die Festschreibungsreihenfolge neu zu ordnen, während alle Festschreibungsautoren und Festschreibungsdaten intakt bleiben.

Wenn Sie an einem freigegebenen Repo arbeiten, wird davon abgeraten, dass Ihr gesamtes Team nicht flüchtig ist. Für diejenigen, die dies nicht tun, können sie nur eine frische Kopie des Repositorys klonen.

So erhalten Sie Ihr LICENSE-Commit als erstes Commit.

1. Aktualisieren Sie Ihre lokale Kopie, und erstellen Sie sie erneut

Überprüfen Sie Ihr Projekt und platzieren Sie die LICENSE-Datei in einem COMMIT-OBEN Ihres aktuellen 3-Commit-Stacks.

#create LICENSE file, edit, add content, save
git add LICENSE
git commit -m 'Initial commit'

Führen Sie dann im Master-Zweig eine interaktive Neugestaltung durch, um die Commits zu RE-ORDNEN zu machen.

git rebase -i --root

Es wird ein Editor geöffnet. Verschieben Sie die untere Zeile (Ihr Commit "Initial Commit", das letzte Commit) an den Anfang der Datei. Dann speichern und beenden Sie den Editor.

Sobald Sie den Editor verlassen, schreibt git die Commits in der von Ihnen angegebenen Reihenfolge.

Sie haben jetzt Ihre lokale Kopie des Repositorys aktualisiert. tun:

git log

verifizieren.

2. Erzwingen Schieben Sie Ihren neuen Repo-Status auf Github

Jetzt, da Ihre Kopie aktualisiert wurde, müssen Sie die Option Push to github erzwingen.

git Push -f Origin master

Dadurch wird github angewiesen, den Master-Zweig an seinen neuen Standort zu verschieben. Sie sollten Push nur in seltenen Fällen erzwingen, wenn jeder, der damit arbeitet, die anstehende Änderung kennt, andernfalls werden Ihre Mitarbeiter verwirrt.

3. Synchronisieren Sie die Mitarbeiter mit github

Zuletzt müssen sich alle Mitarbeiter mit diesem Repository synchronisieren.

Zuerst es müssen saubere Repositorys vorhanden sein, da der folgende Befehl zerstörerisch sein kann, wenn nicht gespeicherte Änderungen vorhanden sind.

# make sure there are no unsaved changes
git status 

# pull the latest version from github
git fetch  

# move their master branch pointer to the one you published to github.
git reset --hard Origin/master

Das ist es. Jeder sollte jetzt synchron sein.

54
Moocowmoo

Ich hatte ein ähnliches Problem, als ich vergaß, ein Repo auf meinen Github zu legen und mehrere Commits hinzuzufügen, bevor ich meinen Fehler bemerkte.

Ich habe eine ziemlich einfache Lösung gefunden.

Entfernen Sie zuerst die Fernbedienung vom Original-Repo 

git remote remove Origin

Fügen Sie der neuen Gabel meines Github eine Fernbedienung hinzu

git remote add Origin <my repo URL>

Dann stieß ich auf Origin Master und alle meine Commits tauchten auf meinem Github auf.

0
Russ Bain
  • Ziel Git = UrlD (vorhandener Inhalt ist egal)
  • SourceGit = UrlS

    git clone UrlS
    
    git remote add Origin2 UrlD
    
    git Push -f Origin2 master
    

Das Ziel enthält jetzt dieselben Daten wie Quelle (Sie können statt Origin2 auch Origin verwenden.)

0
Blue Clouds