Hapus file dari repositori tetapi simpan secara lokal

369

Saya memiliki folder yang ingin saya hapus di repositori jarak jauh saya. Saya ingin menghapusnya, tetapi simpan folder itu di komputer saya

Rodrigo Souza
sumber
Silakan lihat pertanyaan terkait yang disarankan saat Anda menulis milik Anda - duplikat itu mungkin salah satu dari dua yang pertama.
Cascabel
Duplikat lain: stackoverflow.com/questions/1273108/…
Cascabel

Jawaban:

637
git rm --cached -r somedir

Akan menampilkan penghapusan pada direktori, tetapi tidak menyentuh apa pun pada disk. Ini juga berfungsi untuk file, seperti:

git rm --cached somefile.ext

Setelah itu Anda mungkin ingin menambahkan somedir/atau somefile.extke .gitignorefile Anda sehingga git tidak mencoba untuk menambahkannya kembali.

jamessan
sumber
24
Dan kemudian tambahkan path ke .gitignore sehingga git tidak mencoba membuat Anda menambahkannya nanti.
grossvogel
3
Apakah ini menghasilkan (file dalam) direktori dihapus ketika dia menarik dari remote?
bstpierre
Tidak ketika dia menarik; file akan tetap dihapus secara lokal selama proses penggabungan tarikan otomatis. Setelah itu, dorongan akan menyebabkan file dihapus dari sisi server.
Walter Mundt
7
Apa yang terjadi jika saya memiliki remote ketiga? Apakah file yang sesuai akan dihapus di masa depan? Saya bertanya karena saya merasa ini adalah kasus penggunaan yang cukup umum, yaitu memeriksa beberapa file ke dalam repo, menyadari di kemudian hari bahwa mereka berbeda antara remote, untuk alasan yang baik, dan seharusnya tidak pernah di repo di tempat pertama, ingin untuk mengatasinya dengan menjaga semua checkout lokal persis seperti apa adanya, tetapi menghapus file dari repo.
Bobby Jack
6
Untuk file tunggal, Anda dapat melakukannyagit rm --cached path/to/file
Travis Reeder
3

Saya hanya akan:

  • Pindahkan folder dari pohon kerja Anda
  • git rm folder, komit perubahan
  • Tambahkan ke .gitignore(atau .git/info/excludes), komit perubahan
  • Pindahkan folder kembali
Jeff
sumber
8
ini bukan solusi yang baik - bagaimana jika Anda memiliki direktori yang sangat besar?
ioleo
mungkin perlu menggunakangit rm -r
theUtherSide
1
@loostro tidak memindahkannya ke perangkat blok lain. Sebagian besar sistem file hanya akan memperbarui inode file, dan tidak benar-benar memindahkan seluruh direktori
648trindade