Pertanyaan Hapus file dari repositori Git tanpa menghapusnya dari sistem file lokal


Komit awal saya berisi beberapa file log. aku sudah menambahkan *log untuk saya .gitignore, dan sekarang saya ingin menghapus file log dari repositori saya.

git rm mylogfile.log

akan menghapus file dari repositori, tetapi juga akan menghapusnya dari sistem file lokal.

Bagaimana cara menghapus file ini dari repo tanpa menghapus salinan lokal saya dari file tersebut?


2435
2017-07-17 14:56


asal


Jawaban:


Untuk file tunggal:

git rm --cached mylogfile.log

Untuk direktori tunggal:

git rm --cached -r mydirectory

3499
2017-07-17 14:57



Untuk menghapus seluruh folder dari repo (seperti file Resharper), lakukan ini:

git rm -r --cached folderName

Saya telah melakukan beberapa file resharper, dan tidak ingin itu bertahan untuk pengguna proyek lain.


249
2018-04-04 18:14



Anda juga dapat menghapus file dari repositori berdasarkan gitignore Anda tanpa menghapusnya dari sistem file lokal:

git rm --cached `git ls-files -i -X .gitignore`

Atau, alternatifnya, di Windows Powershell:

git rm --cached $(git ls-files -i -X .gitignore)

162
2018-01-31 10:05



Juga, jika Anda telah melakukan data sensitif (misalnya file yang berisi kata sandi), Anda harus menghapusnya sepenuhnya dari histori repositori. Berikut panduan yang menjelaskan cara melakukannya: http://help.github.com/remove-sensitive-data/


66
2017-08-21 12:16



Sesuai Jawaban saya di sini: https://stackoverflow.com/questions/6313126/how-to-remove-a-directory-in-my-github-repository

Untuk menghapus folder / direktori atau file hanya dari repositori git dan bukan dari 3 langkah sederhana mencoba lokal.


Langkah-langkah untuk menghapus direktori

git rm -r --cached File-or-FolderName
git commit -m "Removed folder from repository"
git push origin master

Langkah-langkah untuk mengabaikan folder itu di commit berikutnya

Untuk mengabaikan folder itu dari commit berikutnya membuat satu file di root bernama .gitignore   dan masukkan nama folder itu ke dalamnya. Anda dapat menaruh sebanyak yang Anda inginkan

.gitignore file akan terlihat seperti ini

/FolderName

remove directory


58
2017-08-24 12:16



Solusi yang lebih umum:

  1. Edit .gitignore mengajukan.

    ECHO mylogfile.log >> .gitignore

  2. Hapus semua item dari indeks.

    git rm -r -f --cached .

  3. Buat ulang indeks.

    git add .

  4. Buat komitmen baru

    git commit -m "Removed mylogfile.log"


54
2017-12-13 11:42



Git memungkinkan Anda mengabaikan file-file tersebut dengan menganggapnya tidak berubah. Ini   dilakukan dengan menjalankan git update-index --assume-unchanged path/to/file.txt perintah. Begitu menandai file seperti itu, git akan   sepenuhnya abaikan setiap perubahan pada file itu; mereka tidak akan muncul kapan   menjalankan status git atau git diff, juga tidak akan pernah dilakukan.

(Dari https://help.github.com/articles/ignoring-files)

Oleh karena itu, tidak menghapusnya, tetapi mengabaikan perubahan itu selamanya. Saya pikir ini hanya berfungsi secara lokal, jadi rekan kerja masih bisa melihat perubahan kecuali mereka menjalankan perintah yang sama seperti di atas. (Masih perlu memverifikasi ini.)

Catatan: Ini tidak menjawab pertanyaan secara langsung, tetapi didasarkan pada pertanyaan tindak lanjut di komentar dari jawaban yang lain.


17
2018-01-28 11:46



Jawaban di atas tidak berhasil untuk saya. Saya menggunakan filter-cabang untuk menghapus semua file yang dilakukan

hapus file dari repositori git dengan:

git filter-branch --tree-filter 'rm  file'

hapus folder dari repositori git dengan:

git filter-branch --tree-filter 'rm -rf directory'

Ini menghapus direktori atau file dari semua commit

Anda dapat menentukan komit dengan menggunakan:

git filter-branch --tree-filter 'rm -rf directory' HEAD

Atau rentang

git filter-branch --tree-filter 'rm -rf vendor/gems' t49dse..HEAD

Untuk mendorong semuanya ke jarak jauh, Anda dapat melakukan:

git push origin master --force

4
2018-01-12 13:59