De volgende niet-getrackte werkboombestanden zouden worden overschreven door samenvoegen, maar dat maakt mij niet uit

Op mijn branch had ik wat bestanden in .gitignore

Op een andere branch zijn die bestanden niet.

Ik wil de verschillende vertakkingen samenvoegen met de mijne, en het kan me niet schelen of die bestanden niet langer worden genegeerd of niet.

Helaas krijg ik dit:

De volgende niet-getrackte werkboombestanden zouden worden overschreven door samenvoegen

Hoe zou ik mijn pull-commando kunnen wijzigen om die bestanden te overschrijven, zonder dat ik die bestanden zelf hoef te zoeken, verplaatsen of verwijderen?


Antwoord 1, autoriteit 100%

Het probleem is dat je de bestanden niet lokaal bijhoudt, maar identieke bestanden worden op afstand gevolgd, dus om te “trekken” zou je systeem gedwongen worden om de lokale bestanden te overschrijven die niet versiebeheerd zijn.

Probeer hardlopen

git add * 
git stash
git pull

Hiermee worden alle bestanden bijgehouden, worden al uw lokale wijzigingen aan die bestanden verwijderd en worden de bestanden vervolgens van de server opgehaald.


Antwoord 2, autoriteit 26%

U kunt het commando proberen om de niet-getrackte bestanden van de lokale te wissen

Git 2.11 en nieuwere versies:

git clean  -d  -f .

Oudere versies van Git:

git clean  -d  -f ""

Waar -d kan worden vervangen door het volgende:

  • -x genegeerde bestanden worden ook verwijderd evenals bestanden die onbekend zijn bij Git.

  • -d verwijder niet-bijgehouden mappen naast niet-bijgehouden bestanden.

  • -f is vereist om het te forceren.

Hier is de link die kan wees ook behulpzaam.


Antwoord 3, autoriteit 24%

De enige commando’s die voor mij werkten waren:
(Let op: hiermee worden alle lokale bestanden verwijderd)

git fetch --all
git reset --hard origin/{{your branch name}}

Antwoord 4, autoriteit 8%

Hoe git merge te gebruiken terwijl niet-getrackte bestanden worden overschreven

De bestanden van belang (FOI) die we gaan verwijderen:

  • bestaan ​​in de donortak,
  • bestaan ​​niet in de ontvangende tak,
  • en de samenvoeging blokkeren omdat ze aanwezig en niet bijgehouden worden in je werkmap.
git checkout -f donor-branch   # replace FOI with tracked `donor` versions
git checkout receiving-branch  # FOI are not in `receiving`, so they disapppear
git merge donor-branch  # now the merge works

Hoe git pull te gebruiken terwijl niet-getrackte bestanden worden overschreven

De bestanden van belang (FOI) die we gaan verwijderen:

  • bestaan ​​in de upstream-repository,
  • bestaan ​​niet in de huidige tak,
  • en de samenvoeging blokkeren omdat ze aanwezig en niet bijgehouden worden in je werkmap.

pull = fetch + merge, dus we doen git fetch gevolgd door de git checkout -f, git checkout, git merge truc hierboven .

git fetch origin  # fetch remote commits
git checkout -f origin/mybranch  # replace FOI with tracked upstream versions
git checkout mybranch  # FOI are not in mybranch, so they disapppear
git merge origin/mybranch  # Now the merge works. We have pulled by fetching + merging.

Gedetailleerde uitleg

git merge -f bestaat niet, maar git checkout -f wel.

We zullen git checkout -f + git checkout gebruiken om de bestanden van belang te verwijderen (zie hierboven), en dan kan het samenvoegen normaal doorgaan.

Stap 1. Deze stap vervangt met geweld niet-gevolgde FOI door getraceerde versies van de donortak (het controleert ook de donortak en werkt de rest van de werkmap bij).

git checkout -f donor-branch

Stap 2. Deze stap verwijdert de FOI omdat ze worden gevolgd in onze huidige (donor)tak en afwezig zijn in de receiving-branch waarnaar we overschakelen.

git checkout receiving-branch

Stap 3. Nu de FOI afwezig is, zal het samenvoegen in de donor-branch geen niet-getrackte bestanden overschrijven, dus we krijgen geen fouten.

git merge donor-branch

Antwoord 5, autoriteit 4%

Alle niet-getrackte bestanden verwijderen:

git clean  -d  -fx .

Let op: hiermee worden IDE-bestanden en alle nuttige bestanden verwijderd zolang u de bestanden niet bijhoudt. Gebruik deze opdracht met zorg


Antwoord 6, autoriteit 2%

Als dit een eenmalige bewerking is, kunt u alle niet-getrackte bestanden uit de werkdirectory verwijderen voordat u de pull uitvoert. Lees Hoe verwijder je lokale (niet-getrackte) bestanden uit de huidige Git-werkboom? voor informatie over het verwijderen van alle niet-getrackte bestanden.

Zorg ervoor dat u niet per ongeluk het niet-getrackte bestand verwijdert dat u nog nodig heeft;)


Antwoord 7, autoriteit 2%

Je kunt dat commando proberen

git clean -df

BEWERKEN:
Houd er rekening mee dat hierdoor de niet-bijgehouden bestanden worden verwijderd die waardevol kunnen zijn.
met dank aan @zhekaus


Antwoord 8, autoriteit 2%

Update – een betere versie

Deze tool (https://github.com/mklepaczewski/git-clean- voor-samenvoegen) zal:

  • niet-getrackte bestanden verwijderen die identiek zijn aan hun git pull equivalenten,
  • wijzigingen terugzetten naar gewijzigde bestanden waarvan de gewijzigde versie identiek is aan hun git pull equivalenten,
  • aangepaste/niet-getrackte bestanden rapporteren die verschillen van hun git pull-versie,
  • de tool heeft de optie --pretend die geen bestanden zal wijzigen.

Oude versie

Hoe verschilt dit antwoord van andere antwoorden?

De hier gepresenteerde methode verwijdert alleen bestanden die zouden worden overschreven door samenvoegen. Als je andere niet-getrackte (mogelijk genegeerde) bestanden in de map hebt, zal deze methode ze niet verwijderen.

De oplossing

Dit fragment extraheert alle niet-getrackte bestanden die zouden worden overschreven door git pull en verwijdert ze.

git pull 2>&1|grep -E '^\s'|cut -f2-|xargs -I {} rm -rf "{}"

en doe dan gewoon:

git pull

Dit is geen git porselein-commando, dus controleer altijd wat het zou doen met:

git pull 2>&1|grep -E '^\s'|cut -f2-|xargs -I {} echo "{}"

Uitleg – omdat oneliners eng zijn:

Hier is een overzicht van wat het doet:

  1. git pull 2>&1 – leg de uitvoer van git pull vast en stuur het allemaal door naar stdout zodat we het gemakkelijk kunnen vastleggen met grep .
  2. grep -E '^\s – de bedoeling is om de lijst met niet-getrackte bestanden vast te leggen die zouden worden overschreven door git pull. De bestandsnamen hebben een aantal witruimte-tekens ervoor, dus we gebruiken het om ze te krijgen.
  3. cut -f2- – verwijder witruimte vanaf het begin van elke regel vastgelegd in 2.
  4. xargs -I {} rm -rf "{}" – gebruik xargs om alle bestanden te herhalen, sla hun naam op in “{}” en bel rm voor elk van hen. We gebruiken -rf om het verwijderen en verwijderen van niet-getrackte mappen te forceren.

Het zou geweldig zijn om stappen 1-3 te vervangen door porseleincommando, maar ik ken geen equivalent.


Antwoord 9

Noch clean/reset/hard checkout/rebase werkte voor mij.

Dus ik heb zojuist bestanden verwijderd waar Git over klaagde*

rm /path/to/files/that/git/complained/about

*Ik heb gecontroleerd of deze bestanden kunnen worden verwijderd door een gloednieuwe repo in een aparte map uit te checken (bestanden waren er niet)


Antwoord 10

Het probleem is wanneer we binnenkomende wijzigingen hebben die een niet-gevolgd bestand zullen samenvoegen, klaagt git. Deze commando’s hebben me geholpen:

git clean -dxf
git pull origin master

Antwoord 11

Als u overweegt de vlag -f te gebruiken, kunt u deze eerst als een test uitvoeren. Alleen dat je van tevoren weet in wat voor interessante situatie je de volgende keer zult belanden ;-P

-n 
--dry-run 
    Don’t actually remove anything, just show what would be done.

Antwoord 12

Naast het geaccepteerde antwoord kunt u natuurlijk de bestanden verwijderen als ze niet langer nodig zijn door het bestand op te geven:

git clean -f '/path/to/file/'

Vergeet niet om het eerst uit te voeren met de vlag -n als je wilt zien welke bestanden git clean zal verwijderen. Houd er rekening mee dat deze bestanden worden verwijderd. In mijn geval gaf ik er toch niet om, dus dat was een betere oplossing voor mij.


Antwoord 13

Een manier om dit te doen is door uw lokale wijzigingen op te slaan en uit de externe repo te halen. Op deze manier verliest u uw lokale bestanden niet omdat de bestanden naar de stash gaan.

git add -A
git stash
git pull

Je kunt je lokale opgeslagen bestanden controleren met dit commando – git stash list


Antwoord 14

Voor degenen die het niet weten, git negeert verschillen in hoofdletters/kleine letters in bestanden en mappen. Dit blijkt een nachtmerrie te zijn als je ze hernoemt naar exact dezelfde naam met een ander geval.

Ik kwam dit probleem tegen toen ik een map hernoemde van “Petstore” naar “petstore” (hoofdletters naar kleine letters). Ik had mijn .git/config-bestand bewerkt om te stoppen met het negeren van case, wijzigingen aangebracht, mijn commits geplet en mijn wijzigingen opgeslagen om naar een andere branch te gaan. Ik kon mijn stashed wijzigingen niet toepassen op deze andere branch.

De oplossing waarvan ik vond dat die werkte, was om mijn .git/config-bestand tijdelijk te bewerken om hoofdletters tijdelijk weer te negeren. Dit zorgde ervoor dat git stash apply slaagde. Daarna veranderde ik negeerCase terug naar false. Ik heb toen alles toegevoegd, behalve de nieuwe bestanden in de petstore-map waarvan git vreemd genoeg beweerde dat ze om welke reden dan ook waren verwijderd. Ik heb mijn wijzigingen doorgevoerd en vervolgens git reset --hard HEAD uitgevoerd om die niet-getrackte nieuwe bestanden te verwijderen. Mijn commit verscheen precies zoals verwacht: de bestanden in de map werden hernoemd.

Ik hoop dat dit je helpt om dezelfde nachtmerrie te vermijden.


Antwoord 15

In mijn geval toen ik dit probleem had. Ik had een lokaal bestand dat ik op de afstandsbediening had hernoemd.

Toen ik probeerde git pull te gebruiken, vertelde Git me dat de nieuwe bestandsnaam niet werd gevolgd — die stond op de afstandsbediening, hoewel hij nog niet bestond op lokaal.

Omdat er geen lokaal exemplaar van was, kon ik geen git pull doen totdat ik git rm deed op de oude bestandsnaam (die was eerst niet duidelijk vanwege mijn stomme idee om het te hernoemen).


Antwoord 16

Dit probleem kan te wijten zijn aan uw lokale wijzigingen.

je kunt het stash-bestand niet direct sturen, dus probeer git add .first

sudo git add *
sudo git stash
sudo git pull

en het is opgelost


Antwoord 17

Als je de bestanden hebt geschreven onder .gitignore, verwijder dan de bestanden en voer git pull opnieuw uit. Dat heeft me geholpen.


Antwoord 18

Ik heb hetzelfde probleem, telkens als ik master probeer samen te voegen in mijn lokale branch staat er

“De volgende niet-bijgehouden werkboombestanden zouden worden overschreven door M.xcworkspace/xcshareddata/swiftpm/Package.resolved samen te voegen”

Maar het volgen van een van de bovenstaande antwoorden werkte niet voor mij. Zoals wanneer ik git status doe, is er geen niet-getrackt bestand, dus als ik git add . doe, wordt er geen bestand gestaged, vandaar dat stashing het probleem niet oplost, noch de check-out forceert zoals hierboven beantwoord .

Ik kon het oplossen door de volgende commando’s uit te voeren zoals hierboven vermeld, maar nog belangrijker Ik moest de Xcode sluiten (het kan zijn dat zelfs na het uitvoeren van de opdracht clean het bestand aan het maken was dat het probleem veroorzaakte voor mij.)

git clean -dfxn (om te controleren wat kan worden verwijderd)

git clean -d -fx . (verwijder bovenstaande bestanden)

LEAVE A REPLY

Please enter your comment!
Please enter your name here

four × 5 =

Other episodes