Dus ik heb een map toegevoegd aan mijn .gitignore-bestand.
Zodra ik een git status
doe, vertelt het me
# On branch latest
nothing to commit (working directory clean)
Wanneer ik echter probeer te veranderen, krijg ik het volgende:
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
Zo ziet mijn .gitignore-bestand eruit:
.bundle
.DS_Store
db/*.sqlite3
log/*.log
tmp/**/*
public/system/images/*
public/system/avatars/*
Hoe krijg ik dit werkend, zodat ik van branch kan wisselen zonder die bestanden te verwijderen?
Als ik een wijziging aanbreng, heeft dit dan invloed op die bestanden? Met andere woorden, als ik daarna terug zou komen naar deze branch, zou alles dan perfect zijn zoals tot aan mijn laatste commit?
Ik wil die bestanden niet kwijtraken, ik wil gewoon niet dat ze worden bijgehouden.
Antwoord 1, autoriteit 100%
Het lijkt erop dat je de bestanden wilt negeren, maar ze zijn al vastgelegd. .gitignore heeft geen effect op bestanden die al in de repo staan, dus ze moeten worden verwijderd met git rm --cached
. De --cached
zal voorkomen dat het enig effect heeft op je werkkopie en het zal gewoon markeren als verwijderd de volgende keer dat je commit. Nadat de bestanden uit de repo zijn verwijderd, zal de .gitignore voorkomen dat ze opnieuw worden toegevoegd.
Maar je hebt een ander probleem met je .gitignore, je gebruikt overmatig veel jokertekens en zorgt ervoor dat het minder overeenkomt dan je verwacht. Laten we in plaats daarvan de .gitignore wijzigen en dit proberen.
.bundle
.DS_Store
db/*.sqlite3
log/*.log
tmp/
public/system/images/
public/system/avatars/
Antwoord 2, autoriteit 96%
WAARSCHUWING: het verwijdert niet-getrackte bestanden, dus het is geen goed antwoord op de gestelde vraag.
Ik heb ook op dit bericht geklikt. In mijn geval wilde ik de bestanden niet bewaren, dus dit werkte voor mij:
git 2.11 en nieuwer
git clean -d -f .
oudere git
git clean -d -f ""
Als je ook bestanden wilt verwijderen die door git worden genegeerd, voer dan de volgende opdracht uit.
WEES GEWAARSCHUWD!!! DIT VERNIET WAARSCHIJNLIJK JE PROJECT, ALLEEN GEBRUIKEN ALS JE 100% WEET WAT JE DOET
git 2.11 en nieuwer
git clean -d -fx .
oudere git
git clean -d -fx ""
http://www.kernel.org/ pub/software/scm/git/docs/git-clean.html
-
-x
betekent dat genegeerde bestanden ook worden verwijderd, evenals bestanden die onbekend zijn bij git. -
-d
betekent het verwijderen van niet-bijgehouden mappen naast niet-bijgehouden bestanden. -
-f
is vereist om het te forceren.
Antwoord 3, autoriteit 97%
Waarschuwing: hiermee worden de lokale bestanden verwijderd die niet zijn geïndexeerd
Dwing het gewoon: git checkout -f another-branch
Antwoord 4, autoriteit 60%
Als je OS X gebruikt, kan het zijn dat in de naam van een bestand bepaalde tekens van hoofdletter zijn veranderd. Probeer de volgende configuratieoptie in te stellen:
git config core.ignorecase true
5, Autoriteit 14%
Dit werkte voor mij.
1. git fetch --all
2. git reset --hard origin/{branch_name}
6, Autoriteit 8%
Er is een opdracht voor deze delicate taak (permanent verwijderde bestanden die permanent worden verwijderd)
git clean -i
Dan git pull
zal doen.
7, Autoriteit 4%
Helaas noch git rm --cached
of git clean -d -fx ""
deed het voor mij.
Mijn oplossing eindigde met het pushen van mijn branch naar remote, het klonen van een nieuwe repo en het samenvoegen van de nieuwe repo. Andere mensen die toegang hadden tot de repo moesten hetzelfde doen.
Moraal van het verhaal: gebruik vanaf het begin een .gitignore
-bestand.
Antwoord 8, autoriteit 4%
Deze twee functies
git rm --cached
git checkout -f another-branch
werkte NIET voor mij.
In plaats daarvan heb ik het bestand fysiek verwijderd (in verduistering) zoals Git je zegt te doen;
Please move or remove them before you can switch branches.
en dan voeg ik het toe/beloof ik het.
en toen trok ik en het werkte!
Antwoord 9, autoriteit 4%
Als u deze vraag snel wilt oplossen, kunt u deze opdracht gebruiken:
git checkout -f dev
Antwoord 10, autoriteit 3%
Ik had hetzelfde probleem bij het uitchecken naar een branch op basis van een eerdere commit. Git weigerde af te rekenen vanwege niet-getrackte bestanden.
Ik heb een oplossing gevonden en ik hoop dat het jou ook zal helpen.
Het toevoegen van de betrokken mappen aan .gitignore
en het uitgeven van $ git rm -r --cached
erop is blijkbaar niet genoeg.
Veronderstel dat je een branch wilt maken op basis van een eerdere commit K om wat dingen te testen en terug te komen naar de huidige versie. Ik zou het in de volgende stappen doen:
-
Stel de niet-getrackte bestanden in:
bewerk de.gitignore
en pas$ git rm -r --cached
toe op de bestanden en mappen waarvan je wilt dat de git negeert. Voeg ook het bestand.gitignore
zelf toe aan.gitignore
en vergeet niet om$ git rm -r --cached .gitignore
uit te geven. Dit zorgt ervoor dat het negeergedrag van git hetzelfde blijft in de eerdere commits. -
Voeg de zojuist aangebrachte wijzigingen door:
$ git add -A $ git commit
-
Sla het huidige logboek op, anders kunt u problemen krijgen bij het terugkeren naar de huidige versie
$ git log > ../git.log
-
Harde reset naar de commit K
$ git reset --hard version_k
-
Maak een branch op basis van de commit K
$ git branch commit_k_branch
-
Afrekenen in dat filiaal
$ git checkout commit_k_branch
-
Doe je ding en beloof het
-
Betaal opnieuw af bij master
$ git checkout master
-
Herstel opnieuw naar de huidige versie
$ git reset current_version
of$ git reset ORIG_HEAD
-
Je kunt nu hard resetten naar de HEAD
git reset --hard HEAD
OPMERKING!Sla de voorlaatste stap niet over (zoals bijv. $ git reset --hard ORIG_HEAD
) anders gaan de niet-getrackte bestanden waar git hierboven over klaagde verloren.
Ik heb er ook voor gezorgd dat de bestanden waarover Git klaagde niet werden verwijderd. Ik kopieerde ze naar een tekstbestand en gaf het commando $ for i in $(cat ../test.txt); do ls -ahl $i; done
Als je weer afrekent naar de bovengenoemde vestiging, vergeet dan niet om $ git status
op te geven om er zeker van te zijn dat er geen ongewenste wijzigingen verschijnen.
Antwoord 11, autoriteit 3%
Dit overkwam mij op een Windows 8systeem, met Git vanaf de opdrachtprompt. De rest van mijn team gebruikt TFSen ik gebruik git-tfvan Microsoft om te pushen/trekken tussen TFS en mijn lokale Git-repository.
Het probleem deed zich voor vanwege enkele bestanden waarvan de naam alleen was gewijzigd om hun hoofdlettergebruik te wijzigen. Wat er lijkt te zijn gebeurd, was dit:
- De bestanden zijn ingecheckt met gemengde hoofdletters in hun naam.
- In een latere commit werden de bestandsnamen veranderd in kleine letters.
- git-tf kreeg aanvankelijk de bestanden in hoofdletters.
- Toen de bestanden werden hernoemd naar kleine letters, kreeg git-tf de bestanden niet omdat die bestandsnamen voor Windows 8 equivalent zijn.
- Omdat Git hoofdlettergevoelig is, klaagde het dat ik de gemengde-case-bestanden had die niet onder bronbeheer stonden. Maar met behulp van
git status
kon ik geen wijzigingen zien, omdat in de Windows-opdrachtprompt die bestandsnamen equivalent zijn.
De eenvoudigste oplossing voor mij was:
git checkout
een eerdere versievan het project, ruim voordat die bestanden ooit werden toegevoegd.- Vervolgens
git checkout
de laatste versievan het project, met de juiste bestandsomhulling.
Antwoord 12, autoriteit 2%
In mijn geval lag het probleem bij de submodules. master
is samengevoegd met een andere branch die een nieuwe submodule aan het project heeft toegevoegd. De branch die ik probeerde uit te checken had het niet, daarom klaagde git over niet-getrackte bestanden en geen van de andere voorgestelde oplossingen werkte voor mij. Ik dwong de kassa naar mijn nieuwe branch, en trok master.
git checkout -f my_branch
git pull origin master
git submodule update --init
Antwoord 13
In mijn geval werkte git rm --cached
niet.
Maar ik kreeg het met een git rebase
Antwoord 14
Ik had ook te maken met een soortgelijk probleem en ik heb alle bovenstaande oplossingen geprobeerd, maar het werkte niet
Het probleem werd veroorzaakt toen ik mijn OnMusicUpdateListener.java
hernoemdenaar OnMusicUpdateListener.java
in de branche develop
.
Nu had master
OnMusicUpdateListener.java
en develop
hadden hetzelfde bestand als OnMusicUpdateListener.java
Als ik nu overschakelde naar master, kreeg ik een foutmelding
The following untracked working tree files would be overwritten by checkout
en toen aborted
.
Om dit op te lossen, heb ik krachtig checked out
master
branch
en hernoemde vervolgens mijn OnMusicUpdateListener.java
naar OnMusicUpdateListener.java
, committed
en merged
het met develop
branch.
Toen heb ik mijn develop
branch geüpdatet door deze merging
in master
en nu is alles weer normaal en is het probleem opgelost.
Antwoord 15
Dit kan een toestemmingsprobleem zijn,
het eigendom wijzigen,
sudo chown -v -R usr-name:group-name folder-name
Antwoord 16
Twee bestanden met dezelfde naam maar een ander geval kan het probleem zijn.
Je kunt er een van deze bestanden verwijderen of de naam ervan wijzigen. Bijv.:
Pdf.html.twig (The GOOD one)
pdf.html.twig (The one I deleted)
Antwoord 17
Bestanden verplaatsen in plaats van verwijderen
Een manier om het verwijderen van bestanden te voorkomen, is door ze te verplaatsen. Bijvoorbeeld:
cd "`git rev-parse --show-toplevel`"
git checkout 2>&1 | while read f; do [ ! -e "$f" ] || mv "$f" "$f".bak; done
Antwoord 18
dat is makkelijk op te lossen, git zegt dat je dezelfde bestanden in beide branches hebt, daarom moet je de specifieke bestanden uit de master branch verwijderen en dan zul je in staat zijn om samen te voegen:
git merge "your branch"
Ik hoop dat het voor je werkt, ik heb zojuist mijn fout opgelost.
mijn fout was:
error: The following untracked working tree files would be overwritten by merge:
.vs/slnx.sqlite
Please move or remove them before you merge.
Aborting
Nu werkt het!
In mijn geval .vs/slnx.sqlite
werd gegenereerd door visual studio, moest ik het sluiten voordat ik het kon verwijderen.
Antwoord 19
Als je een bestand lokaal hebt hernoemd en vervolgens een pull
uitvoert, wordt die foutmelding weergegeven.
Antwoord 20
In mijn geval zag ik deze fout omdat ik een populaire open source CMS gebruik en de map die problemen veroorzaakte, was de uploadmap waarnaar de CMS schrijft.
Dus wat er werd gezegd, is dat er bestanden zijn die je niet hebt, maar die je niet kunt krijgen met versiebeheer.
Ik haal alle bestanden van de live-site naar mijn lokale, dan check ik dit in de repo in de hoop dat dit het probleem oplost.
Antwoord 21
Verwijder .gitignorebestand uit appname/gen/om dit probleem op te lossen.
Antwoord 22
Ik ging gewoon naar het bestandssysteem en verwijderde het bestand direct, ging toen verder met git checkout en het werkte.
Ik heb het probleem meerdere keren gehad en het kan te maken hebben met ontwikkelaars die verwijderen, pushen, opnieuw toevoegen, pushen of iets dergelijks.
Antwoord 23
De meeste antwoorden overwegen het verwijderen of verwijderen van de bestanden, wat de makkelijkste manier is. Maar soms wilt u niet van de lokale bestanden af. Maar fuseer met een strategie, dus git heeft hier ook een oplossing voor ;
git merge --strategy=ours master
24
Om de gewijzigde bestanden op te slaan en later de gewijzigde inhoud te gebruiken.
Ik heb deze fout gevonden terwijl ik probeer een filiaal te bekijken en wanneer ik probeer te ontmaskeren.
Probeer git stash
git stash
25
Controleer of een mapnaam ‘/’ of een speciaal symbool dan die mappen hernoemt.
Dan klem je gewoon de repository naar een andere locatie.
26
Een eenvoudige oplossing kan zijn:
Zorg ervoor dat u zich in de juiste werkdirectory bevindt in GitBash
.
Die bericht komt bijna elke keer voor als een gebruiker probeert een map te voegen in zijn maphiërarchie.
Voorbeeld:
/workspace/git/myBashSourceFolder/myProjectSourcefolder
Scenario:
Gebruiker gekloonde repo in git-folder
hij maakte een nieuw Java-project in Eclipse, importeerde de gekloonde repo. Eclipse heeft myProjectSourceFolder ingesteld als bronmap in zijn lokale project. daarom voerde de gebruiker het in git bash in en duwde, trok en beging zijn project vanaf daar. git synchroniseert daarom myProjectSourceFolder
– maar heeft geen record in zijn geschiedenis voor myBashSourceFolder. Daarom zal een push / pull / merge van myBashSourceFolder de gegeven uitvoer produceren, als de gebruiker de volgende keer vanaf daar probeert te synchroniseren, in plaats van de map waar hij eerder aan werkte.
Oplossing:voer de juiste map in en probeer het opnieuw. In bijna elke
keer dat ik tegenkwam, werkte deze oplossing prima 🙂