web-dev-qa-db-de.com

Was ist mit Commit im distanzierten Kopf zu tun?

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).

212
benzen

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
362
Ryan Stewart

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.

75
CB Bailey

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
15
Arnaud Le Blanc

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.

12
Bhushan

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
5
Razan Paul

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

1
benzen

Vielleicht nicht die beste Lösung (schreibt die Historie um), aber Sie könnten auch git reset --hard <hash of detached head commit> tun.

1
rookie

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.

0
Nesha Zoric