Also habe ich meiner .gitignore-Datei einen Ordner hinzugefügt.
Sobald ich einen git status
mache, sagt es mir
# On branch latest
nothing to commit (working directory clean)
Wenn ich jedoch versuche, Zweige zu wechseln, bekomme ich Folgendes:
My-MacBook-Pro:webapp marcamillion$ git checkout develop
error: The following untracked working tree files would be overwritten by checkout:
public/system/images/9/thumb/red-stripe.jpg
public/system/images/9/original/red-stripe.jpg
public/system/images/8/thumb/red-stripe-red.jpg
public/system/images/8/original/red-stripe-red.jpg
public/system/images/8/original/00-louis_c.k.-chewed_up-cover-2008.jpg
public/system/images/7/thumb/red-stripe-dark.jpg
public/system/images/7/original/red-stripe-dark.jpg
public/system/images/7/original/DSC07833.JPG
public/system/images/6/thumb/red-stripe-bw.jpg
public/system/images/6/original/website-logo.png
public/system/images/6/original/red-stripe-bw.jpg
public/system/images/5/thumb/Guy_Waving_Jamaican_Flag.jpg
public/system/images/5/original/logocompv-colored-squares-100px.png
public/system/images/5/original/Guy_Waving_Jamaican_Flag.jpg
public/system/images/4/thumb/DSC_0001.JPG
public/system/images/4/original/logo.png
public/system/images/4/original/DSC_0001.JPG
public/system/images/4/original/2-up.jpg
public/system/images/3/thumb/logo2.gif
public/system/images/3/original/logo2.gif
public/system/images/3/original/Guy_Waving_Jamaican_Flag.jpg
public/system/images/3/original/11002000962.jpg
public/system/images/2/thumb/Profile Pic.jpg
public/system/images/2/original/Profile Pic.jpg
public/system/images/2/original/02 Login Screen.jpg
public/system/images/1/original/Argentina-2010-World-Cup.jpg
Please move or remove them before you can switch branches.
Aborting
So sieht meine .gitignore-Datei aus:
.bundle
.DS_Store
db/*.sqlite3
log/*.log
tmp/**/*
public/system/images/*
public/system/avatars/*
Wie bringe ich das zum Laufen, damit ich Zweige wechseln kann, ohne diese Dateien zu löschen?
Wenn ich eine Änderung vornehme, hat dies Auswirkungen auf diese Dateien? Mit anderen Worten, wenn ich später in diesen Zweig zurückkommen würde, wäre alles bis zu meinem letzten Commit perfekt?
Ich möchte diese Dateien nicht verlieren, ich möchte sie nicht nur verfolgen.
Anscheinend möchten Sie, dass die Dateien ignoriert werden, sie wurden jedoch bereits festgeschrieben. .gitignore hat keine Auswirkung auf Dateien, die sich bereits im Repo befinden, daher müssen sie mit git rm --cached
entfernt werden. Der --cached
verhindert, dass es Auswirkungen auf Ihre Arbeitskopie hat, und wird beim nächsten Commit als entfernt markiert. Nachdem die Dateien aus dem Repo entfernt wurden, verhindert der .gitignore, dass sie erneut hinzugefügt werden.
Sie haben jedoch ein anderes Problem mit Ihrem .gitignore. Sie verwenden übermäßige Platzhalter und führen dazu, dass sie weniger übereinstimmen, als Sie erwarten. Lassen Sie stattdessen den .gitignore ändern und versuchen Sie dies.
.bundle
.DS_Store
db/*.sqlite3
log/*.log
tmp/
public/system/images/
public/system/avatars/
Ich habe auch diese Nachricht getroffen. In meinem Fall wollte ich die Akten nicht aufbewahren, also funktionierte das für mich:
git clean -d -f .
git clean -d -f ""
Wenn Sie auch Dateien entfernen möchten, die von git ignoriert werden, führen Sie den folgenden Befehl aus.
git clean -d -fx .
git clean -d -fx ""
http://www.kernel.org/pub/software/scm/git/docs/git-clean.html
-x
bedeutet, dass ignorierte Dateien ebenso entfernt werden wie Dateien, die git nicht kennt.
-d
bedeutet das Entfernen von nicht protokollierten Verzeichnissen zusätzlich zu nicht protokollierten Dateien.
-f
ist erforderlich, um die Ausführung zu erzwingen.
Warnung: Dies löscht die lokalen Dateien, die nicht indiziert werden.
Erzwinge es einfach: git checkout -f another-branch
Wenn Sie mit OS X arbeiten, kann dies daran liegen, dass der Dateiname einer Datei bestimmte Groß- und Kleinschreibung hatte. Stellen Sie die folgende Konfigurationsoption ein:
git config core.ignorecase true
Git sagt Ihnen, dass es Dateien erstellen möchte (benannt public/system/images/9/...
etc), aber in diesem Verzeichnis sind bereits Dateien vorhanden, die nicht von Git verfolgt werden. Vielleicht hat jemand anderes diese Dateien zum Git-Repository hinzugefügt, und zum ersten Mal haben Sie zu diesem Zweig gewechselt?
Es gibt wahrscheinlich einen Grund, warum sich diese Dateien in Ihrem Zweig develop
befinden, aber nicht in Ihrem aktuellen Zweig. Sie müssen möglicherweise Ihre Mitarbeiter fragen, warum das so ist.
Wie bekomme ich das, damit ich Zweige wechseln kann, ohne diese Dateien zu löschen?
Sie können es nicht tun, ohne die Dateien irgendwie verschwinden zu lassen. Sie können public
jetzt in my_public
oder etwas anderes umbenennen.
wenn ich später wieder in diesen Zweig komme, wäre alles bis zu meinem letzten Commit perfekt?
Wenn Sie Ihre Änderungen übernehmen, werden sie von Git nicht verloren gehen. Wenn Sie Ihre Änderungen nicht festschreiben, versucht Git wirklich, not die von Ihnen durchgeführte Arbeit zu überschreiben. Deshalb warnt Git Sie hier zuerst (wenn Sie versucht haben, Zweige zu wechseln).
Es gibt einen Befehl für diese heikle Aufgabe (unlöschte Dateien dauerhaft löschen)
git clean -i
Dann wird git pull
funktionieren.
Das hat bei mir funktioniert.
1. git fetch --all
2. git reset --hard Origin/{branch_name}
Für diejenigen, die etwas weniger Weitreichendes brauchen als Scott Schafers Antwort ,
git clean -f
wird wahrscheinlich funktionieren. Ich schlage sehr vor, zu laufen
git clean --dry-run
zuerst. Dieser Befehl gibt eine Liste von Dateien aus, die Git entfernt, wenn Sie git clean -f
Ausführen, und erspart Ihnen möglicherweise den Aufwand, versehentlich etwas zu entfernen, das Sie nicht wollten.
Weitere Informationen zu git clean
Finden Sie unter diese Stack-Oveflow-Antwort oder die Dokumente .
Leider hat es weder git rm --cached
noch git clean -d -fx ""
für mich getan.
Meine Lösung endete damit, meinen Zweig in die Ferne zu drängen, ein neues Repo zu klonen und dann im neuen Repo zusammenzuführen. Andere Leute, die auf das Repo zugreifen, mussten dasselbe tun.
Moral der Geschichte: Verwenden Sie eine .gitignore
-Datei von Anfang an.
Wenn Sie diese Frage schnell lösen möchten, können Sie diesen Befehl verwenden:
git checkout -f dev
Dies ist mir auf einem Windows 8 -System passiert, wobei Git vom Befehl Prompt verwendet wurde. Der Rest meines Teams verwendetTFSund ich benutze Microsofts git-tf zum Push/Pull zwischen TFS und meinem lokalen Git-Repository.
Das Problem entstand aufgrund einiger Dateien, die nur zur Änderung ihres Falles umbenannt wurden . Was scheinbar passiert ist, war folgendes:
git status
konnte ich jedoch keine Änderungen sehen, da diese Dateinamen in der Windows-Eingabeaufforderung gleichwertig sind.Die einfachste Lösung für mich war:
git checkout
eine vorherige Version des Projekts, lange bevor diese Dateien hinzugefügt wurden .git checkout
die neueste Version des Projekts, mit dem korrekten Dateiformat.Ich hatte das gleiche Problem, als ich in einem Zweig aus einem früheren Commit auscheckte. Git lehnte es ab, wegen nicht nachverfolgter Dateien zu checken.
Ich habe eine Lösung gefunden und ich hoffe, es wird auch Ihnen helfen.
Das Hinzufügen der betroffenen Verzeichnisse zu .gitignore
und das Ausgeben von $ git rm -r --cached
auf diesen ist anscheinend nicht ausreichend.
Angenommen, Sie möchten eine Verzweigung basierend auf einem früheren Commit K erstellen, um etwas zu testen und zur aktuellen Version zurückzukehren. Ich würde es in den folgenden Schritten tun:
Richten Sie die nicht aufgezeichneten Dateien ein: Bearbeiten Sie den .gitignore
und wenden Sie $ git rm -r --cached
auf die Dateien und Verzeichnisse an, die der Git ignorieren soll. Fügen Sie auch die Datei .gitignore
selbst zu .gitignore
hinzu und vergessen Sie nicht, $ git rm -r --cached .gitignore
auszugeben. Dadurch wird sichergestellt, dass das Ignorierverhalten von git in früheren Commits gleich bleibt.
Übernehmen Sie die gerade vorgenommenen Änderungen:
$ git add -A
$ git commit
Speichern Sie das aktuelle Protokoll, andernfalls können Probleme mit der aktuellen Version auftreten
$ git log > ../git.log
Hard Reset auf das Festschreiben K
$ git reset --hard version_k
Erstellen Sie eine Verzweigung basierend auf dem Festschreiben K
$ git branch commit_k_branch
Kommen Sie in diesen Zweig
$ git checkout commit_k_branch
Machen Sie Ihre Sachen und machen Sie es
Gehe wieder in den Master zurück
$ git checkout master
Stellen Sie die aktuelle Version erneut ein
$ git reset current_version
oder $ git reset ORIG_HEAD
Jetzt können Sie hart auf den Kopf zurücksetzen
git reset --hard HEAD
HINWEIS! Überspringen Sie nicht den vorletzten Schritt (wie z. B. $ git reset --hard ORIG_HEAD
). Andernfalls gehen die oben beschriebenen, nicht protokollierten Dateien verloren.
Ich stellte auch sicher, dass die Dateien, über die git sich beschwert hatte, nicht gelöscht wurden. Ich habe sie in eine Textdatei kopiert und den Befehl $ for i in $(cat ../test.txt); do ls -ahl $i; done
ausgegeben.
Wenn Sie erneut zu dem oben genannten Zweig wechseln, vergessen Sie nicht, $ git status
auszugeben, um sicherzustellen, dass keine unerwünschten Änderungen angezeigt werden.
In meinem Fall lag das Problem bei den Submodulen. master
wurde mit einem anderen Zweig zusammengeführt, der dem Projekt ein neues Submodul hinzugefügt hat. Der Zweig, den ich auschecken wollte, hatte es nicht. Deswegen beschwerte sich git über nicht aufgespürte Dateien und keine der anderen Lösungsvorschläge funktionierte für mich. Ich zwang die Kasse zu meiner neuen Filiale und zog den Master.
git checkout -f my_branch
git pull Origin master
git submodule update --init
Diese beiden Funktionen (git rm --cached, Git checkout -f anderer Zweig) haben für mich NICHT funktioniert.
Stattdessen habe ich die Datei (in Eclipse) physisch entfernt, was Git Ihnen befiehlt. Bitte verschieben oder entfernen Sie sie, bevor Sie die Zweige wechseln können.
und dann füge ich es hinzu.
und dann habe ich gezogen und es hat funktioniert!
Ich war auch mit einem ähnlichen Problem konfrontiert und habe alle oben genannten Lösungen ausprobiert, aber es hat nicht funktioniert
Das Problem wurde verursacht, als ich umbenannt wurde mein onMusicUpdateListener.Java
in OnMusicUpdateListener.Java
im Zweig develop
.
Nun hatte master
onMusicUpdateListener.Java
Und develop
die gleiche Datei wie OnMusicUpdateListener.Java
.
Wann immer ich zum Master wechselte, gab es einen Fehler
The following untracked working tree files would be overwritten by checkout
und dann aborted
.
Um das zu lösen, checked out
master
branch Habe ich meinen onMusicUpdateListener.Java
umbenannt in OnMusicUpdateListener.Java
, committed
und dann merged
mit develop
branch.
Dann habe ich meinen develop
-Zweig um merging
in master
aktualisiert, und jetzt ist alles wieder normal und das Problem ist gelöst.
Dateien verschieben statt löschen
Eine Möglichkeit, das Löschen von Dateien zu vermeiden, ist das Verschieben von Dateien. Zum Beispiel:
cd "`git rev-parse --show-toplevel`"
git checkout 2>&1 | while read f; do [ ! -e "$f" ] || mv "$f" "$f".bak; done
Dies könnte eine Erlaubnisfrage sein,
den Besitzer wechseln,
Sudo chown -v -R usr-name:group-name folder-name
In meinem Fall hat git rm --cached
nicht funktioniert . Aber ich habe es mit einem git rebase
bekommen
2 Dateien mit demselben Namen, aber unterschiedlichen Fällen können das Problem sein.
Sie können eine dieser Dateien löschen oder umbenennen. Ex:
Pdf.html.twig (The GOOD one)
pdf.html.twig (The one I deleted)
Wenn Sie eine Datei lokal umbenannt haben und dann eine pull
ausführen, wird diese Fehlermeldung angezeigt.
das ist einfach zu lösen, git sagt, dass Sie in beiden Zweigen die gleichen Dateien haben. Daher müssen Sie die spezifischen Dateien aus dem Hauptzweig löschen. Anschließend können Sie Folgendes zusammenführen:
git merge "deine Niederlassung"
Ich hoffe es funktioniert für dich, ich habe gerade meinen Fehler gelöst . Mein Fehler war:
fehler: Die folgenden nicht protokollierten Arbeitsbaumdateien werden durch die Zusammenführung überschrieben: .vs/slnx.sqlite Bitte verschieben oder entfernen Sie sie, bevor Sie zusammenführen . Abbruch
Jetzt funktioniert es! In meinem Fall .vs/slnx.sqlite wurde von Visual Studio generiert. Ich musste es schließen, bevor ich es löschen konnte.
Die meisten Antworten erwägen das Löschen oder Entfernen der Dateien. Dies ist der einfache Weg. Aber manchmal möchten Sie die lokalen Dateien nicht loswerden. Aber mit einer Strategie verschmelzen, so hat auch git eine Lösung dafür;
git merge --strategy=ours master
In meinem Fall wurde dieser Fehler angezeigt, da ich ein beliebtes Open Source-CMS verwende und das Verzeichnis, das Probleme verursachte, das Uploads-Verzeichnis war, in das der CMS schreibt.
Es heißt also, dass es Dateien gibt, die Sie nicht haben, die Sie jedoch nicht durch Versionierung erhalten können.
Ich packe alle Dateien von der Live-Site auf meine lokale und greife dann in das Repo, in der Hoffnung, dass das Problem dadurch behoben wird.
Überprüfen Sie, ob ein Ordnername mit einem '/' oder einem speziellen Symbol versehen ist, und benennen Sie diesen Ordner um. Dann klonen Sie das Repository einfach an einen anderen Speicherort.
Löschen Sie einfach die Dateien oder benennen Sie sie um.
z.B.
$ git pull
Enter passphrase for key '/c/Users/PC983/.ssh/id_rsa':
error: Your local changes to the following files would be overwritten by merge:
ajax/productPrice.php
Please commit your changes or stash them before you merge.
error: The following untracked working tree files would be overwritten by merge:
ajax/product.php
Please move or remove them before you merge.
Aborting
Updating a04cbe7a..6aa8ead5
Ich musste ajax/product.php und ajax/produtPrice.php umbenennen/löschen.
Keine Sorge, git pull bringt sie zurück. Ich empfehle Ihnen, sie umzubenennen, anstatt sie zu löschen, da Sie möglicherweise einige Änderungen verlieren.
Wenn dies nicht hilft, müssen Sie den gesamten Zweig löschen und erneut erstellen und dann git pull Origin remotebranch
Löschen Sie .gitignore file aus appname/gen/, um dieses Problem zu lösen.
Um die geänderten Dateien zu speichern und den geänderten Inhalt später zu verwenden, habe ich diesen Fehler gefunden, während ich versuche, einen Zweig auszuchecken und beim Versuch, die Datenbank zu verstecken. Versuchen Sie Git stash
git stash
Ich ging einfach zum Dateisystem und löschte die Datei direkt, fuhr dann mit git Checkout fort und es funktionierte.
Ich hatte das Problem mehrmals aufgetreten und es könnte mit Entwicklern zusammenhängen, die löschen, drücken, erneut hinzufügen, drücken oder etwas Ähnliches.