Jadi saya menambahkan folder ke file .gitignore saya.
Setelah saya melakukan git status
itu memberitahu saya
# On branch latest
nothing to commit (working directory clean)
Namun, ketika saya mencoba mengubah cabang saya mendapatkan yang berikut:
My-MacBook-Pro:webapp marcamillion$ git checkout develop
error: The following untracked working tree files would be overwritten by checkout:
public/system/images/9/thumb/red-stripe.jpg
public/system/images/9/original/red-stripe.jpg
public/system/images/8/thumb/red-stripe-red.jpg
public/system/images/8/original/red-stripe-red.jpg
public/system/images/8/original/00-louis_c.k.-chewed_up-cover-2008.jpg
public/system/images/7/thumb/red-stripe-dark.jpg
public/system/images/7/original/red-stripe-dark.jpg
public/system/images/7/original/DSC07833.JPG
public/system/images/6/thumb/red-stripe-bw.jpg
public/system/images/6/original/website-logo.png
public/system/images/6/original/red-stripe-bw.jpg
public/system/images/5/thumb/Guy_Waving_Jamaican_Flag.jpg
public/system/images/5/original/logocompv-colored-squares-100px.png
public/system/images/5/original/Guy_Waving_Jamaican_Flag.jpg
public/system/images/4/thumb/DSC_0001.JPG
public/system/images/4/original/logo.png
public/system/images/4/original/DSC_0001.JPG
public/system/images/4/original/2-up.jpg
public/system/images/3/thumb/logo2.gif
public/system/images/3/original/logo2.gif
public/system/images/3/original/Guy_Waving_Jamaican_Flag.jpg
public/system/images/3/original/11002000962.jpg
public/system/images/2/thumb/Profile Pic.jpg
public/system/images/2/original/Profile Pic.jpg
public/system/images/2/original/02 Login Screen.jpg
public/system/images/1/original/Argentina-2010-World-Cup.jpg
Please move or remove them before you can switch branches.
Aborting
Seperti inilah file .gitignore saya:
.bundle
.DS_Store
db/*.sqlite3
log/*.log
tmp/**/*
public/system/images/*
public/system/avatars/*
Bagaimana cara ini berfungsi sehingga saya bisa berganti cabang tanpa menghapus file-file itu?
Jika saya melakukan perubahan, apakah itu akan memengaruhi file-file itu? Dengan kata lain, jika saya kembali ke cabang ini setelah itu akankah semuanya sempurna sesuai dengan komitmen terbaru saya?
Saya tidak ingin kehilangan file-file itu, saya hanya tidak ingin mereka dilacak.
Jawaban:
Sepertinya Anda ingin file diabaikan tetapi sudah dilakukan. .gitignore tidak berpengaruh pada file yang sudah ada di dalam repo sehingga harus dihapus
git rm --cached
. Itu--cached
akan mencegahnya memiliki efek pada copy pekerjaan Anda dan itu hanya akan ditandai sebagai dihapus saat berikutnya Anda melakukan. Setelah file dihapus dari repo maka .gitignore akan mencegah mereka untuk ditambahkan lagi.Tetapi Anda memiliki masalah lain dengan .gitignore Anda, Anda menggunakan wildcard secara berlebihan dan menyebabkannya kurang cocok dari yang Anda harapkan. Alih-alih mari kita ubah .gitignore dan coba ini.
sumber
git rm --cached
tidak akan membuat perbedaan, file-file itu tidak ada di cabang saat ini. Untuk kesalahan ini saya pikir pengguna harus mengikuti jawaban @Greg Hewgill - "pindahkan mereka dari copy pekerjaan, alihkan cabang, dan pindahkan kembali".your files would be overwritten
denganfatal: pathspec 'test/node_modules' did not match any files
ketika saya melakukannyagit rm -r --cache test/node_modules
? Saya tidak dapat menarik karena pesan yang ditimpa dan tidak dapat menghapus karena git tidak dapat menemukan mereka (mereka ada di sana)PERINGATAN: itu akan menghapus file yang tidak terlacak, jadi itu bukan jawaban yang bagus untuk pertanyaan yang diajukan.
Saya menekan pesan ini juga. Dalam kasus saya, saya tidak ingin menyimpan file, jadi ini bekerja untuk saya:
git 2.11 dan yang lebih baru
git yang lebih tua
Jika Anda juga ingin menghapus file yang diabaikan oleh git, maka jalankan perintah berikut.
DIPERINGATKAN !!! INI PALING MUNGKIN MENGHANCURKAN PROYEK ANDA, GUNAKAN HANYA JIKA ANDA TAHU 100% APA YANG ANDA LAKUKAN
git 2.11 dan yang lebih baru
git yang lebih tua
http://www.kernel.org/pub/software/scm/git/docs/git-clean.html
-x
berarti file yang diabaikan juga dihapus serta file yang tidak diketahui git.-d
berarti menghapus direktori yang tidak dilacak selain file yang tidak dilacak.-f
diperlukan untuk memaksanya berjalan.sumber
git clean -dfxn
ataugit clean -dfx --dry-run
-x
pilihan menyakitkan sayaPaksa saja:
git checkout -f another-branch
sumber
error: pathspec 'mybranch' did not match any file(s) known to git.
Jika Anda menggunakan OS X, itu mungkin karena nama file memiliki karakter tertentu yang mengubah huruf. Coba atur opsi konfigurasi berikut:
sumber
git rebase
juga. Terima kasih.Git memberitahu Anda bahwa ia ingin membuat file (bernama
public/system/images/9/...
dll), tetapi Anda sudah memiliki file yang ada dalam direktori yang yang tidak dilacak oleh Git. Mungkin orang lain menambahkan file-file itu ke repositori Git, dan ini adalah pertama kalinya Anda beralih ke cabang itu?Mungkin ada alasan mengapa file-file di
develop
cabang Anda tetapi tidak di cabang Anda saat ini. Anda mungkin harus bertanya kepada kolaborator Anda mengapa demikian.Anda tidak dapat melakukannya tanpa membuat file hilang entah bagaimana. Anda dapat mengubah nama
public
menjadimy_public
atau sesuatu untuk saat ini.Jika Anda melakukan perubahan, Git tidak akan kehilangannya. Jika Anda tidak melakukan perubahan, maka Git akan berusaha sangat keras untuk tidak menimpa pekerjaan yang telah Anda lakukan. Itulah yang diingatkan Git pada Anda pada contoh pertama di sini (ketika Anda mencoba untuk berpindah cabang).
sumber
Ini berhasil untuk saya.
sumber
Ada perintah untuk tugas rumit ini (menghapus file yang tidak terlacak secara permanen)
Maka
git pull
akan dilakukan.sumber
Bagi mereka yang membutuhkan sesuatu yang jauh dari jawaban Scott Schafer ,
kemungkinan akan bekerja. Saya sangat menyarankan berlari
pertama. Perintah itu akan menampilkan daftar file yang akan dihapus Git jika Anda menjalankan
git clean -f
, dan mungkin menyelamatkan Anda dari rasa sakit karena secara tidak sengaja menghapus sesuatu yang tidak Anda inginkan.Lihat jawaban Stack Oveflow ini atau dokumen untuk informasi lebih lanjut tentang
git clean
.sumber
Sayangnya tidak ada
git rm --cached
ataugit clean -d -fx ""
tidak melakukannya untuk saya.Solusi saya akhirnya adalah mendorong cabang saya ke jarak jauh, mengkloning repo baru, lalu melakukan penggabungan dalam repo baru. Orang lain yang mengakses repo harus melakukan hal yang sama.
Moral cerita: gunakan
.gitignore
file sejak awal.sumber
Jika Anda ingin menyelesaikan pertanyaan ini dengan cepat, Anda dapat menggunakan perintah ini:
sumber
.gitignore
afaik.Saya memiliki masalah yang sama ketika memeriksa ke cabang berdasarkan komit sebelumnya. Git menolak untuk checkout karena file-file yang tidak terlacak.
Saya telah menemukan solusi dan saya harap ini akan membantu Anda juga.
Menambahkan direktori yang terpengaruh ke
.gitignore
dan mengeluarkan$ git rm -r --cached
tampaknya tidak cukup.Asumsikan Anda ingin membuat cabang berdasarkan komit sebelumnya untuk menguji beberapa hal dan kembali ke versi saat ini. Saya akan melakukannya dalam langkah-langkah berikut:
Setup file yang tidak dilacak: edit
.gitignore
dan terapkan$ git rm -r --cached
pada file dan direktori yang Anda ingin diabaikan oleh git. Tambahkan juga file.gitignore
itu sendiri ke.gitignore
dan jangan lupa untuk menerbitkan$ git rm -r --cached .gitignore
. Ini akan memastikan perilaku abaikan dari git tetap sama di commit sebelumnya.Komit perubahan yang baru saja Anda buat:
$ git add -A
$ git commit
Simpan log saat ini, jika tidak, Anda mungkin mendapatkan masalah kembali ke versi saat ini
$ git log > ../git.log
Hard reset ke komit K
$ git reset --hard version_k
Buat cabang berdasarkan komit K
$ git branch commit_k_branch
Periksa ke cabang itu
$ git checkout commit_k_branch
Kerjakan barangmu dan lakukan itu
Checkout kembali menjadi master lagi
$ git checkout master
Setel ulang ke Versi saat ini lagi
$ git reset current_version
atau$ git reset ORIG_HEAD
Sekarang Anda dapat mengatur ulang hard ke HEAD
git reset --hard HEAD
CATATAN! Jangan melewatkan langkah selanjutnya ke terakhir (seperti misalnya
$ git reset --hard ORIG_HEAD
) jika tidak file yang dilacak git yang dikomplain di atas akan hilang.Saya juga memastikan file yang dikeluhkan git tidak dihapus. Saya menyalinnya ke file teks dan mengeluarkan perintah
$ for i in $(cat ../test.txt); do ls -ahl $i; done
Jika Anda checkout ke cabang yang disebutkan di atas lagi, jangan lupa untuk mengeluarkan
$ git status
untuk memastikan tidak ada perubahan yang tidak diinginkan muncul.sumber
Ini terjadi pada saya di sistem Windows 8 , menggunakan Git dari command prompt. Anggota tim saya yang lain menggunakan TFS , dan saya menggunakan Microsoft git-tf untuk mendorong / menarik antara TFS dan repositori Git lokal saya.
Masalah muncul karena beberapa file yang telah diubah namanya hanya untuk mengubah kasus mereka . Apa yang tampaknya terjadi adalah ini:
git status
, saya tidak bisa melihat perubahan, karena di Windows command prompt nama-nama file itu setara.Solusi paling sederhana bagi saya adalah:
git checkout
versi proyek sebelumnya, jauh sebelum file-file itu ditambahkan .git checkout
versi terbaru dari proyek, dengan casing file yang benar.sumber
Dua fungsi ini (git rm --cached, git checkout -f cabang-lain) TIDAK bekerja untuk saya.
Sebagai gantinya, saya secara fisik menghapus file (dalam gerhana) seperti apa yang Git katakan agar Anda lakukan; Harap pindahkan atau hapus sebelum Anda dapat berganti cabang.
dan kemudian saya tambahkan / lakukan.
dan kemudian saya menarik dan berhasil!
sumber
Dalam kasus saya, masalahnya adalah pada submodula.
master
digabung dengan cabang lain yang menambahkan submodule baru ke proyek. Cabang yang saya coba checkout tidak memilikinya, itu sebabnya git mengeluh tentang file yang tidak terlacak dan tidak ada solusi lain yang disarankan yang bekerja untuk saya. Saya memaksakan checkout ke cabang baru saya, dan menarik tuan.git checkout -f my_branch
git pull origin master
git submodule update --init
sumber
Dalam kasus saya
git rm --cached
tidak berhasil. Tapi saya mendapatkannya dengangit rebase
sumber
Saya juga menghadapi masalah serupa dan saya mencoba semua solusi yang diposting di atas tetapi tidak berhasil
Masalah ini disebabkan ketika saya berganti nama saya
onMusicUpdateListener.java
keOnMusicUpdateListener.java
dalamdevelop
cabang.Sekarang
master
memilikionMusicUpdateListener.java
dandevelop
memiliki file yang sama denganOnMusicUpdateListener.java
Sekarang setiap kali saya beralih ke master itu memberi saya kesalahan
dan kemudian
aborted
.Untuk mengatasi ini, saya dengan paksa
checked out
master
cabang dan kemudian berganti namaonMusicUpdateListener.java
menjadiOnMusicUpdateListener.java
,committed
dan kemudianmerged
dengandevelop
cabang.Kemudian saya memperbarui
develop
cabang sayamerging
menjadimaster
dan sekarang semuanya kembali normal dan masalah terpecahkan.sumber
Ini bisa menjadi masalah izin,
ubah kepemilikan,
sumber
2 file dengan nama yang sama tetapi kasus yang berbeda mungkin menjadi masalah.
Anda dapat menghapus satu di file-file ini atau mengganti namanya. Ex:
sumber
Pindahkan file, bukannya dihapus
Salah satu cara untuk menghindari penghapusan file adalah dengan memindahkannya. Sebagai contoh:
sumber
Jika Anda telah mengganti nama file secara lokal dan kemudian melakukan
pull
, itu akan menampilkan pesan kesalahan itu.sumber
itu mudah dipecahkan, git mengatakan bahwa Anda memiliki file yang sama di kedua cabang, oleh karena itu Anda harus menghapus file spesifik dari cabang master dan kemudian Anda akan dapat menggabungkan:
git menggabungkan "cabang Anda"
Saya harap ini berhasil untuk Anda, saya baru saja menyelesaikan kesalahan saya. kesalahan saya adalah:
galat: File pohon yang tidak terlacak berikut ini akan ditimpa oleh gabungan: .vs / slnx.sqlite Harap pindahkan atau hapus file-file tersebut sebelum Anda bergabung. Batalkan
Sekarang berhasil! Dalam kasus saya .vs / slnx.sqlite dibuat oleh visual studio, saya harus menutupnya sebelum menghapusnya.
sumber
Dalam kasus saya, saya melihat kesalahan ini karena saya menggunakan CMS open source yang populer dan direktori yang menyebabkan masalah adalah direktori unggahan yang ditulis oleh CMS.
Jadi apa yang dikatakannya adalah bahwa ada file yang tidak Anda miliki, tetapi Anda tidak bisa mendapatkannya dari versi.
Saya mengambil semua file dari situs langsung ke lokal saya, kemudian saya akan memeriksa ini ke dalam repo dengan harapan ini memperbaiki masalah.
sumber
Hapus file .gitignore dari appname / gen / untuk menyelesaikan masalah ini.
sumber
Saya hanya pergi ke sistem file dan menghapus file secara langsung, kemudian dilanjutkan dengan checkout git dan berhasil.
Saya pernah mengalami masalah ini beberapa kali dan mungkin terkait dengan pengembang yang menghapus, mendorong, menambah kembali, mendorong atau semacamnya.
sumber
Sebagian besar jawaban mempertimbangkan menghapus atau menghapus file, yang merupakan cara mudah. Tetapi kadang-kadang Anda tidak ingin menyingkirkan file lokal. Tapi bergabung dengan strategi, jadi git punya solusi untuk ini juga;
sumber
Hapus saja file atau ganti namanya.
misalnya
Saya harus mengganti nama / menghapus ajax / product.php dan ajax / produtPrice.php .
Jangan khawatir, git pull akan membawa mereka kembali. Saya menyarankan Anda untuk mengganti nama mereka alih-alih menghapus, karena Anda mungkin kehilangan beberapa perubahan.
Jika ini tidak membantu, maka Anda harus menghapus seluruh Cabang dan membuatnya lagi lalu lakukan
git pull origin remotebranch
sumber
Untuk menyimpan file yang dimodifikasi dan menggunakan konten yang dimodifikasi nanti. Saya menemukan kesalahan ini ketika saya mencoba memeriksa cabang dan ketika mencoba untuk rebase. Coba Git simpanan
git stash
sumber
Periksa apakah ada nama folder yang memiliki '/' atau simbol khusus lalu ganti nama folder itu. Kemudian Anda hanya mengkloning repositori ke lokasi lain.
sumber
Solusi sederhana mungkin: Pastikan Anda berada di direktori kerja yang benar di
GitBash
. Pesan itu muncul hampir setiap kali jika Pengguna mencoba untuk menggabungkan direktori terlalu tinggi dalam hierarki foldernya.Contoh:
Skenario: Pengguna mengkloning repo di
git-folder
ia membuat Proyek Java baru di Eclipse, mengimpor repo yang dikloning. Eclipse mengatur myProjectSourceFolder sebagai Folder Sumber di Proyek lokalnya. oleh karena itu Pengguna memasukkannya di git bash dan mendorong, menarik dan melakukan proyeknya dari sana. git karena itu syncmyProjectSourceFolder
- tetapi tidak memiliki catatan dalam riwayatnya untuk myBashSourceFolder. Oleh karena itu push / pull / merge dari myBashSourceFolder akan menghasilkan output yang diberikan, jika Pengguna mencoba untuk menyinkronkan dari sana waktu berikutnya, bukan folder yang dia kerjakan sebelumnya.sumber