Więc dodałem folder do mojego pliku .gitignore.
Kiedy to zrobię git status
, mówi mi to
# On branch latest
nothing to commit (working directory clean)
Jednak gdy próbuję zmienić gałęzie, otrzymuję następujące informacje:
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
Tak wygląda mój plik .gitignore:
.bundle
.DS_Store
db/*.sqlite3
log/*.log
tmp/**/*
public/system/images/*
public/system/avatars/*
Jak mogę to uruchomić, aby móc przełączać gałęzie bez usuwania tych plików?
Jeśli dokonam zmiany, czy wpłynie to na te pliki? Innymi słowy, jeśli później wrócę do tej gałęzi, czy wszystko będzie idealnie jak do mojego ostatniego zatwierdzenia?
Nie chcę stracić tych plików, po prostu nie chcę ich śledzić.
Odpowiedzi:
Wygląda na to, że chcesz zignorować pliki, ale zostały już zatwierdzone. .gitignore nie ma wpływu na pliki, które są już w repozytorium, więc należy je usunąć za pomocą
git rm --cached
.--cached
Będzie zapobiec konieczności żadnego wpływu na swojej kopii roboczej i będzie to tylko oznaczyć jako usunięte podczas następnego zatwierdzenia. Po usunięciu plików z repozytorium .gitignore uniemożliwi ich ponowne dodanie.Ale masz inny problem z .gitignore, nadmiernie używasz symboli wieloznacznych i powoduje to, że pasuje mniej, niż się spodziewasz. Zamiast tego zmieńmy .gitignore i spróbuj tego.
źródło
git rm --cached
nie zrobi to różnicy, te pliki nie istnieją w bieżącej gałęzi. W przypadku tego błędu uważam, że zamiast tego użytkownik musi postępować zgodnie z odpowiedzią @Greg Hewgill - „przenieś je z kopii roboczej, przełącz gałęzie i cofnij”.your files would be overwritten
zefatal: pathspec 'test/node_modules' did not match any files
kiedy zrobićgit rm -r --cache test/node_modules
? Nie mogę wyciągnąć z powodu nadpisanej wiadomości i nie mogę usunąć, ponieważ git nie może ich znaleźć (są tam)OSTRZEŻENIE: usunie nieśledzone pliki, więc nie jest to świetna odpowiedź na postawione pytanie.
Uderzyłem również w tę wiadomość. W moim przypadku nie chciałem przechowywać plików, więc zadziałało to dla mnie:
git 2.11 i nowsze
starszy git
Jeśli chcesz również usunąć pliki ignorowane przez git, wykonaj następujące polecenie.
BYĆ OSTRZEŻONYM!!! NAJBARDZIEJ PRAWDOPODOBNIE NISZCZY TWÓJ PROJEKT, WYKORZYSTAJ TYLKO JEŻELI WIESZ 100% CO ROBISZ
git 2.11 i nowsze
starszy git
http://www.kernel.org/pub/software/scm/git/docs/git-clean.html
-x
oznacza, że ignorowane pliki są również usuwane, a także pliki nieznane dla git.-d
oznacza usunięcie nieśledzonych katalogów oprócz nieśledzonych plików.-f
jest wymagane, aby wymusić uruchomienie.źródło
git clean -dfxn
lubgit clean -dfx --dry-run
-x
opcja mnie boliPo prostu wymuś:
git checkout -f another-branch
źródło
error: pathspec 'mybranch' did not match any file(s) known to git.
Jeśli korzystasz z systemu OS X, przyczyną może być to, że w nazwie pliku zmieniła się wielkość liter. Spróbuj ustawić następującą opcję konfiguracji:
źródło
git rebase
. Dzięki.Git mówi ci, że chce tworzyć pliki (o nazwie
public/system/images/9/...
itp.), Ale masz już pliki w tym katalogu, które nie są śledzone przez Git. Być może ktoś inny dodał te pliki do repozytorium Git i po raz pierwszy przeszedłeś do tej gałęzi?Prawdopodobnie istnieje powód, dla którego te pliki w twoim
develop
oddziale, ale nie w bieżącym oddziale. Być może będziesz musiał zapytać współpracowników, dlaczego tak jest.Nie możesz tego zrobić, jeśli pliki nie znikną. Na razie możesz zmienić nazwę
public
namy_public
lub coś takiego.Jeśli zatwierdzisz zmiany, Git ich nie utraci. Jeśli nie zatwierdzisz zmian, Git bardzo się postara, aby nie nadpisać wykonanej pracy. Właśnie o tym ostrzega Git w pierwszej instancji (kiedy próbowałeś zmienić gałąź).
źródło
To zadziałało dla mnie.
źródło
Dla tego delikatnego zadania istnieje polecenie (trwałe usunięcie nieśledzonych plików)
Wtedy
git pull
zrobi.źródło
Dla tych, którzy potrzebują czegoś mniej dalekosiężnego niż odpowiedź Scotta Schafera ,
prawdopodobnie zadziała. I bardzo sugerują działa
pierwszy. To polecenie wyświetli listę plików, które Git usunie, jeśli uruchomisz
git clean -f
, i może zaoszczędzić ci bólu związanego z przypadkowym usunięciem czegoś, czego nie chciałeś.Zobacz tę odpowiedź Stos Oveflow lub docs aby uzyskać więcej informacji na temat
git clean
.źródło
Niestety, ani
git rm --cached
czygit clean -d -fx ""
zrobił to dla mnie.Moje rozwiązanie zakończyło się wypychaniem mojego oddziału do zdalnego, klonowaniem nowego repozytorium, a następnie scalaniem w nowym repozytorium. Inne osoby uzyskujące dostęp do repozytorium musiały zrobić to samo.
Morał tej historii: użyj
.gitignore
pliku od samego początku.źródło
Jeśli chcesz szybko rozwiązać to pytanie, możesz użyć tego polecenia:
źródło
.gitignore
afaik.Miałem ten sam problem podczas sprawdzania w oddziale na podstawie wcześniejszego zatwierdzenia. Git odmówił realizacji transakcji z powodu nieśledzonych plików.
Znalazłem rozwiązanie i mam nadzieję, że to również pomoże.
Dodanie katalogów, których dotyczy problem,
.gitignore
i wydawanie$ git rm -r --cached
na nich najwyraźniej nie wystarczy.Załóżmy, że chcesz, aby gałąź była oparta na wcześniejszym zatwierdzeniu K w celu przetestowania niektórych rzeczy i powrotu do bieżącej wersji. Zrobiłbym to w następujących krokach:
Skonfiguruj nieśledzone pliki: edytuj
.gitignore
i zastosuj$ git rm -r --cached
do plików i katalogów, które git ma ignorować. Dodaj także.gitignore
sam plik.gitignore
i nie zapomnij go wydać$ git rm -r --cached .gitignore
. Zapewni to zachowanie ignorowania git pozostawi to samo we wcześniejszych zatwierdzeniach.Zatwierdź właśnie wprowadzone zmiany:
$ git add -A
$ git commit
Zapisz bieżący dziennik, w przeciwnym razie możesz mieć problemy z powrotem do bieżącej wersji
$ git log > ../git.log
Twardy reset do zatwierdzenia K
$ git reset --hard version_k
Utwórz gałąź na podstawie zatwierdzenia K
$ git branch commit_k_branch
Kasa do tego oddziału
$ git checkout commit_k_branch
Rób swoje rzeczy i popełniaj je
Kasa ponownie do mistrza
$ git checkout master
Zresetuj ponownie do bieżącej wersji
$ git reset current_version
lub$ git reset ORIG_HEAD
Teraz możesz ciężko zresetować HEAD
git reset --hard HEAD
UWAGA! Nie pomijaj kroku od ostatniego do ostatniego (jak np.
$ git reset --hard ORIG_HEAD
), Ponieważ nieśledzone pliki, które skarżył się powyżej, zostaną utracone.Upewniłem się również, że pliki, na które skarżył się git, nie zostały usunięte. Skopiowałem je do pliku tekstowego i wydałem polecenie
$ for i in $(cat ../test.txt); do ls -ahl $i; done
Jeśli ponownie dokonujesz płatności do wyżej wymienionej gałęzi, nie zapomnij wydać polecenia,
$ git status
aby upewnić się, że nie pojawią się niepożądane zmiany.źródło
Zdarzyło mi się to w systemie Windows 8 , używając Git z wiersza polecenia. Reszta mojego zespołu używa TFS , a ja używam git-tf Microsoftu do wypychania / ściągania między TFS a moim lokalnym repozytorium Git.
Problem powstał z powodu zmiany nazw niektórych plików tylko w celu zmiany ich wielkości . Wydaje się, że tak się stało:
git status
nie widziałem żadnych zmian, ponieważ w wierszu polecenia systemu Windows te nazwy plików są równoważne.Najprostszym rozwiązaniem dla mnie było:
git checkout
poprzednia wersja projektu, na długo przed dodaniem tych plików .git checkout
najnowsza wersja projektu z poprawną obudową pliku.źródło
Te dwie funkcje (git rm --cached, git checkout -f another-branch) NIE działały dla mnie.
Zamiast tego fizycznie usunąłem plik (zaćmienie) zgodnie z poleceniem Gita; Proszę je przenieść lub usunąć, zanim będzie można zmienić oddziały.
a następnie dodaję / zatwierdzam.
a potem pociągnąłem i zadziałało!
źródło
W moim przypadku problem dotyczył submodułów.
master
został połączony z innym oddziałem, który dodał nowy podmoduł do projektu. Oddział, który próbowałem wyewidencjonować, nie miał go, dlatego git narzekał na nieśledzone pliki i żadne inne sugerowane rozwiązanie nie działało dla mnie. Zmusiłem kasę do mojego nowego oddziału i pociągnąłem mistrza.git checkout -f my_branch
git pull origin master
git submodule update --init
źródło
W moim przypadku
git rm --cached
nie działało. Ale mam to zgit rebase
źródło
Miałem również podobny problem i wypróbowałem wszystkie powyższe rozwiązania, ale to nie zadziałało
Kwestia ta była spowodowana kiedy przemianowano mój
onMusicUpdateListener.java
TOOnMusicUpdateListener.java
wdevelop
branży.Teraz
master
miałonMusicUpdateListener.java
idevelop
miał taki sam plik jakOnMusicUpdateListener.java
Teraz, gdy przełączałem się na master, dawał mi błąd
a potem to
aborted
.Aby rozwiązać ten problem, i mocno
checked out
master
gałęzi i następnie przemianowany na mójonMusicUpdateListener.java
doOnMusicUpdateListener.java
,committed
to i wtedymerged
ona zdevelop
gałęzi.Potem aktualizowane mój
develop
oddział przezmerging
niego domaster
i teraz wszystko wróciło do normy i problem został rozwiązany.źródło
Może to być problem z pozwoleniem,
zmienić własność,
źródło
Problemem mogą być 2 pliki o tej samej nazwie, ale w innym przypadku.
Możesz usunąć jeden z tych plików lub zmienić jego nazwę. Dawny:
źródło
Przenieś pliki zamiast usuń
Jednym ze sposobów uniknięcia usuwania plików jest ich przeniesienie. Na przykład:
źródło
Jeśli nazwa pliku została zmieniona lokalnie, a następnie wykonaj
pull
, zostanie wyświetlony ten komunikat o błędzie.źródło
to łatwe do rozwiązania, git mówi, że masz te same pliki w obu gałęziach, dlatego musisz usunąć określone pliki z gałęzi master, a następnie będziesz mógł scalić:
git scala „twoją gałąź”
Mam nadzieję, że to zadziała, właśnie rozwiązałem swój błąd. mój błąd to:
błąd: Następujące nie śledzone pliki działającego drzewa zostaną zastąpione przez scalanie: .vs / slnx.sqlite Proszę przenieść lub usunąć je przed scaleniem. Przerwanie
Teraz działa! W moim przypadku .vs / slnx.sqlite został wygenerowany przez visual studio, musiałem go zamknąć przed usunięciem.
źródło
W moim przypadku widziałem ten błąd, ponieważ korzystam z popularnego CMS typu open source, a katalog, który powodował problemy, to katalog do przesyłania, do którego CMS zapisuje.
Mówił więc, że istnieją pliki, których nie masz, ale których nie można uzyskać z wersji.
Pobieram wszystkie pliki z witryny na żywo do mojego lokalnego, a następnie sprawdzę to w repozytorium w nadziei, że to rozwiąże problem.
źródło
Usuń .gitignore plik appname / Gen / , aby rozwiązać ten problem.
źródło
Po prostu poszedłem do systemu plików i bezpośrednio usunąłem plik, a następnie kontynuowałem sprawdzanie git i zadziałało.
Problem występował kilka razy i może być związany z programistami wykonującymi usuwanie, wypychanie, ponowne dodawanie, wypychanie lub coś takiego.
źródło
Większość odpowiedzi rozważa usunięcie lub usunięcie plików, co jest łatwym sposobem. Ale czasami nie chcesz pozbyć się lokalnych plików. Ale połącz się ze strategią, więc git też ma na to rozwiązanie;
źródło
Wystarczy usunąć pliki lub zmienić ich nazwę.
na przykład
Musiałem zmienić nazwę / usunąć ajax / product.php i ajax / produtPrice.php .
Nie martw się, git pull przywróci je. Sugeruję zmianę nazwy zamiast usuwania, ponieważ możesz utracić niektóre zmiany.
Jeśli to nie pomoże, musisz usunąć cały Oddział i utworzyć go ponownie, a następnie zrobić
git pull origin remotebranch
źródło
Aby zapisać zmodyfikowane pliki i użyć zmodyfikowanej zawartości później. Znalazłem ten błąd, gdy próbuję sprawdzić gałąź i podczas próby zmiany bazy. Wypróbuj skrytkę Git
git stash
źródło
Sprawdź, czy nazwa folderu ma symbol „/” lub jakiś specjalny symbol, a następnie zmień nazwę tego folderu. Następnie klonujesz repozytorium w inne miejsce.
źródło
Prostym rozwiązaniem może być: Upewnij się, że jesteś w odpowiednim katalogu roboczym
GitBash
. Wiadomość ta pojawia się prawie za każdym razem, gdy użytkownik próbuje scalić katalog zbyt wysoko w swojej hierarchii folderów.Przykład:
Scenariusz: Użytkownik sklonował repozytorium w
git-folder
, stworzył nowy projekt Java w Eclipse, zaimportował sklonowane repozytorium. Eclipse ustawił myProjectSourceFolder jako folder źródłowy w swoim lokalnym projekcie. dlatego Użytkownik wprowadził go w git bash i pchnął, pociągnął i zlecił swój projekt stamtąd. git synchronizuje więcmyProjectSourceFolder
- ale nie ma w swojej historii żadnego rekordu dla myBashSourceFolder. Dlatego push / pull / merge z myBashSourceFolder wygeneruje dane wyjściowe, jeśli użytkownik spróbuje synchronizować stamtąd następnym razem, zamiast folderu, który wcześniej pracował.źródło