GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie kopiere ich Commits von einem Git-Repo in ein anderes?

Ich hatte ein ähnliches Problem, bei dem ich vergaß, ein Repo zu meinem GitHub zu forken und mehrere Commits hinzufügte, bevor ich meinen Fehler bemerkte.

Ich habe eine ziemlich einfache Lösung gefunden.

Entfernen Sie zuerst die Fernbedienung aus dem ursprünglichen Repo

git remote remove origin

Zweitens fügen Sie dem neuen Fork auf meinem Github eine Fernbedienung hinzu

git remote add origin <my repo URL>

Dann habe ich auf Origin Master gepusht und alle meine Commits wurden auf meinem Github angezeigt.


Gibt es eine Möglichkeit, die Commits in ein neues Repo zu bekommen (diesmal ist der erste Commit die LICENSE-Datei) und trotzdem die Commit-Metainformationen zu behalten?

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 immer noch zu Ihrem vorherigen Repo hinzufügen möchten.

Ja. Sie können Ihren LICENSE-Commit als den ersten Commit platzieren, indem Sie rebasen.

Rebasing ist eine geniale Art, die Commit-Reihenfolge neu zu ordnen, während alle Commit-Autoren und Commit-Daten intakt bleiben.

Wenn Sie an einem gemeinsam genutzten Repo arbeiten, wird im Allgemeinen davon abgeraten, es sei denn, Ihr gesamtes Team beherrscht Git fließend. Diejenigen, die dies nicht tun, können einfach eine neue Kopie des Repositorys klonen.

So erhalten Sie Ihren LICENSE-Commit als ersten Commit.

1. Aktualisieren und rebasen Sie Ihre lokale Kopie

Überprüfen Sie Ihr Projekt und platzieren Sie die LICENSE-Datei in einem Commit AUF Ihrem aktuellen 3-Commit-Stack.

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

Führen Sie dann einen interaktiven Rebase auf dem Master-Zweig zu REARRANGE durch die Commits.

git rebase -i --root

Es öffnet sich ein Editor. Verschieben Sie die unterste Zeile (Ihr "Initial Commit", das letzte Commit) an den Anfang der Datei. Dann speichern und den Editor verlassen.

Sobald Sie den Editor verlassen, schreibt Git die Commits in der gerade angegebenen Reihenfolge.

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

git log

zu überprüfen.

2. Erzwinge das Pushen deines neuen Repo-Status auf Github

Jetzt, da Ihre Kopie aktualisiert ist, müssen Sie sie per Push an Github zwingen.

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 wie diesem erzwingen, wenn jeder, der damit arbeitet, sich der bevorstehenden Änderung bewusst ist, sonst werden Ihre Mitarbeiter verwirrt.

3. Synchronisieren Sie Mitarbeiter mit GitHub

Schließlich müssen alle Mitarbeiter mit diesem Repository synchronisieren.

Zuerst müssen sie saubere Repositories haben da der folgende Befehl destruktiv sein kann, wenn es nicht gespeicherte Änderungen gibt.

# 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. Alle sollten jetzt synchron sein.


Linux
  1. So kopieren oder klonen Sie Berechtigungen von einer Datei in eine andere unter Linux

  2. Kopieren Sie die letzten N-Zeilen von einer Datei in eine andere?

  3. Erfahren Sie, wie Sie Dateien und Ordner von/auf einen anderen Server kopieren

  4. CentOS / RHEL :So verschieben Sie eine Volumengruppe von einem System auf ein anderes

  5. So kopieren Sie eine Tabelle von einer MySQL-Datenbank in eine andere MySQL-Datenbank

So kopieren Sie Elemente von einer DynamoDB-Tabelle in eine andere DynamoDB-Tabelle mit Python auf AWS

So finden und kopieren Sie bestimmte Dateitypen von einem Verzeichnis in ein anderes unter Linux

Wie kopiert man eine Datei aus einem anderen Verzeichnis in das aktuelle?

So kopieren Sie in Plesk Daten von einer WordPress-Website auf eine andere

Wie leitet man einen Port von einer Maschine zu einer anderen weiter?

Kopieren Sie große Dateien von einem Linux-Server auf einen anderen