Come posso cancellare un file da git repo?

Ho aggiunto un file chiamato "file1.txt" per git repo. Dopo che l’ho eseguito, ho aggiunto un paio di directory chiamate dir1 e dir2 e le ho impegnate a git repo.

Ora il repository corrente ha "file1.txt" , dir1 e dir2 .
Come posso cancellare "file1.txt" senza influenzare altri come dir1 e dir2 ?

Usa git rm :

 git rm file1.txt git commit -m "remove file1.txt" 

Ma se vuoi rimuovere il file solo dal repository Git e non rimuoverlo dal filesystem, usa:

 git rm --cached file1.txt git commit -m "remove file1.txt" 

E per spingere le modifiche al repository remoto

 git push origin branch_name 

git rm file.txt rimuove il file dal repository ma lo elimina anche dal file system locale .

Per rimuovere il file dal repository e non cancellarlo dal file system locale, utilizzare:
git rm --cached file.txt

La situazione sotto esatta è dove io uso git per mantenere il controllo della versione per il sito web della mia azienda, ma la directory “mickey” era una cartella tmp per condividere il contenuto privato con uno sviluppatore CAD. Quando ha avuto bisogno di file ENORME, ho creato una directory privata, scollegata e ftpd i file lì per lui da recuperare tramite browser. Dimenticando di averlo fatto, ho eseguito successivamente un git add -A dalla directory di base del sito. Successivamente, git status mostrava i nuovi file che dovevano essere impegnati. Ora dovevo eliminarli dal monitoraggio di git e dal controllo della versione …

L’output di esempio qui sotto è quello che mi è appena successo, in cui ho involontariamente eliminato il file .003 . Per fortuna, non mi interessa cosa sia successo alla copia locale in .003 , ma alcuni degli altri file attualmente modificati sono stati degli aggiornamenti che ho appena fatto sul sito web e sarebbe epico essere stati cancellati sul file system locale! “File system locale” = il sito web live (non una buona pratica, ma è la realtà) .

 [~/www]$ git rm shop/mickey/mtt_flange_SCN.7z.003 error: 'shop/mickey/mtt_flange_SCN.7z.003' has local modifications (use --cached to keep the file, or -f to force removal) [~/www]$ git rm -f shop/mickey/mtt_flange_SCN.7z.003 rm 'shop/mickey/mtt_flange_SCN.7z.003' [~/www]$ [~/www]$ git status # On branch master # Changes to be committed: # (use "git reset HEAD ..." to unstage) # # deleted: shop/mickey/mtt_flange_SCN.7z.003 # # Changed but not updated: # (use "git add ..." to update what will be committed) # (use "git checkout -- ..." to discard changes in working directory) # # modified: shop/mickey/mtt_flange_SCN.7z.001 # modified: shop/mickey/mtt_flange_SCN.7z.002 [~/www]$ ls shop/mickey/mtt_flange_S* shop/mickey/mtt_flange_SCN.7z.001 shop/mickey/mtt_flange_SCN.7z.002 [~/www]$ [~/www]$ [~/www]$ git rm --cached shop/mickey/mtt_flange_SCN.7z.002 rm 'shop/mickey/mtt_flange_SCN.7z.002' [~/www]$ ls shop/mickey/mtt_flange_S* shop/mickey/mtt_flange_SCN.7z.001 shop/mickey/mtt_flange_SCN.7z.002 [~/www]$ [~/www]$ [~/www]$ git status # On branch master # Changes to be committed: # (use "git reset HEAD ..." to unstage) # # deleted: shop/mickey/mtt_flange_SCN.7z.002 # deleted: shop/mickey/mtt_flange_SCN.7z.003 # # Changed but not updated: # modified: shop/mickey/mtt_flange_SCN.7z.001 [~/www]$ 

Aggiornamento: questa risposta sta ricevendo traffico, quindi ho pensato di menzionare la mia altra risposta Git condivide un paio di grandi risorse: questa pagina ha un grafico che aiuta a demistificare Git per me. Il libro “Pro Git” è online e mi aiuta molto.

Se il tuo file è già su GitHub, ora (luglio 2013) puoi eliminarlo direttamente dalla GUI Web!

È sufficiente visualizzare qualsiasi file nel repository, fare clic sull’icona del cestino nella parte superiore e eseguire il commit della rimozione come qualsiasi altra modifica basata sul Web.

pulsante Elimina

(il commit rifletterà la cancellazione di quel file):

commettere una cancellazione

E proprio così, è sparito.

Per assistenza su queste funzionalità, assicurati di leggere i nostri articoli della guida sulla creazione , lo spostamento , la ridenominazione e l’ eliminazione dei file.

Nota: poiché si tratta di un sistema di controllo della versione, Git ha sempre la schiena se è necessario ripristinare il file in un secondo momento.

L’ultima frase significa che il file eliminato fa ancora parte della cronologia e puoi ripristinarlo abbastanza facilmente (ma non ancora attraverso l’interfaccia web di GitHub):

Vedi ” Ripristina un file cancellato in un repository Git “.

Questa è l’unica opzione che ha funzionato per me.

 git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch *.sql' 

Nota: sostituire * .sql con il nome del file o il tipo di file. Stai molto attento perché questo passerà attraverso ogni commit e strapperà questo tipo di file.

Inoltre, se si tratta di una cartella da rimuovere e si tratta di cartelle o file secondari successivi, utilizzare:

 git rm -r foldername 

Più in generale, l’ git help con almeno semplici domande come questa:

 [email protected]:/media/Kindle/documents$ git help usage: git [--version] [--exec-path[=GIT_EXEC_PATH]] [--html-path] [-p|--paginate|--no-pager] [--bare] [--git-dir=GIT_DIR] [--work-tree=GIT_WORK_TREE] [--help] COMMAND [ARGS] The most commonly used git commands are: add Add file contents to the index : rm Remove files from the working tree and from the index 

Se si desidera eliminare il file dal repository, ma lasciarlo nel file system (non verrà tracciato):

 [email protected]:~/temp> git rm --cached file1.txt [email protected]:~/temp> git commit -m "remove file1.txt from the repo" 

Se si desidera eliminare il file dal repository e dal file system, sono disponibili due opzioni:

  1. Se il file non ha modifiche in scena nell’indice:

     [email protected]:~/temp> git rm file1.txt [email protected]:~/temp> git commit -m "remove file1.txt" 
  2. Se il file contiene modifiche nell’indice:

     [email protected]:~/temp> git rm -f file1.txt [email protected]:~/temp> git commit -m "remove file1.txt" 

git rm rimuoverà il file su questo ramo solo da ora in poi, ma rimarrà nella cronologia e git lo ricorderà.

Il modo giusto per farlo è con git filter-branch , come altri hanno menzionato qui. Riscriverà ogni commit nella cronologia del ramo per eliminare quel file.

Ma, anche dopo averlo fatto, git può ricordarlo perché ci possono essere riferimenti a esso in reflog, remoti, tag e così via.

Se vuoi cancellarlo completamente in un solo passaggio, ti consiglio di usare git forget-blob

https://ownyourbits.com/2017/01/18/completely-remove-a-file-from-a-git-repository-with-git-forget-blob/

È facile, basta fare git forget-blob file1.txt .

Questo rimuoverà ogni riferimento, farà git filter-branch e infine eseguirà git garbage collector git gc per eliminare completamente questo file nel repository.

Un altro modo se si desidera eliminare il file dalla propria cartella locale utilizzando il comando rm e quindi inviare le modifiche al server remoto.

 rm file1.txt git commit -a -m "Deleting files" git push origin master 

Se si dispone dell’applicazione GitHub per Windows, è ansible eliminare un file in 5 semplici passaggi:

  • Fai clic su Sincronizza.
  • Fare clic sulla directory in cui si trova il file e selezionare la versione più recente del file.
  • Fai clic sugli strumenti e seleziona “Apri una shell qui”.
  • Nella shell, digita: “rm {filename}” e premi invio.
  • Conferma la modifica e risincronizza.

Nel mio caso ho provato a rimuovere il file su github dopo pochi commit ma salvare sul computer

 git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch file_name_with_path' HEAD git push --force -u origin master 

e più tardi questo file è stato ignorato

Per cancellare un file specifico

git rm nomefile

Per pulire tutti i file non tracciati da una directory in modo ricorsivo in modalità singola

git clean -fdx

  1. Innanzitutto, rimuovi i file dal repository locale.

    git rm -r Nome-file

    oppure, rimuovi i file solo dal repository locale ma dal filesystem

    git rm – nome file in cache

  2. In secondo luogo, Commit si trasforma nel repository locale.

     git commit -m "unwanted files or some inline comments" 
  3. Infine, aggiorna / spinge le modifiche locali nel repository remoto.

     git push 

Ho provato molte delle opzioni suggerite e nessuna sembrava funzionare (non elencerò i vari problemi). Quello che ho finito per fare, che ha funzionato, era semplice e intuitivo (per me) era:

  1. spostare l’intero repository locale altrove
  2. clonare nuovamente il repo dal master al disco locale
  3. copia indietro i file / cartella dalla tua copia originale al n. 1 di nuovo nel nuovo clone dalla # 2
  4. assicurati che il problema del file di grandi dimensioni non sia presente o escluso nel file .gitignore
  5. fai il solito git add / git commit / git push

Ho dei file obj e bin che sono entrati casualmente nel repository che non voglio inquinare la mia lista di ‘file modificati’

Dopo aver notato che sono andati al telecomando, li ho ignorati aggiungendo questo a .gitignore

 /*/obj /*/bin 

Il problema è che sono già nel telecomando e quando vengono modificati, appaiono come modificati e inquinano la lista dei file modificati.

Per non vederli, è necessario eliminare l’intera cartella dal repository remoto.

In un prompt dei comandi:

  1. CD nella cartella repo (cioè C:\repos\MyRepo )
  2. Voglio cancellare SSIS \ obj. Sembra che tu possa cancellare solo al livello più alto, quindi ora hai bisogno di CD in SSIS: (cioè C:\repos\MyRepo\SSIS )
  3. Digita ora la magia incantation git rm -r -f obj
    • rm = rimuovi
    • -r = rimuove in modo ricorsivo
    • -f = significa forza, perché lo intendi davvero
    • obj è la cartella
  4. Ora esegui git commit -m "remove obj folder"

Ho ricevuto un messaggio allarmante che diceva che 13 file cambiavano 315222 delezioni

Quindi, poiché non volevo dover cercare la linea CMD, sono entrato in Visual Sstudio e ho fatto un Sync per applicarlo al telecomando

Incase se non si archivia nel repository locale ma in git repo, quindi basta aprire il file in git repo attraverso l’interfaccia web e trovare il pulsante Elimina nell’angolo destro dell’interfaccia. Fai clic qui, per visualizzare l’opzione di eliminazione dell’interfaccia