Saya telah menambahkan sebuah file bernama "file1.txt"
ke Git repositori. Setelah itu, saya melakukan hal itu, menambahkan beberapa direktori yang disebut dir1
dan dir2
, dan mereka berkomitmen untuk repositori Git.
Sekarang saat ini repositori telah "file1.txt"
, dir1
, dan dir2
. Bagaimana saya bisa menghapus "file1.txt"
tanpa mempengaruhi orang lain, seperti dir1
dan dir2
?
Gunakan git rm
:
git rm file1.txt
git commit -m "remove file1.txt"
Tapi jika anda ingin memindahkan file dari repositori Git dan tidak menghapusnya dari sistem berkas, gunakan:
git rm --cached file1.txt
git commit -m "remove file1.txt"
Dan untuk mendorong perubahan untuk remote repo
git push origin branch_name
git rm file.txt
menghapus file dari repo, tapi juga menghapusnya dari sistem file lokal.
Untuk menghapus file dari repo dan tidak **** menghapusnya dari sistem berkas lokal yang digunakan:
git rm --cached file.txt
Di bawah situasi yang tepat adalah di mana saya menggunakan git untuk mempertahankan kontrol versi untuk bisnis saya's web, tetapi "mickey" direktori tmp folder untuk berbagi konten pribadi dengan CAD pengembang. Ketika ia membutuhkan file BESAR, saya membuat pribadi, unlinked direktori dan ftpd file tidak untuk dia untuk mengambil melalui browser. Lupa saya melakukan ini, saya kemudian melakukan git add -A
dari situs web's basis direktori. Selanjutnya, git status
menunjukkan file baru perlu melakukan. Sekarang saya perlu untuk menghapus mereka dari git's pelacakan dan kontrol versi...
Contoh output di bawah ini adalah dari apa yang baru saja terjadi padaku, di mana saya tidak sengaja dihapus .003
file. Untungnya, saya don't peduli apa yang terjadi pada salinan lokal untuk .003
, tapi beberapa lainnya saat ini berubah file update saya hanya membuat website dan akan menjadi epik telah dihapus pada sistem file lokal! "sistem file Lokal" = live web (bukan praktek yang besar, tapi ini kenyataan).
[~/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 <File>..." to unstage)
#
# deleted: shop/mickey/mtt_flange_SCN.7z.003
#
# Changed but not updated:
# (use "git add <File>..." to update what will be committed)
# (use "git checkout -- <File>..." 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 <File>..." 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]$
Update: jawaban Ini mendapatkan beberapa lalu lintas, jadi saya pikir saya'd menyebutkan saya lainnya Git jawaban berbagi beberapa sumber daya yang besar: halaman Ini memiliki grafis yang membantu mengungkap Git untuk saya. Yang "Pro Git" buku online dan banyak membantu saya.
Pertama, jika anda menggunakan git rm
, terutama untuk beberapa file, mempertimbangkan setiap wildcard akan diselesaikan oleh shell, bukan oleh git
perintah.
git rm -- *.anExtension
git commit -m "remove multiple files"
Tapi, jika file sudah di GitHub, anda dapat (sejak juli 2013) langsung menghapus dari web GUI!
Hanya melihat file dalam repositori anda, klik ikon tempat sampah di bagian atas, dan melakukan penghapusan sama seperti yang lain berbasis web edit.
Kemudian "git pull
" di repo lokal, dan yang akan menghapus file secara lokal juga.
Yang membuat ini menjawab (bundaran) yang efektif untuk menghapus file dari git repo?
(Untuk tidak menyebutkan bahwa file di GitHub ** dalam "git repo")
(komit akan mencerminkan penghapusan file):
Dan hanya seperti itu, itu hilang.
Catatan: Karena itu sistem kontrol versi, Git selalu memiliki punggung anda jika anda perlu untuk memulihkan file nanti.
Kalimat terakhir berarti bahwa file yang dihapus masih bagian dari sejarah, dan anda dapat mengembalikannya dengan mudah cukup (tapi belum melalui GitHub antarmuka web):
Ini adalah satu-satunya pilihan yang bekerja untuk saya.
git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch *.sql'
Catatan: Ganti *.sql dengan nama file anda atau file jenis. Berhati-hatilah karena hal ini akan pergi melalui setiap komit dan rip jenis file ini keluar.
EDIT: memperhatikan - setelah perintah ini, anda tidak akan dapat untuk mendorong atau menarik - anda akan melihat menolak dari 'terkait sejarah' anda dapat menggunakan 'git push --force -u origin master' untuk mendorong atau menarik
Lebih umumnya, git membantu
akan membantu dengan setidaknya pertanyaan-pertanyaan sederhana seperti ini:
zhasper@berens:/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
Jika anda ingin menghapus file dari repo, tapi biarkan dalam sistem file (akan terlacak):
bykov@gitserver:~/temp> git rm --cached file1.txt
bykov@gitserver:~/temp> git commit -m "remove file1.txt from the repo"
Jika anda ingin menghapus file dari repo dan dari file sistem maka ada dua pilihan:
bykov@gitserver:~/temp> git rm file1.txt bykov@gitserver:~/temp> git commit-m "hapus file1.txt" 2. Jika file telah berubah dipentaskan dalam indeks:
bykov@gitserver:~/temp> git rm -f file1.txt bykov@gitserver:~/temp> git commit-m "hapus file1.txt"
git rm
hanya akan menghapus file di cabang ini dari sekarang, tetapi tetap dalam sejarah dan git akan ingat itu.
Cara yang tepat untuk melakukannya adalah dengan git filter-cabang
, sebagai orang lain telah disebutkan di sini. Ini akan menulis ulang setiap komit dalam sejarah cabang untuk menghapus file tersebut.
Tapi, bahkan setelah melakukan itu, git dapat mengingatnya karena bisa ada referensi untuk ini dalam reflog, remote, dan tag tersebut.
Jika anda ingin benar-benar melenyapkan hal dalam satu langkah, saya merekomendasikan anda untuk menggunakan git lupa-gumpalan`
Sangat mudah, hanya melakukan git lupa-gumpalan file1.txt
.
Ini akan menghapus setiap referensi, melakukan git filter-cabang
, dan akhirnya menjalankan git pengumpul sampah git gc
untuk benar-benar menyingkirkan file ini di repo.
Catatan: jika anda ingin menghapus file hanya dari git gunakan di bawah ini:
git rm --cached file1.txt
Jika anda ingin menghapus juga dari hard disk:
git rm file1.txt
Jika anda ingin menghapus folder(folder dapat berisi beberapa file) jadi, anda harus menghapus menggunakan rekursif perintah, sebagai berikut:
git rm -r foldername
Jika anda ingin menghapus sebuah folder di dalam folder lain
git rm -r parentFolder/childFolder
Kemudian, anda dapat melakukan
dan push
seperti biasa. Namun, jika anda ingin memulihkan dihapus folder, anda dapat mengikuti ini: memulihkan file yang telah dihapus dari git adalah mungkin.
Dari doc:
git rm [-f | --kekuatan] [-n] [-r] [--cached] [--ignore-ketidakcocokan] [--quiet] [--] <File>...
PILIHAN * **
<file>...
File untuk menghapus. Fileglobs (misalnya *.c) dapat diberikan untuk menghapus semua file yang cocok. Jika anda ingin Git untuk memperluas file glob karakter, anda mungkin perlu untuk shell-escape mereka. Terkemuka nama direktori (misalnya dir untuk hapus dir/file1 dan dir/file2) dapat diberikan untuk menghapus semua file di direktori, dan secara rekursif semua sub-direktori, tetapi hal ini membutuhkan opsi-r yang secara eksplisit diberikan.
-f
--force
Menimpa up-to-date periksa.
-n
--dry-run
tidak benar-benar menghapus file(s). Sebaliknya, hanya menunjukkan jika mereka ada di indeks dan sebaliknya akan dihapus oleh perintah.
-r
Memungkinkan rekursif penghapusan ketika terkemuka direktori nama yang diberikan.
--
pilihan Ini dapat digunakan untuk memisahkan baris perintah pilihan dari daftar file, (berguna ketika nama file mungkin keliru untuk opsi baris perintah).
--cached
Gunakan opsi ini untuk disimpan dan menghapus jalur hanya dari indeks. Bekerja pohon file, baik dimodifikasi atau tidak, akan ditinggalkan sendirian. --ignore-ketidakcocokan
Keluar dengan status nol bahkan jika tidak ada file yang cocok.
-q
--quiet
git rm biasanya output dalam satu baris (dalam bentuk perintah rm) untuk setiap file yang dihapus. Opsi ini mengontrol output yang dihasilkan.
Dalam kasus saya saya mencoba untuk menghapus file di github setelah beberapa melakukan tetapi menyimpan di komputer
git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch file_name_with_path' HEAD
git push --force -u origin master
dan kemudian file ini diabaikan
Jika anda memiliki GitHub for Windows aplikasi, anda dapat menghapus file dalam 5 langkah mudah:
git rm -r File-Nama
atau, memindahkan file dari repositori lokal tapi dari filesystem
git rm --File cache-Nama
git commit-m "file yang tidak diinginkan atau beberapa inline komentar"
git push
Saya mencoba banyak pilihan yang disarankan dan tidak muncul untuk bekerja (I won't daftar berbagai masalah). Apa yang akhirnya saya lakukan, yang bekerja, adalah sederhana dan intuitif (untuk saya) adalah:
Setelah anda telah menghapus file dari repo git rm
anda dapat menggunakan BFG Repo-Cleaner untuk benar-benar dan mudah melenyapkan file dari repo sejarah.
Saya telah obj dan bin file yang tidak sengaja dibuat ke repo yang saya don't ingin mencemari 'mengubah file' daftar
After saya melihat mereka pergi jauh, aku mengabaikan mereka dengan menambahkan ini ke .gitignore
/*/obj
/*/bin
Masalahnya adalah mereka sudah berada dalam jarak jauh, dan ketika mereka berubah, mereka muncul sebagai berubah dan mencemari berubah daftar file.
Untuk berhenti melihat mereka, anda perlu untuk menghapus seluruh folder dari repositori.
Pada prompt perintah:
C:\repos\MyRepo
)C:\repos\MyRepo\SSIS
) git rm -r -f obj
Aku punya pesan yang mengkhawatirkan mengatakan 13 file berubah 315222 deletions
Kemudian karena saya didn't ingin melihat CMD line, saya pergi ke Visual Sstudio dan melakukan Sinkronisasi untuk menerapkannya ke daerah terpencil
Memetikan jika anda don't file di repo lokal tapi di git repo, maka cukup buka file di git repo melalui antarmuka web dan menemukan Menghapus tombol di sudut kanan atas pada antarmuka. Klik di Sini, Untuk melihat antarmuka Pilihan Delete