413 Stimmen

Was tun mit einem Commit, das in einem abgetrennten Kopf gemacht wurde?

Mit git habe ich etwas wie dieses erstellt

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 (which does complete because there was some error due to the fact that I'm no more on master)

Weil mir gesagt wurde, dass ich mich auch dann noch engagieren kann, wenn ich mit dem Kopf nicht bei der Sache bin, habe ich das getan. Aber jetzt möchte ich meinen abgetrennten Head-Zweig und meinen lokalen Master-Zweig zusammenführen und dann meine Änderungen nach origin/master übertragen.

Also meine Frage ist, wie könnte ich den Master-Zweig mit meinem aktuellen Zustand (abgetrennten Kopf) zusammenführen

679voto

Ryan Stewart Punkte 120600

Erstellen Sie einen Zweig, wo Sie sind, wechseln Sie dann zu master und führen Sie ihn zusammen:

git branch my-temporary-work
git checkout master
git merge my-temporary-work

151voto

CB Bailey Punkte 693084

Sie könnten etwa so vorgehen.

# 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 temporary branch
git branch -d tmp

Noch einfacher wäre es

git checkout master
git merge HEAD@{1}

Dies birgt jedoch die Gefahr, dass es im Falle eines Fehlers etwas schwieriger sein kann, die auf dem abgetrennten Kopf vorgenommenen Übertragungen wiederherzustellen.

40voto

Bhushan Punkte 17263

Das habe ich getan:

Denken Sie grundsätzlich an die detached HEAD als neue Verzweigung, ohne Namen. Sie können in diesen Zweig wie in jeden anderen Zweig übertragen. Sobald Sie mit dem Commit fertig sind, wollen Sie ihn an den entfernten Standort übertragen.

Als Erstes müssen Sie also diese detached HEAD einen Namen. Sie können dies ganz einfach tun, indem Sie auf dieser Seite detached HEAD :

git checkout -b some-new-branch

Jetzt können Sie ihn wie jeden anderen Zweig an den Remote-Server übertragen.

In meinem Fall wollte ich diesen Zweig zusammen mit den Übertragungen, die ich in der detached HEAD (jetzt some-new-branch ). Alles, was ich tat, 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 the current state of master to my changes

Natürlich habe ich es später zu master .

Das war's dann auch schon.

24voto

Arnaud Le Blanc Punkte 95132

Sie können einfach tun git merge <commit-number> o git cherry-pick <commit> <commit> ...

Wie von Ryan Stewart vorgeschlagen, können Sie auch einen Zweig vom aktuellen HEAD erstellen:

git branch brand-name

Oder nur eine Markierung:

git tag tag-name

17voto

Nate Wilson Punkte 141

Alternativ können Sie die Commit-id in Ihren Zweig übernehmen.

<commit-id> made in detached head state

git checkout master

git cherry-pick <commit-id>

Keine temporären Verzweigungen, keine Zusammenführung.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X