Mit git habe ich so etwas gemacht
git clone
git checkout {a rev number tree rev before} (here i started to be in a detached head state)
//hacking
git commit
//hacking
git commit
(some commit where made on Origin/master)
git pull (wich does complete because there was some error due to the fact that i'm no more on master)
Weil git zu mir sagte, dass ich mich in einem Zustand mit freistehendem Kopf begehen lassen kann, tat ich das. Aber jetzt möchte ich meinen abgetrennten Hauptzweig und meinen lokalen Hauptzweig zusammenführen und dann meine Änderungen in Origin verschieben /Meister.
Meine Frage ist also, wie ich den Hauptzweig mit meinem aktuellen Zustand zusammenführen könnte (abgetrennter Kopf).
Erstellen Sie einen Zweig, in dem Sie sich befinden, wechseln Sie dann zum Master und fügen Sie ihn zusammen:
git branch my-temporary-work
git checkout master
git merge my-temporary-work
Sie könnten so etwas tun.
# Create temporary branch for your detached head
git branch tmp
# Go to master
git checkout master
# Merge in commits from previously detached head
git merge tmp
# Delete temproary branch
git branch -d tmp
Noch einfacher wäre es
git checkout master
git merge [email protected]{1}
dies hat jedoch die geringfügige Gefahr, dass es bei einem Fehler ein wenig schwieriger sein kann, die auf dem abgelösten Kopf gemachten Commits wiederherzustellen.
Sie können einfach git merge <commit-number>
oder git cherry-pick <commit> <commit> ...
tun
Wie von Ryan Stewart vorgeschlagen, können Sie auch aus dem aktuellen HEAD einen Zweig erstellen:
git branch brand-name
Oder nur ein Tag:
git tag tag-name
Das habe ich gemacht:
Stellen Sie sich detached HEAD
grundsätzlich als einen neuen Zweig ohne Namen vor. Sie können sich wie jeder andere Zweig in diesen Zweig festlegen. Wenn Sie mit dem Festschreiben fertig sind, möchten Sie es zur Fernbedienung schieben.
Das erste, was Sie tun müssen, ist, diesem detached HEAD
einen Namen zu geben. Sie können es leicht machen, während Sie an diesem detached HEAD
sind:
git checkout -b some-new-name
Jetzt können Sie es wie jeden anderen Zweig auf die Fernbedienung verschieben.
In meinem Fall wollte ich diesen Zweig auch vorspulen, um die Commits zu meistern, die ich im detached HEAD
(jetzt some-new-branch
) gemacht habe. Alles was ich getan habe war
git checkout master
git pull # To make sure my local copy of master is up to date
git checkout some-new-branch
git merge master // This added current state of master to my changes
Natürlich habe ich es später mit master
zusammengeführt.
Das ist alles.
Im Falle von freistehendem HEAD funktionieren Commits wie normal, außer dass kein benannter Zweig aktualisiert wird. Um den Master-Zweig mit Ihren festgeschriebenen Änderungen auf den neuesten Stand zu bringen, erstellen Sie einen temporären Zweig, in dem Sie sich befinden (auf diese Weise werden alle festgeschriebenen Änderungen, die Sie im abgelösten HEAD vorgenommen haben), wechseln Sie zum Master-Zweig und führen Sie den temporären Zweig mit dem zusammen der Meister.
git branch temp
git checkout master
git merge temp
Ich habe auch einen Artikel gegründet, in dem erklärt wird, wie er verarbeitet wird. Ich füge ihn hinzu, weil er sich ein wenig von dem unterscheidet, was vorgeschlagen wurde
http://edspencer.net/2009/10/git-what-to-do-if-you-commit-to-no-branch.html
Später werde ich die erste Antwort als gute akzeptieren
Vielleicht nicht die beste Lösung (schreibt die Historie um), aber Sie könnten auch git reset --hard <hash of detached head commit>
tun.
Eine einfache Lösung besteht darin, einfach eine neue Verzweigung für dieses Commit zu erstellen und darauf zu überprüfen: git checkout -b <branch-name> <commit-hash>
.
Auf diese Weise werden alle vorgenommenen Änderungen in diesem Zweig gespeichert. Falls Sie Ihren Master-Zweig von verbleibenden Commits bereinigen müssen, müssen Sie unbedingt git reset --hard master
ausführen.
Damit schreiben Sie Ihre Äste neu, stören Sie also niemanden mit diesen Änderungen. Sehen Sie sich diesen Artikel an, um eine bessere Darstellung des Zustands detached HEAD zu erhalten.