2016-06-03 8 views
1

: Ich bin git und stolperte über ein seltsames ProblemGit fehlt verpflichtet

Also habe ich ein paar Commits zu meinem lokalen Repository und betrachtet sie mit git log und es funktionierte gut. Nach einiger Zeit habe ich ein älteres Commit ausgecheckt und später wollte ich zu meinem letzten Commit zurückkehren, um meine Arbeit fortzusetzen. Also habe ich noch ein Git Protokoll gemacht. Aber jetzt wurden die letzten 3-4 Commits nicht angezeigt. Die Eingabe von 'git checkout master' brachte mich zum letzten Commit des zweiten Log-Befehls, aber nicht zum Commit des ersten, den ich beschrieben habe. Ist das ein Problem oder muss ich einen anderen Befehl eingeben, um zum letzten Commit zurückzukehren?

Ich hoffe, dass mein Problem verständlich ist.

Alle Befehle i in der richtigen Reihenfolge getippt:

Git hinzufügen public/
Git commit -m „Fo“
(keine Fehler hier)
Git log --oneline.
Ausgabe: 8 commits.
Git checkout "ID des älteren Commits"
Git Log --oneline.
Ausgabe: 4 commits

+0

Sie sind sehr sicher, dass Sie diese Änderungen nicht in einem separaten/Entwicklungszweig vorgenommen haben oder vielleicht verstaut haben? Afaik; Wenn sich Ihr Git Status ändert, können Sie nicht einfach in einen anderen Zustand wechseln, ohne Ihre Änderungen zu speichern oder sie auf HEAD zurückzusetzen. Falls Sie Ihre Änderungen gespeichert haben, sollten Sie mit "git pop" in den Status zurückkehren, als Sie mit dem Stash begonnen haben. – Annihlator

+1

Sie sollten die genaue Abfolge der ausgeführten Befehle und die zugehörige Ausgabe angeben, um genau festzulegen, was Sie getan haben. Dann beschreibt genau was du haben willst. – aluriak

+0

Klingt wie ein abgetrennter Kopf. Probieren Sie SourceTree aus, bis Sie mit den Funktionen vertraut sind. – DanFromGermany

Antwort

2

Nachdem Sie git checkout sha1 laufen, Sie sind auf freistehende HEAD Zustand. Verwenden Sie git reflog, um Ihren vorherigen HEAD und git checkout diesen HEAD oder git reset --hard zu diesem HEAD zu finden.

Wenn Sie in einem benannten Zweig waren, könnten Sie einfach git checkout <branch name> zurückgehen. Wenn Sie sich auf einem getrennten HEAD befinden, verwenden Sie stattdessen git reflog.

+0

Also wenn ich auf losgelöstes HEAD bin, sehe ich nur die commits bis zu diesem Punkt? – GuyWithCookies

+0

"Dadurch wird Ihre Arbeitskopie zu einem 'abgetrennten HEAD', was bedeutet, dass Sie nicht mehr in einem Zweig arbeiten. Wenn Sie danach einen Commit machen möchten, werden Sie wahrscheinlich entweder einen Zweig wieder auschecken oder einen neuen erstellen Ast." – DanFromGermany

+1

@GuyWithCookkies könnte man einen abgetrennten HEAD als namenlosen Zweig betrachten. HEAD verweist immer auf das letzte Commit des Arbeitsbaums. Nachdem Sie ein bestimmtes sha1 ausgecheckt haben, sind die Commits danach versteckt, da sha1 nun der HEAD ist. Wenn Sie nicht genau wissen, was Sie tun, vermeiden Sie immer, sich in einem abgelegenen HEAD-Zustand aufzuhalten, da Sie sich leicht verwirren und verirren können. – ElpieKay

0

Ich glaube nicht, dass jemand bekommt, was Sie genau fragen, aber ich denke, Sie könnten Ihre Änderungen gespeichert haben.

Typ:

git stash list 

Was es dort zeigt, ist, gibt es keine Informationen?

Wenn es so etwas wie dieses

[email protected]{0}: WIP on master: 049d078 added the index file 

Sie geben kann, ist:

git stash apply // for the last stash to be applied 
git stash apply [email protected]{1} // for the second from last stash 

Außerdem können Sie versuchen:

git stash pop // apply the stash and then immediately drop it from your stack 

Der Unterschied zwischen diesen oben ist, dass Pop verwirft stash from stack, aber Apply hält es für eine mögliche zukünftige Wiederverwendung.

Wenn Ihr Commit im Log oder im Stash fehlt, wurde Ihr HEAD wahrscheinlich zurückgesetzt.

Ab jetzt machen Sie den nächsten Vorgang für Ihre Arbeit, um nichts zu vermasseln.

  • Kasse Ihre Niederlassung von aktualisierten Master

    git checkout -b your_branch_name 
    
  • Nachdem Sie eine Arbeit erledigt

    git add "name of your file" or git add * (to add all files) 
    
  • Git Befehl den Index aktualisiert fügen Sie den aktuellen Inhalt im Arbeits gefunden mit Baum, um den Inhalt vorzubereiten, der für das nächste Festschreiben bereitgestellt wird

    git commit -m "Your message here" 
    
  • Um es zu entfernten Ursprung schieben

    git push origin your_branch_name 
    
Verwandte Themen