git: Wie bekomme ich die neueste Version meines Codes?


200

Ich benutze Git 1.7.4.1. Ich möchte die neueste Version meines Codes aus dem Repository abrufen, erhalte jedoch Fehler ...

$ git pull
….
M   selenium/ant/build.properties
….
M   selenium/scripts/linux/get_latest_updates.sh
M   selenium/scripts/windows/start-selenium.bat
Pull is not possible because you have unmerged files.
Please, fix them up in the work tree, and then use 'git add/rm <file>' as appropriate to mark resolution, or use 'git commit -a'.

Ich habe die lokalen Kopien der Dateien gelöscht, über die sich das Tool beschwert, aber ich erhalte immer noch die Fehler. Wie checke ich die neueste Version aus dem Remote-Repo aus? - Dave


1
Die Antwort von @ Kzqai unten hat mir geholfen: Versuche es git fetchzuerst. Ich habe keine Konflikte bekommen, aber so habe ich die neueste Version des Codes bekommen.
Chris K

Antworten:


258

Wenn Sie sich nicht für lokale Änderungen interessieren (einschließlich nicht verfolgter oder generierter Dateien oder Unterrepositorys, die sich gerade hier befinden) und nur eine Kopie aus dem Repo wünschen:

git reset --hard HEAD
git clean -xffd
git pull

Auch dies wird alle Änderungen, die Sie lokal vorgenommen haben, zerstören. Gehen Sie daher vorsichtig vor. Denken Sie rm -Rfdabei darüber nach.


1
Ich habe diese Befehle ausprobiert und trotzdem den Fehler "CONFLICT (Inhalt): Konflikt in Selen / ant / build.xml zusammenführen" (unter anderem) erhalten. Ich möchte nur die neueste Version meiner Datei mit dem im Repo enthaltenen überschreiben. Was kann ich tun??
Dave

31
git clean -fist nicht wirklich Teil der Antwort. Es werden Dateien gelöscht, die nicht im Repository gespeichert sind (z. B. in meinem Fall Protokolldateien). Sie müssen dies nicht tun, um git pullwieder arbeiten zu können, git reset --hard HEADes reicht einfach aus.
Darren Cook

12
Esh, Mann, empfehle keinen der wenigen Löschbefehle, um Neulingen zu helfen.
Kzqai

6
@DarrenCook Ich denke, das git clean -fist wichtig, wenn Sie eine echte Bereinigung Ihres Repositoys wollen. Dies entspricht einem "Alle aus Ordner löschen -> Neueste Version abrufen / Spezifisch abrufen" in TFS. In meinem Fall ist dies das, was ich wollte.
RPDeshaies

3
@Darren Ich denke, git clean -f`` ist auch wichtig. Ich möchte die neueste Version erhalten und keine veralteten Cache-Einträge oder andere generierte Ressourcen behalten, die sich nicht im Repo befinden. Die Antwort ist klar über die Tatsache, dass lokale Änderungen entfernt und die letzte Version aus dem Repo nachgeahmt werden, sodass es für mich perfekt aussieht. Ich würde meine Protokolldateien an einen anderen Ort verschieben, wenn ich sie zwischen den Aktualisierungen wirklich aufbewahren muss.
Balmipour

230

Fall 1: Kümmern Sie sich nicht um lokale Änderungen

  • Lösung 1: Holen Sie sich den neuesten Code und setzen Sie den Code zurück

    git fetch origin
    git reset --hard origin/[tag/branch/commit-id usually: master]
    
  • Lösung 2: Löschen Sie den Ordner und klonen Sie ihn erneut: D.

    rm -rf [project_folder]
    git clone [remote_repo]
    

Fall 2: Sorgen Sie sich um lokale Veränderungen

  • Lösung 1: Keine Konflikte mit der neuen Online-Version

    git fetch origin
    git status
    

    wird etwas berichten wie:

    Your branch is behind 'origin/master' by 1 commit, and can be fast-forwarded.
    

    Dann holen Sie sich die neueste Version

    git pull
    
  • Lösung 2: Konflikte mit der neuen Online-Version

    git fetch origin
    git status
    

    wird etwas berichten wie:

    error: Your local changes to the following files would be overwritten by merge:
        file_name
    Please, commit your changes or stash them before you can merge.
    Aborting
    

    Übernehmen Sie Ihre lokalen Änderungen

    git add .
    git commit -m ‘Commit msg’
    

    Versuchen Sie, die Änderungen zu erhalten (wird fehlschlagen)

    git pull
    

    wird etwas berichten wie:

    Pull is not possible because you have unmerged files.
    Please, fix them up in the work tree, and then use 'git add/rm <file>'
    as appropriate to mark resolution, or use 'git commit -a'.
    

    Öffnen Sie die Konfliktdatei und beheben Sie den Konflikt. Dann:

    git add .
    git commit -m ‘Fix conflicts’
    git pull
    

    wird etwas berichten wie:

    Already up-to-date.
    

Weitere Informationen: Wie verwende ich 'git reset --hard HEAD', um zu einem vorherigen Commit zurückzukehren?


@ tvl.Wie kann ich die neuesten Updates erhalten, ohne meinen Code (haben Konflikte) für die Verzweigung
festzuschreiben.

@ user3354457 xm, interessante Frage. Ich habe es noch nie versucht, aber Sie können es versuchen und
zurückmelden

3
Diese Antwort verdient weit mehr positive Stimmen als die, die als Antwort akzeptiert wurde.
James

@ James :) Ich bin froh, dass meine Antwort dir hilft. Tipp: Versuchen Sie, eine Dokumentation zu schreiben, als ob Sie nichts über ein Thema wissen, und die Ausführlichkeit wird Ihnen auf jeden Fall helfen.
TVL

4
Beste vollständige Antwort für Git Fetch. Dieser Beitrag sollte gesperrt sein
Callat

17

Ich vermute, dass das, was passiert ist, möglicherweise darin besteht, dass Sie die von Ihnen geänderten Dateien gelöscht haben (weil Sie sich nicht um diese Änderungen gekümmert haben), und jetzt nimmt git das Löschen als Änderung an.

Hier ist ein Ansatz, mit dem Sie Ihre Änderungen aus Ihrer Arbeitskopie in den "Stash" verschieben (abrufbar, falls sich herausstellt, dass Sie sie jemals wieder benötigen), damit Sie die neuesten Änderungen aus dem Upstream abrufen können.

git stash  
git pull

Wenn Sie jemals Ihre Dateien abrufen möchten (potenzielle Konflikte mit vorgelagerten Änderungen und allem), führen Sie a aus, git stash applyum diese Änderungen über Ihren Code zu kleben. Auf diese Weise haben Sie einen "Rückgängig" -Ansatz.


1
Ich würde wahrscheinlich empfehlen, es git stash popsei denn, Sie möchten eine Geschichte Ihrer Git-Verstecke
Rapnar

7

Sie müssen zuerst Ihre Dateien zusammenführen. Führen Sie eine git statusAktion durch, um festzustellen, welche Dateien zusammengeführt werden müssen (dh, Sie müssen zuerst die Konflikte lösen). Sobald dies erledigt ist, machen Sie es git add file_mergedund machen Sie es pullerneut.


2
Vielen Dank. Ich war mit diesem Problem konfrontiert. Ich habe einige Änderungen in meinen Arbeitsdateien, die ich nicht festschreiben möchte. Aber ich kann in diesem Fall keinen Git Pull ziehen. Also mache ich - Git Stash, Git Pull - Rebase, Git Stash Pop. Dann manuell zusammenführen und git add file_merged
RuntimeException

6

Versuchen Sie diesen Code

cd /go/to/path
git pull origin master

5
Willkommen bei Stackoverflow! Bitte fügen Sie Ihrer Lösung eine Erklärung hinzu, um besser zu beschreiben, wie das Problem gelöst wird. Das wird Ihre Antworten noch nützlicher machen
dkackman

2

Wenn Sie nur alles in Ihrem Arbeitsordner wegwerfen möchten (z. B. die Ergebnisse einer fehlgeschlagenen oder abgebrochenen Zusammenführung) und zu einem sauberen vorherigen Commit zurückkehren möchten, führen Sie a aus git reset --hard.


1

Ich verstehe, dass Sie Ihre lokalen Änderungen löschen und die Daten auf Ihrer Fernbedienung abrufen möchten.

Wenn alles andere fehlschlägt und Sie (verständlicherweise) Angst vor "Zurücksetzen" haben, ist es am einfachsten, den Ursprung in ein neues Verzeichnis zu klonen und Ihr altes in den Papierkorb zu werfen.


1

Wenn Sie diesen Befehl ausführen, erhalten Sie das neueste Tag, das normalerweise die Version Ihres Projekts ist:

git describe --abbrev=0 --tags

0

Es hört sich für mich so an, als hätten Sie core.autocrlf-Probleme. core.autocrlf = true kann Probleme verursachen, wie sie unter Windows beschrieben werden, wenn CRLF-Zeilenumbrüche in das Repository eingecheckt wurden. Versuchen Sie, core.autocrlf für das Repository zu deaktivieren, und führen Sie einen Hard-Reset durch.


0

Wenn Sie die Git-GUI verwenden, rufen Sie zuerst ab und führen Sie sie dann zusammen.

Abrufen über Remote-Menü >> Abrufen >> Ursprung. Zusammenführen über das Menü Zusammenführen >> Lokal zusammenführen.

Der folgende Dialog wird angezeigt.

Geben Sie hier die Bildbeschreibung ein

Aktivieren Sie das Optionsfeld Tracking-Zweig (ebenfalls standardmäßig ausgewählt), lassen Sie das gelbe Feld leer und drücken Sie Zusammenführen. Dadurch sollten die Dateien aktualisiert werden.

Ich hatte bereits einige lokale Änderungen rückgängig gemacht, bevor ich diese Schritte ausführte, da ich diese sowieso verwerfen wollte, damit ich sie später nicht durch Zusammenführen entfernen muss.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.