Also habe ich meiner .gitignore-Datei einen Ordner hinzugefügt.
Sobald ich ein mache git status
, sagt es mir
# On branch latest
nothing to commit (working directory clean)
Wenn ich jedoch versuche, Zweige zu wechseln, erhalte 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 zu diesem Zweig zurückkehren würde, wäre alles perfekt, bis zu meinem letzten Commit?
Ich möchte diese Dateien nicht verlieren, ich möchte nur nicht, dass sie verfolgt werden.
Antworten:
Anscheinend möchten Sie, dass die Dateien ignoriert werden, aber sie wurden bereits festgeschrieben. .gitignore hat keine Auswirkung auf Dateien, die sich bereits im Repo befinden, sodass sie mit entfernt werden müssen
git rm --cached
. Dadurch--cached
wird verhindert, dass sich dies auf Ihre Arbeitskopie auswirkt, und es wird beim nächsten Festschreiben nur 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äßig Platzhalter, was dazu führt, dass er weniger übereinstimmt, als Sie erwarten. Ändern Sie stattdessen den .gitignore und versuchen Sie dies.
quelle
git rm --cached
keinen Unterschied, diese Dateien sind im aktuellen Zweig nicht vorhanden. Für diesen Fehler muss der Benutzer stattdessen die Antwort von @Greg Hewgill befolgen: "Verschieben Sie sie aus der Arbeitskopie, wechseln Sie die Zweige und verschieben Sie sie zurück".your files would be overwritten
mit ,fatal: pathspec 'test/node_modules' did not match any files
wenn ich tungit rm -r --cache test/node_modules
? Ich kann wegen der überschriebenen Nachricht nicht ziehen und kann sie nicht entfernen, weil Git sie nicht finden kann (sie sind da)WARNUNG: Es werden nicht verfolgte Dateien gelöscht, daher ist dies keine gute Antwort auf die gestellte Frage.
Ich habe diese Nachricht auch getroffen. In meinem Fall wollte ich die Dateien nicht behalten, daher funktionierte dies für mich:
Git 2.11 und neuer
älterer git
Wenn Sie auch von git ignorierte Dateien entfernen möchten, führen Sie den folgenden Befehl aus.
SEI GEWARNT!!! DIESES MÖGLICHERWEISE ZERSTÖRT IHR PROJEKT. VERWENDEN SIE NUR, WENN SIE 100% WISSEN, WAS SIE TUN
Git 2.11 und neuer
älterer git
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 bekannt sind.-d
bedeutet, nicht verfolgte Verzeichnisse zusätzlich zu nicht verfolgten Dateien zu entfernen.-f
ist erforderlich, um es zum Laufen zu zwingen.quelle
git clean -dfxn
odergit clean -dfx --dry-run
-x
Option tut mir wehErzwinge es einfach:
git checkout -f another-branch
quelle
error: pathspec 'mybranch' did not match any file(s) known to git.
Wenn Sie unter OS X arbeiten, kann dies daran liegen, dass beim Namen einer Datei bestimmte Zeichen geändert wurden. Versuchen Sie, die folgende Konfigurationsoption festzulegen:
quelle
git rebase
. Vielen Dank.Git teilt Ihnen mit, dass es Dateien (mit dem Namen
public/system/images/9/...
usw.) erstellen möchte , aber Sie haben bereits Dateien in diesem Verzeichnis, die nicht von Git verfolgt werden. Vielleicht hat jemand anderes diese Dateien zum Git-Repository hinzugefügt, und dies ist das erste Mal, dass Sie zu diesem Zweig gewechselt sind?Es gibt wahrscheinlich einen Grund, warum diese Dateien in Ihrem
develop
Zweig, aber nicht in Ihrem aktuellen Zweig. Möglicherweise müssen Sie Ihre Mitarbeiter fragen, warum das so ist.Sie können es nicht tun, ohne die Dateien irgendwie verschwinden zu lassen. Sie könnten jetzt
public
inmy_public
oder etwas umbenennen .Wenn Sie Ihre Änderungen festschreiben, verliert Git sie nicht. Wenn Sie Ihre Änderungen nicht festschreiben, wird Git sich sehr bemühen , die von Ihnen geleistete Arbeit nicht zu überschreiben. Darum warnt Git Sie hier in erster Linie (als Sie versuchten, die Zweige zu wechseln).
quelle
Das hat bei mir funktioniert.
quelle
Es gibt einen Befehl für diese heikle Aufgabe (dauerhaftes Löschen nicht verfolgter Dateien)
Dann reicht
git pull
es.quelle
Für diejenigen, die etwas weniger weitreichendes als die Antwort von Scott Schafer brauchen ,
wird wahrscheinlich funktionieren. Ich empfehle dringend zu laufen
zuerst. Dieser Befehl gibt eine Liste von Dateien aus, die Git beim Ausführen entfernt
git clean -f
, und erspart Ihnen möglicherweise den Schmerz, versehentlich etwas zu entfernen, das Sie nicht wollten.Weitere Informationen zu finden Sie in dieser Antwort zu Stack Oveflow oder in den Dokumenten
git clean
.quelle
Leider weder
git rm --cached
nochgit clean -d -fx ""
hat es für mich.Meine Lösung bestand darin, meinen Zweig auf Remote zu verschieben, ein neues Repo zu klonen und dann meine Zusammenführung im neuen Repo durchzuführen. Andere Leute, die auf das Repo zugreifen, mussten dasselbe tun.
Moral der Geschichte: Verwenden Sie eine
.gitignore
Datei von Anfang an.quelle
Wenn Sie diese Frage schnell lösen möchten, können Sie diesen Befehl verwenden:
quelle
.gitignore
afaik zu tun hatte.Ich hatte das gleiche Problem beim Auschecken in einen Zweig aufgrund eines früheren Commits. Git lehnte das Auschecken wegen nicht verfolgter Dateien ab.
Ich habe eine Lösung gefunden und hoffe, dass sie auch Ihnen hilft.
Hinzufügen der betroffenen Verzeichnisse zu
.gitignore
und Ausstellen$ git rm -r --cached
reicht anscheinend nicht aus.Angenommen, Sie möchten einen Zweig basierend auf einem früheren Commit K erstellen, um einige Dinge zu testen und zur aktuellen Version zurückzukehren. Ich würde es in den folgenden Schritten tun:
Richten Sie die nicht verfolgten Dateien ein: Bearbeiten Sie die
.gitignore
und wenden Sie sie$ git rm -r --cached
auf die Dateien und Verzeichnisse an, die der Git ignorieren soll. Fügen Sie auch die Datei.gitignore
selbst hinzu.gitignore
und vergessen Sie nicht, sie auszugeben$ git rm -r --cached .gitignore
. Dadurch wird sichergestellt, dass das Ignorierverhalten von git bei früheren Commits gleich bleibt.Übernehmen Sie die Änderungen, die Sie gerade vorgenommen haben:
$ git add -A
$ git commit
Speichern Sie das aktuelle Protokoll, da sonst Probleme auftreten können, wenn Sie zur aktuellen Version zurückkehren
$ git log > ../git.log
Hard Reset auf das Commit K.
$ git reset --hard version_k
Erstellen Sie einen Zweig basierend auf dem Commit K.
$ git branch commit_k_branch
Kasse in diesen Zweig
$ git checkout commit_k_branch
Mach deine Sachen und begebe sie
Kasse wieder in den Master
$ git checkout master
Auf die aktuelle Version zurücksetzen
$ 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
), da sonst die oben beanstandeten nicht verfolgten Dateien verloren gehen.Ich habe auch dafür gesorgt, dass die beanstandeten Dateien nicht gelöscht wurden. Ich habe sie in eine Textdatei kopiert und den Befehl ausgegeben
$ for i in $(cat ../test.txt); do ls -ahl $i; done
Wenn Sie erneut in den oben genannten Zweig auschecken, vergessen Sie nicht, eine Ausgabe durchzuführen,
$ git status
um sicherzustellen, dass keine unerwünschten Änderungen angezeigt werden.quelle
Dies passierte mir auf einem Windows 8- System mit Git über die Eingabeaufforderung. Der Rest meines Teams verwendet TFS und ich verwende Microsoft git-tf , um zwischen TFS und meinem lokalen Git-Repository zu pushen / ziehen.
Das Problem trat aufgrund einiger Dateien auf, die nur umbenannt wurden, um ihren Fall zu ändern . Was passiert zu sein scheint, war Folgendes:
git status
konnte ich jedoch keine Änderungen feststellen, da diese Dateinamen in der Windows-Eingabeaufforderung gleichwertig sind.Die einfachste Lösung für mich war:
git checkout
eine frühere Version des Projekts, lange bevor diese Dateien jemals hinzugefügt wurden .git checkout
die neueste Version des Projekts mit der richtigen Datei.quelle
Diese beiden Funktionen (git rm --cached, git checkout -f ein anderer Zweig) haben bei mir NICHT funktioniert.
Stattdessen habe ich die Datei (in Eclipse) physisch entfernt, wie es Git Ihnen vorschreibt. Bitte verschieben oder entfernen Sie sie, bevor Sie die Zweige wechseln können.
und dann füge ich es hinzu / habe es festgeschrieben.
und dann habe ich gezogen und es hat funktioniert!
quelle
In meinem Fall lag das Problem bei den Submodulen.
master
wurde mit einem anderen Zweig zusammengeführt, der dem Projekt ein neues Submodul hinzufügte. Der Zweig, den ich auschecken wollte, hatte ihn nicht, deshalb beschwerte sich git über nicht verfolgte Dateien und keine der anderen vorgeschlagenen Lösungen funktionierte für mich. Ich zwang die Kasse zu meiner neuen Filiale und zog den Meister.git checkout -f my_branch
git pull origin master
git submodule update --init
quelle
In meinem Fall
git rm --cached
hat es nicht funktioniert. Aber ich habe es mit einemgit rebase
quelle
Ich hatte auch ein ähnliches Problem und habe alle oben genannten Lösungen ausprobiert, aber es hat nicht funktioniert
Das Problem wurde verursacht , wenn i umbenannt meine
onMusicUpdateListener.java
zuOnMusicUpdateListener.java
indevelop
Zweig.master
HatteonMusicUpdateListener.java
unddevelop
hatte jetzt die gleiche Datei wieOnMusicUpdateListener.java
Wann immer ich zum Master wechselte, gab es mir einen Fehler
und dann es
aborted
.Um dies zu lösen, ich gewaltsam
checked out
master
verzweigen und dann meine umbenanntonMusicUpdateListener.java
zuOnMusicUpdateListener.java
,committed
es und dannmerged
es mitdevelop
Zweig.Dann aktualisiert ich meine
develop
Zweig durchmerging
sie inmaster
und jetzt ist alles wieder normal und Problem gelöst ist.quelle
Dies könnte ein Berechtigungsproblem sein.
Eigentümer wechseln,
quelle
Möglicherweise liegen 2 Dateien mit demselben Namen, aber unterschiedlicher Groß- und Kleinschreibung vor.
Sie können eine dieser Dateien löschen oder umbenennen. Ex:
quelle
Dateien verschieben statt löschen
Eine Möglichkeit, das Löschen von Dateien zu vermeiden, besteht darin, sie stattdessen zu verschieben. Zum Beispiel:
quelle
Wenn Sie eine Datei lokal umbenannt haben und dann eine ausführen
pull
, wird diese Fehlermeldung angezeigt.quelle
Das ist einfach zu lösen. Git sagt, dass Sie in beiden Zweigen dieselben Dateien haben. Daher müssen Sie die spezifischen Dateien aus dem Hauptzweig löschen und dann können Sie Folgendes zusammenführen:
git merge "dein Zweig"
Ich hoffe es funktioniert bei dir, ich habe gerade meinen Fehler behoben. Mein Fehler war:
Fehler: Die folgenden nicht verfolgten Arbeitsbaumdateien werden beim Zusammenführen überschrieben: .vs / slnx.sqlite Bitte verschieben oder entfernen Sie sie, bevor Sie sie zusammenführen. Abbruch
Jetzt funktioniert es! In meinem Fall, dass .vs / slnx.sqlite von Visual Studio generiert wurde, musste ich es schließen, bevor ich es löschte.
quelle
In meinem Fall wurde dieser Fehler angezeigt, weil ich ein beliebtes Open Source-CMS verwende und das Verzeichnis, das Probleme verursachte, das Upload-Verzeichnis war, in das das CMS schreibt.
Es wurde also gesagt, dass es Dateien gibt, die Sie nicht haben, die Sie aber nicht durch die Versionierung erhalten können.
Ich greife nach allen Dateien von der Live-Site zu meiner lokalen Site und überprüfe dies im Repo in der Hoffnung, dass dies das Problem behebt.
quelle
Löschen Sie die .gitignore- Datei aus appname / gen / , um dieses Problem zu beheben .
quelle
Ich ging einfach zum Dateisystem und löschte die Datei direkt, dann fuhr ich mit dem Auschecken von Git fort und es funktionierte.
Ich habe das Problem mehrmals auftreten lassen und es kann mit Entwicklern zusammenhängen, die Löschen, Pushen, erneutes Hinzufügen, Pushen oder ähnliches ausführen.
quelle
Die meisten Antworten beziehen sich auf das Löschen oder Entfernen der Dateien, was der einfache Weg ist. Aber manchmal möchten Sie die lokalen Dateien nicht loswerden. Aber verschmelzen Sie mit einer Strategie, damit Git auch dafür eine Lösung hat.
quelle
Löschen Sie einfach die Dateien oder benennen Sie sie um.
z.B
Ich musste ajax / product.php und ajax / produtPrice.php umbenennen / löschen .
Mach dir keine Sorgen, Git Pull wird sie zurückbringen. 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 tun
git pull origin remotebranch
quelle
Um die geänderten Dateien zu speichern und den geänderten Inhalt später zu verwenden. Ich habe diesen Fehler gefunden, als ich versucht habe, einen Zweig auszuchecken und beim Versuch, ihn neu zu starten. Versuchen Sie Git Stash
git stash
quelle
Überprüfen Sie, ob ein Ordnername mit '/' oder einem speziellen Symbol versehen ist, und benennen Sie diese Ordner um. Dann klonen Sie das Repository einfach an einen anderen Speicherort.
quelle
Eine einfache Lösung könnte sein: Stellen Sie einfach sicher, dass Sie sich im richtigen Arbeitsverzeichnis in befinden
GitBash
. Diese Nachricht tritt fast jedes Mal auf, wenn ein Benutzer versucht, ein zu hohes Verzeichnis in seiner Ordnerhierarchie zusammenzuführen.Beispiel:
Szenario: Der Benutzer hat das Repo geklont.
git-folder
Er hat ein neues Java-Projekt in Eclipse erstellt und das geklonte Repo importiert. Eclipse hat myProjectSourceFolder in seinem lokalen Projekt als Quellordner festgelegt. Daher hat der Benutzer es in Git Bash eingegeben und sein Projekt von dort aus gedrückt, gezogen und festgeschrieben. git synchronisiert dahermyProjectSourceFolder
- hat aber keine Aufzeichnung in seiner Geschichte für myBashSourceFolder. Daher erzeugt ein Push / Pull / Merge von myBashSourceFolder die angegebene Ausgabe, wenn der Benutzer beim nächsten Mal versucht, von dort aus zu synchronisieren, anstelle des Ordners, den er zuvor bearbeitet hat.quelle