2016-08-04 32 views
1

Ich weiß, dass, wenn ich will eine lokale Repo mit Dateien von einem Remote-Repo gewaltsam zu überschreiben, kann ich dies tun:Wie kann ich einen lokalen Repo zwangsweise mit Änderungen aus einem Remote-Repo überschreiben, während der Verlauf beibehalten wird?

git fetch --all 
git reset --hard origin/master 

Das Problem dabei ist, dass wenn ich auf der Geschichte des lokalen Repo aussehen Es hat die Geschichte komplett ausgelöscht und durch eine Kopie der Geschichte des Remote Repo ersetzt.

Gibt es eine Möglichkeit, dass ich diese zwangsweise überschreiben kann, während ich die Geschichte behalte?

Zum Beispiel, wenn ich eine Datei im lokalen Repo mit folgendem Inhalt:

- ContentA 
- ContentB 
- ContentC 

Und ich habe die gleiche Datei in der Remote-Repo mit folgendem Inhalt:

- ContentA 
- ContentC 
- ContentD 

nach dem Zug von der Remote-Repo, möchte ich die Geschichte dieser für die Datei anzuzeigen:

Version #1 
- ContentA 
- ContentB 
- ContentC 

Version #2 
- ContentA 
- ContentC 
- ContentD 

I don‘ t will, dass es dies zeigen (von einem gewaltsamen Überschreiben):

Version #1 
- ContentA 
- ContentC 
- ContentD 

auch nicht, ich will es, dies zeigen (von merge):

Version #1 
- ContentA 
- ContentB 
- ContentC 

Version #2 
- ContentA 
- ContentB 
- ContentC 
- ContentD 

Ist das möglich?

+0

Sie könnten Ihren eigenen benutzerdefinierten Git-Merge-Treiber definieren. – DavidN

+0

Auch Ihre Zurücksetzung - hart zum Ursprung/Meister bewegt Ihren lokalen Meister zu dieser Verpflichtung, also würde ich denken, dass Sie gerade dort Ihre Arbeit verloren haben. Klingt so, als ob Sie zusammenführen möchten, aber auf eine besondere Art und Weise. Ich frage mich nur, ob du Git nicht so verwendest, wie alle anderen auch, weil du beide Versionen leicht mit Git sehen kannst. Normalerweise wollen die Leute die Dateien nicht verketten, wenn sie sie zusammenbringen. Sie wollen sie zusammenführen. – DavidN

+0

Sie könnten die Fernbedienung auf die lokale rebase, oder Sie könnten remote in einen separaten Zweig ziehen und dann --soft, stash und pop, oder Cherry einzelnen Commits von der Fernbedienung auswählen. –

Antwort

1

Sie können die Fernbedienung nicht für Sie zusammenführen lassen. Du musst die Zusammenführung machen und dann drückst du darauf was du hast und es geht einfach weiter bis zu deinem Commit. Also müssen Sie Ihre commits zu lösen, was auch immer Sie wollen, dass es aussehen und dann schieben Sie das

Sie können eine Zusammenführung mit einer Option --no-commit tun und dann wählen, welche Seite die Dateien, die Sie wollen mit einem git checkout - -our oder git checkout - theirs, dann git fügen Sie diese Dateien und schließlich git commit zum Abschluss der Zusammenführung, um auszuwählen, welche der Datei ändert, die Sie wollen. Wie für die Geschichte, die Sie wollen, gut erhalten Sie die tatsächlichen Commit-Kommentare zu bearbeiten, wenn das was Sie wollen.

+0

Sie können mit '-Strategy ours' oder' -Strategy theirs' verschmelzen, anstatt sich die Mühe einer nicht verbindlichen Zusammenführung zu machen, wenn Sie dasselbe über das ganze Repo hinweg machen wollen. – hobbs

+0

Ich denke, das ist -X unsere oder -X ihre, wenn - Strategie ist rekursiv (das ist die Standardstrategie. – DavidN