Pertanyaan Bagaimana saya bisa menghapus file dari git repo?


Saya telah menambahkan file bernama "file1.txt" untuk git repo. Setelah itu saya melakukan itu, tambah beberapa direktori yang disebut dir1 dan dir2, dan berkomitmen mereka untuk git repo.

Sekarang repo saat ini "file1.txt", dir1 dan dir2.
Bagaimana saya bisa menghapus "file1.txt" tanpa mempengaruhi orang lain seperti dir1 dan dir2?


1311
2018-01-12 07:48


asal


Jawaban:


Menggunakan git rm:

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

Tetapi jika Anda ingin menghapus file hanya dari repositori Git dan tidak menghapusnya dari filesystem, gunakan:

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

Dan untuk mendorong perubahan ke repo jarak jauh

git push origin branch_name  

2213
2018-01-12 07:52



git rm file.txt menghapus file dari repo tetapi juga menghapusnya dari sistem file lokal.

Untuk menghapus file dari repo dan tidak hapus dari penggunaan sistem file lokal:
git rm --cached file.txt 

Situasi di bawah ini adalah di mana saya menggunakan git untuk mempertahankan kontrol versi untuk situs web bisnis saya, tetapi direktori "mickey" adalah folder tmp untuk berbagi konten pribadi dengan pengembang CAD. Ketika dia membutuhkan file-file BESAR, saya membuat direktori pribadi yang tidak tertaut dan ftpd file-file yang ada padanya untuk diambil melalui browser. Melupakan saya melakukan ini, saya kemudian melakukan git add -A dari direktori basis situs web. Kemudian, git status menunjukkan file baru yang perlu dikomit. Sekarang saya perlu menghapusnya dari pelacakan git dan kontrol versi ...

Contoh output di bawah ini dari apa yang baru saja terjadi pada saya, di mana saya tidak sengaja menghapus .003 mengajukan. Untungnya, saya tidak peduli apa yang terjadi pada salinan lokal .003, tetapi beberapa file yang saat ini diubah lainnya adalah pembaruan yang baru saja saya buat ke situs web dan akan menjadi epik yang telah dihapus pada sistem file lokal! "Sistem file lokal" = situs web langsung (bukan praktik yang hebat, tetapi adalah 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]$

Memperbarui: Jawaban ini mendapatkan lalu lintas, jadi saya pikir saya akan menyebutkannya jawaban Git lainnya berbagi beberapa sumber daya hebat: Halaman ini memiliki grafik yang membantu mengungkap Git untuk saya. Itu Buku "Pro Git" sedang online dan banyak membantu saya.


547
2018-05-25 20:26



Jika file Anda sudah ada di GitHub, Anda sekarang (Juli 2013) bisa langsung menghapusnya dari web GUI!

Cukup lihat file apa pun di repositori Anda, klik ikon tempat sampah di bagian atas, dan lakukan penghapusan seperti halnya pengeditan berbasis web lainnya.

delete button

(komit akan mencerminkan penghapusan file itu):

commit a deletion

Dan seperti itu, itu hilang.

Untuk bantuan dengan fitur ini, pastikan untuk membaca artikel bantuan kami di menciptakan, bergerak, mengganti nama, dan menghapus file.

Catatan: Karena ini adalah sistem kontrol versi, Git selalu memiliki punggung Anda jika Anda perlu memulihkan file nanti.

Kalimat terakhir berarti bahwa file yang dihapus masih menjadi bagian dari sejarah, dan Anda dapat memulihkannya cukup mudah (tetapi belum melalui antarmuka web GitHub):

Lihat "Kembalikan file yang terhapus dalam repositori Git".


56
2017-07-04 20:53



Ini adalah satu-satunya pilihan yang berhasil bagi saya.

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

Catatan: Ganti * .sql dengan nama file atau jenis file Anda. Berhati-hatilah karena ini akan melalui setiap commit dan merobek jenis file ini.


39
2018-02-27 19:29



Lebih umum, git help akan membantu dengan setidaknya 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

23
2018-01-12 08:21



Selain itu, jika folder itu dihapus dan folder atau file anak berikutnya, gunakan:

git rm -r foldername

23
2018-04-17 15:41



Jika Anda ingin menghapus file dari repo, tetapi membiarkannya dalam sistem file (akan tidak 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 sistem file, maka ada dua opsi:

  1. Jika file tidak memiliki perubahan yang ditampilkan dalam indeks:

    bykov@gitserver:~/temp> git rm file1.txt
    bykov@gitserver:~/temp> git commit -m "remove file1.txt"
    
  2. Jika file tersebut mengalami perubahan dalam indeks:

    bykov@gitserver:~/temp> git rm -f file1.txt
    bykov@gitserver:~/temp> git commit -m "remove file1.txt"
    

10
2018-03-20 12:13



git rm hanya akan menghapus file di cabang ini dari sekarang, tetapi tetap dalam sejarah dan git akan mengingatnya.

Cara yang tepat untuk melakukannya adalah dengan git filter-branch, seperti yang telah disebutkan orang lain di sini. Ini akan menulis ulang setiap komit dalam sejarah cabang untuk menghapus file itu.

Tapi, bahkan setelah melakukan itu, git bisa mengingatnya karena bisa ada referensi untuk itu di reflog, remote, tag dan semacamnya.

Jika Anda ingin benar-benar menghapusnya dalam satu langkah, saya sarankan Anda untuk menggunakannya git forget-blob

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

Itu mudah, lakukan saja git forget-blob file1.txt.

Ini akan menghapus setiap referensi, lakukan git filter-branch, dan akhirnya jalankan kolektor sampah git git gc untuk benar-benar menyingkirkan file ini di repo Anda.


10
2018-01-23 12:56