2016-08-16 6 views
0

Ich habe versucht, rückgängig zu machen, aber es gab mir lästige Konflikte.Wie man eine Kopie eines vorherigen git commits macht und es zum Kopf macht

Ich möchte etwas wie folgt aus:

A-B-C-D-E-F

A-B-C-D-E-F-D‘

ist es eine einfache Möglichkeit, dies zu tun.

+0

Warum möchten Sie eine Kopie eines Git-Commits auf dem HEAD spielen, und was würde das überhaupt bedeuten? –

+0

Ich habe meine vorherigen Commits vermasselt, aber ich möchte sie als History behalten – slimboy

+0

Gibt es bestimmte Elemente von 'E' und' F', die du beibehalten willst? Warum nicht einfach "F" und "E" zurücksetzen und damit fertig sein? Ein Zurücksetzen auf den aktuellen 'HEAD' wird niemals einen Konflikt verursachen. –

Antwort

2

Soweit ich aus Ihrem Post und Ihren Kommentaren erfahren kann, möchten Sie F und E wiederherstellen, aber behalten Sie sie als Verlauf. Was Sie tun können, ist dies:

git revert HEAD~n..HEAD 

Wo Sie n mit weit jedoch wieder von HEAD ersetzen (Ihre aktuelle Festschreibung) commit nachD ist.

In diesem Fall wird jedes Commit zwischen HEAD und dem Commit nach in umgekehrter Reihenfolge rückgängig gemacht, um Konflikte zu vermeiden.

Dies wird wesentlich komplizierter, wenn Merge-Commits in diesem Bereich sind. Wenn ja, so etwas wie folgt aus:

git revert -m 1 HEAD~n..HEAD 

, die die erste Mutter Zweig eines merge bevorzugen verpflichten, und Änderungen durch die Zusammenlegung in anderen Zweigen eingeführt entfernen. Tun Sie dies mit großer Sorgfalt, da es möglicherweise nicht das tut, was Sie wirklich wollen.

0

Im Gegensatz zur akzeptierten Antwort, würde ich vorschlagen, (vorausgesetzt, dass Sie über den master Zweig sprechen, die Sie ein paar Commits zurück wollen, während die übersprungenen diejenigen halten irgendwo):

git checkout master 
git checkout -b old_master 
git branch -f master D 
git checkout master 

Dies gibt Ihnen eine sehr klare Geschichte, und die Junk Sie noch entfernt ist um

master 
     | 
     v 
A-B-C-D 
     \ 
     E-F 
     ^
      | 
     old_master 

Alle weiteren Commits zu einem divergierenden Geschichte führen wird ...

 master 
      | 
      v 
A-B-C-D-G-H 
     \ 
     E-F 
     ^
      | 
     old_master 

Also E und F werden nie Ihre "echte" Geschichte durcheinander bringen, aber Sie werden immer in der Lage sein, zu ihnen zurückzukehren. Wenn und wann du entscheidest, dass du sie endlich nicht mehr brauchst, du bist nur git branch -D old_master und sie sind spurlos verschwunden.

Verwandte Themen