git rebase: "kesalahan: tidak bisa membuat stat 'file': Izin ditolak"

342

Saya menggunakan git, dan membuat komit kecil diikuti oleh yang besar. Saya memutuskan untuk menggunakan git rebaseuntuk menekan kedua komit bersama sebelum mendorong mereka. (Aku belum pernah melakukan ini sebelumnya.)

Jadi saya melakukannya:

git rebase -i HEAD~2

Ini memberi saya editor saya, di mana saya memilih untuk memilih komit sebelumnya dan menghancurkan yang kemudian. Ketika saya menabung, git berkata:

kesalahan: tidak bisa stat ' nama file ': Izin ditolak

Tidak dapat menerapkan sha1 untuk commit selanjutnya ... baris teks awal untuk komit itu

Sekarang:

  • Komit tidak muncul saat saya melakukannya git log.
  • git status memberi tahu saya bahwa saya "Saat ini tidak di cabang mana pun."
  • Satu file terdaftar sebagai dimodifikasi dan dalam indeks, dan dua file terdaftar sebagai tidak terlacak. Komit pertama saya hanya memiliki satu file (saya pikir), dan komit kedua saya memiliki selusin yang baik.

Apa yang terjadi!? Bagaimana saya memperbaikinya?

Ryan Lundy
sumber
10
Apakah Anda, secara kebetulan, menggunakan git di windows?
CB Bailey
Iya. Saya menjalankan perintah di jendela DOS.
Ryan Lundy
2
Apakah Anda menjalankan pemeriksa virus? Terkadang program pemeriksa virus berkualitas buruk menyebabkan masalah seperti ini.
Greg Hewgill
53
Saya punya masalah dengan checkout git (jadi tidak ada abortus mungkin seperti yang disarankan oleh jawaban yang diterima) tetapi menutup semua IDE saya biarkan saya masuk. Jawaban kedua adalah jawaban yang diterima
plus-
1
@IanGrainger, jawaban yang Anda maksud telah diposting delapan bulan setelah jawaban yang diterima. Apakah saya perlu datang dan mengunjungi semua pertanyaan saya setiap beberapa bulan untuk berpotensi mengubah jawaban yang diterima pada mereka semua? Tombol voting ada karena suatu alasan. Jika jawaban yang paling banyak dipilih membantu Anda lebih dari jawaban yang diterima, maka gunakan itu. Siapa yang menghentikanmu? Tetapi saya menerima jawaban yang saya lakukan karena itu membantu saya, dan sayalah yang mengajukan pertanyaan.
Ryan Lundy

Jawaban:

195

Saya hanya pernah melihat kesalahan ini pada Windows dan apa yang tampaknya berarti adalah bahwa sesuatu memblokir git dari memodifikasi file pada saat itu ketika mencoba menerapkan patch.

Windows cenderung memberikan proses akses eksklusif ke file ketika seharusnya tidak benar-benar diperlukan, di masa lalu virus checker telah menjadi salah satu sumber kecurigaan tetapi saya tidak pernah membuktikan ini secara meyakinkan.

Mungkin hal termudah untuk dilakukan adalah membatalkan dan mencoba lagi, berharap itu tidak terjadi di lain waktu.

git rebase --abort

Anda dapat mencoba menggunakan git applydan pengetahuan tentang apa yang sebenarnya dilakukan komit git sebelum melakukan git rebase --continuetapi jujur ​​saja saya tidak akan merekomendasikan ini. Sebagian besar kali saya melihat ini mencoba, ada kesempatan yang lebih baik daripada bahkan bahwa ada sesuatu yang tidak sengaja terjawab atau kacau.

CB Bailey
sumber
6
@ Kyralessa: Hmmm, sudahkah Anda mencoba me-reboot? Jika ada sesuatu yang terus-menerus mengunci file itu kemudian setelah reboot (atau sesuatu yang sedikit kurang drastis yang melepaskan file) Anda harus dapat git checkout -- previously-locked-filedan kembali dan berjalan.
CB Bailey
51
Yah, saya masih tidak yakin persis apa yang terjadi, tetapi yang terbaik yang bisa saya katakan, VS 2010 mengunci file (aneh karena itu adalah file doc .xml). Process Explorer tidak menemukan apa pun yang mengunci file itu, tetapi setelah saya keluar dari VS, saya dapat menggunakan git checkoutuntuk mendapatkan file kembali (di git statusdalamnya telah dihapus), dan sekarang semuanya kembali seperti sebelum saya mencoba untuk rebase / squash. Mungkin saya harus mencoba lagi, walaupun saya merasa sedikit mual pada saat ini.
Ryan Lundy
3
Tindak lanjut, beberapa bulan kemudian: Saya tidak punya masalah ini lagi. Rebasing telah bekerja dengan baik, termasuk rebasing interaktif. Pasti kesalahan sementara penguncian file VS.
Ryan Lundy
49
Closing Visual Studio 2010 memperbaikinya juga untuk saya
Trev
4
Atom rupanya juga mengunci file. Restart memperbaikinya.
Augustin Bralley
652

Coba tutup semua program yang memiliki folder terbuka, seperti editor, windows explorer, prompt perintah, dan program FTP. Ini selalu memperbaiki masalah bagi saya di Windows.

Cameron Wright
sumber
72
Saya mendapatkan kesalahan yang sama. Saya baru saja menutup studio visual dan semuanya bekerja.
jacobsime
6
Saya menutup hampir semua yang dapat saya pikirkan sebelum saya ingat WinLess KURANG -> CSS converter bersembunyi di latar belakang.
Michael Martin-Smucker
6
Visual Studio memegang kunci pada paket nuget ketika saya mencoba untuk bergabung. Menutup VS bekerja untuk saya.
CodeHxr
7
Sumber paling umum dari kesalahan ini, yang pernah saya lihat di Windows, adalah Visual Studio mengunci file. Seperti yang ditentukan, tutup VS sebelum beralih cabang, penggabungan, dll.
longda
5
"Aku juga" menjawab untuk Atom. Tampaknya mengunci file dan direktori; menutupnya memperbaiki masalah.
ajm
277

Cukup tutup IDE Anda (VISUAL STUDIO / ATOM dll). Mungkin berhasil

ManJan
sumber
1
Di IntelliJ, menghentikan layanan Tomcat yang berjalan berhasil untuk saya. Sedikit lebih mudah daripada memulai ulang IDE.
Phil Carter
Saya juga membuka jendela Git Bash - penutup yang berfungsi untuk saya.
Vince I
Nilai IDE apa pun yang sesuai dengan garam tidak boleh mengunci apa pun dalam sebuah repo ... diacungi jempol !!
LightCC
bekerja pada kode vs
Muhammed Moussa
Pecahkan masalah ini setelah check in ke cabang sementara menggunakan Atom pada Windows 10. Menutup dan membuka kembali Atom telah menyelesaikan masalah untuk saya.
mickburkejnr
24

Ketika saya melihat ini di komputer saya, ini lebih buruk daripada hanya "beberapa proses membuka file". Kepemilikan sebenarnya dari file tersebut akan didongkrak ke titik di mana saya (berjalan sebagai administrator) hanya dapat mengaksesnya setelah reboot.

Paling dekat yang bisa saya katakan, IIS adalah bagian dari masalah. Jika saya beralih di antara dua cabang utama yang memerlukan banyak file untuk dimodifikasi, git akan menghapus file atau direktori (biasanya DLL) ketika IIS mencoba melakukan sesuatu atau yang lain dengannya. Pada titik ini, proses IIS secara otomatis menimpa file pada disk dengan versi yang terkunci dan tampaknya dimiliki oleh siapa pun.

Menghentikan IIS pada titik ini tidak berhasil. Yang terbaik yang saya temukan adalah melakukan reboot, dan ingat untuk menghentikan IIS sebelum berganti cabang besar di masa depan.

Saya tahu itu tidak benar-benar menjawab pertanyaan, tetapi mungkin bermanfaat bagi orang lain.

Mike Ruhlin
sumber
Hai, Mike ... kami mengalami masalah yang sama persis, tetapi tiba-tiba saja. Kami telah menggunakan proses yang sama pada banyak proyek dengan IIS berjalan, dan tidak pernah punya masalah. Namun, suatu hari, itu mulai terjadi ... membingungkan dan membuat frustrasi. Sudahkah Anda belajar lagi sejak menulis ini?
Ethan Brown
Terima kasih atas wawasannya Mike - dalam kasus saya memeriksa cabang lama dengan proyek ASP.NET MVC yang memiliki URL pengikatan yang berbeda dengan cabang sebelumnya yang menyebabkan Visual Studio, kemudian IIS menahan beberapa file dalam proyek tersebut. Menghentikan apppool yang sesuai di IIS melepas kunci.
fundead
IIS juga pelakunya; saat ini muncul quick iisresetsepertinya melepaskan kunci file.
alexm
Saya telah menemukan bahwa hal yang sama terjadi dengan OneDrive: berpindah cabang dalam repo yang disimpan di OneDrive benar-benar membingungkannya
CharlieB
Ini juga terjadi pada saya di win10, membutuhkan reboot tetapi saya tidak menguji iisresetsolusinya.
qdread
17

Di Windows, ini bisa menjadi proses TortoiseGIT yang memblokir file-file itu. Buka task manager dan akhiri proses TGitCache.exe .

romanlv
sumber
2
Baik untuk diketahui, meskipun dalam kasus saya saya tidak menggunakan TortoiseGit; Saya hanya menggunakan baris perintah.
Ryan Lundy
13

Saya baru saja menemukan utas jawaban ini - kesalahan ini adalah kesalahan Bogus. # Error: tidak dapat membuat stat 'reddit / app / views / links': Izin ditolak

Hanya itu yang saya dapatkan - ketika mencoba untuk bergabung. Saya membaca beberapa jawaban dan kemudian menyadari - yang harus saya lakukan adalah menutup editor kode saya yang kebetulan adalah Atom.

Setelah menutup editor - saya menjalankan "git merge" lagi dan boom, itu berhasil.

Apa kesalahan yang tidak ada gunanya :(

imbatman
sumber
Terima kasih! Tidak setiap hari Anda akan melihat jawaban 'benar' di daftar. Saya merekomendasikan ini untuk ditandai sebagai jawaban yang tepat. Daripada membatalkan operasi saat ini, masuk akal untuk menyelesaikan masalah yang sebenarnya.
Nikhil Kuriakose
12

jika menggunakan vscode, matikan terminal dan buka yang baru. lain mungkin tutup terminal juga

Muhammed Moussa
sumber
Ini dia, tampak seperti proses penguncian atau sesuatu
Mike Upjohn
10

Ini terjadi pada saya di Windows sesekali

kesalahan: tidak bisa stat 'nama file': Izin ditolak

Paling sering saya memiliki beberapa contoh bit bash terbuka, dan salah satu contoh git bash ada di direktori yang tidak ada di cabang jauh saya menarik dari.

Menutup semua kecuali satu contoh git bash memecahkan masalah bagi saya.

Ninja Crispy
sumber
9

Jika IDE yang Anda gunakan (kalau-kalau Anda menggunakannya) mungkin juga menghalangi. Itulah yang terjadi pada saya ketika menggunakan QtCreator.

rgngl
sumber
Inilah yang terjadi pada saya, menggunakan PhpStorm. Restart itu memperbaiki kesalahan.
lancemonotone
7

Menggunakan SourceTree di Win 10, perbaiki masalah dengan menutup Editor Atom.

Kesalahan mereproduksi:

  1. Di cabang B, buat file md, menggunakan Atom, edit, simpan, dan komit.
  2. Beralih ke cabang A, tarik komit baru dari server.
  3. Coba Beralih kembali, Opps, ia mengatakan "kesalahan: tidak bisa stat 'file': Izin ditolak".
Atolee
sumber
6

Ini juga dapat terjadi ketika Anda menggunakan SublimeText dan jendela sembulan yang meminta Anda untuk membeli program tidak ditutup.

ahnbizcad
sumber
1
Juga mendapatkannya dengan Atom hanya dengan memiliki proyek / file tree terbuka
Hal
1
Seperti @Hal, masalah saya dengan Atom. Itu karena folder di satu cabang tidak di cabang lain. Menutup Atom akan memperbaikinya, tetapi Anda juga dapat menutup pohon proyek (untuk menyembunyikan folder), dan itu juga berfungsi.
jsalwen
6

Ini sering terjadi ketika Anda memiliki perangkat lunak / aplikasi preprocessing menonton proyek, seperti Prepros atau Codekit. Juga, Atom dan Sublime (dan bahkan Notepad ++) dapat menyebabkan ini terjadi jika file dalam proyek saat ini sedang diedit.

Cara termudah untuk mengatasi masalah ini adalah dengan menutup apa pun yang memiliki file proyek terbuka, menggabungkan cabang Anda, dan kemudian buka kembali untuk menyegarkannya. Ini juga akan menghindari masalah di mana program tidak lagi menyadari perubahan yang telah terjadi, memaksa Anda untuk menyegarkan proyek dengan tangan.

Steven Ventimiglia
sumber
1
hai manusia! Saya menjalankan elm-live di latar belakang. Ini menyelamatkan saya dari sakit kepala.
dingin
6

Jika Anda menjalankan webpack matikan. Matikan IDE Anda juga. Seharusnya bekerja dengan baik setelah melakukan hal-hal itu.

KennethDale1
sumber
4

Saya punya masalah serupa. Tapi itu sangat sederhana untuk diselesaikan. Pada mesin Windows, file explorer saya memiliki folder terbuka yang ada di satu cabang tetapi tidak di yang lain saya check out. Menutup File explorer menyelesaikan masalah.

mmmdearte
sumber
4

Saya baru saja memilikinya di bawah Win 7.

$ git stash pop error: tidak bisa stat 'parentFolder / subfolder': Izin ditolak error: tidak bisa stat 'parentFolder / subfolder': Izin ditolak

Diagnosa:

1> Saya pergi ke subfolder dan ada di sana dan saya tidak bisa menghapusnya!

2> Gunakan "proses explorer" -> Temukan -> Temukan pegangan dan Dll -> letakkan nama "subfolder" di sana dan cari.

Hasil: Ternyata itu XMLSpy telah membuka salah satu xml di sana, tutup XML Spy dan coba simpanan pop lagi, itu berfungsi sekarang.

Gob00st
sumber
4

Terjadi pada saya di Windows saat rebasing di dalam terminal terintegrasi IntelliJ . Saya perhatikan bahwa saya memiliki Git bash menjalankan instance client secara paralel.

Clash Git bash menyelesaikan masalah.

Louis
sumber
2

Pertemuan saya dengan masalah ini disebabkan oleh editor saya, Intellij. Sebagai bagian dari kontrol versi internalnya, ia telah melalui dan mengunci semua file git yang tersembunyi. (Karena berbagai alasan, saya tidak menggunakan plugin git yang disertakan dengan Intellij ...)

Jadi saya membuka jendela dos normal sebagai Administrator, berubah ke direktori, dan dieksekusi

attrib -R /S

Itu menghapus kunci pada file dan semuanya bekerja setelah itu dan saya bisa menyinkronkan perubahan saya menggunakan klien windows GitHub.

Perry Tew
sumber
2

Saya setuju dengan jawaban "Tutup Visual Studio" di atas.

Namun, langkah tambahan yang harus saya lakukan bahkan setelah saya menutup Visual Studio adalah untuk secara manual membunuh proses "devenv.exe" Visual Studio di Task Explorer. Setelah saya melakukan ini, saya bisa kembali berlari di gitbash:

git pull

dan kesalahan " tidak bisa nama file stat " menghilang. Ini mungkin karena ekstensi Visual Studio menjaga proses terbuka lebih lama bahkan setelah penutupan.

ladygargar
sumber
2

Saya baru saja mengalami masalah ini. Masalahnya adalah - jika Anda telah membuka file, itu dihapus \ diganti setelah rebase (Anda memiliki cabang yang tidak memiliki file ini lagi), sistem-git rusak. Jadi saya menutup semua file yang dibuka dan kemudian mencoba untuk checkout di beberapa cabang lainnya

BlondinkaBrain
sumber
2

Solusi alternatif daripada menutup semua aplikasi yang mungkin mengunci direktori seperti yang hampir setiap jawaban lain katakan, adalah menggunakan utilitas yang akan membuka kunci file / direktori tanpa menutup semuanya. (Aku benci harus me-restart Visual Studio)

LockHunter adalah yang saya gunakan: https://lockhunter.com/ Kemungkinan ada orang lain di luar sana, tetapi yang ini bekerja sangat baik untuk saya.

HotN
sumber
1

Masalah yang sama pada Windows 10 64 Bit, menjalankan Git Bash versi 2.9.0.windows1 Menggunakan Atom sebagai editor saya.

Ini bekerja untuk saya: Saya menambahkan folder perangkat lunak Git (bagi saya, ini adalah C: \ Program Files \ Git) ke pengecualian untuk Windows Defender.

Setelah pengecualian ditambahkan, git checkout 'file'berfungsi dengan baik.

Paul Spaven
sumber
1

Kesalahan ini juga dapat disebabkan oleh fakta bahwa file masih "terkunci" karena tindakan git sebelumnya. Ini berkaitan dengan cara kerja lapisan sistem berkas Windows. Saya pernah membaca penjelasan yang bagus tentang ini, tetapi saya tidak ingat di mana.

Namun dalam hal itu, karena ini pada dasarnya adalah kondisi balapan, yang harus Anda lakukan adalah melanjutkan proses rebase yang terputus . Sayangnya ini terjadi pada saya sepanjang waktu, jadi saya menulis pembantu kecil yang berbahaya ini untuk membuat rebases saya terus:

#!/bin/sh

set -e

git checkout .
git clean -df
git rebase --continue

Jika Anda ingin lebih yakin, Anda bisa menggunakannya git rebase --edit-todo untuk memeriksa apakah komit berikutnya untuk diterapkan adalah benar-benar yang gagal diterapkan sebelumnya. Gunakan git clean -dnuntuk memastikan Anda tidak menghapus file penting apa pun.

raphinesse
sumber
1

Terjadi pada saya ketika di windows, saat menggunakan photoshop: Ketika saya menyimpan gambar dan kemudian beralih ke cabang (meninggalkan photoshop dengan gambar dibuka) saya mendapat kesalahan git. Tutup gambar di photoshop dan coba lagi

pscheit
sumber
1

Membunuh proses w3wp.exe terkait dengan repositori memperbaiki ini untuk saya.

Ric
sumber
1

Dalam kasus saya, saya memiliki server dev webpack berjalan di belakang.

Charith
sumber
0

Saya mendapatkan kesalahan ini ketika VS1013 saya berada di cabang yang menargetkan 8.1 dan saya mencoba untuk checkout cabang 8.0. Saya perlu mengetuk kembali ke VS dan mengizinkannya untuk UpdateAll. Lalu saya bisa checkout cabang 8.0 tanpa kesalahan.

Aleksandr Gembinski
sumber
0

Saya juga menggunakan mesin Windows menggunakan Git Shell ketika saya mengalami kesalahan yang sama.

Namun, pada saat itu saya memiliki beberapa terminal Git terbuka.

Terminal pertama menerima kesalahan yang Anda posting di atas dan terminal lain sebelumnya menjalankan grunt serve perintah terminal dari yeoman (ditautkan di bawah). Terminal kedua harus tetap terbuka untuk menjadi tuan rumah instance server lokal.

Mematikan semua jendela terminal yang menjalankan proses yang sedang berlangsung dapat menyebabkan kesalahan hilang.

Setidaknya itulah yang berhasil bagi saya. Setelah saya menutup jendela terminal kedua, saya dapat dengan mudah memeriksa berbagai cabang dan memanipulasi file.

Grunt Serve Command - Yeoman.I / O
http://yeoman.io/learning/

Lusuh
sumber
0

Saya baru saja mengalami masalah ini. Tidak ada jawaban di sini yang terjadi untuk menyelesaikan ini untuk saya.

Akhirnya menjadi paket nuget yang saya tambahkan di cabang yang, setelah beralih kembali ke cabang master, sepertinya tidak ada. Setelah saya melakukan penggabungan itu akan mengatakan newtonsoft ... xml tidak bisa stat. Saya akan pergi ke file yang dimaksud dan membukanya tetapi Windows melemparkan kesalahan kembali mengatakan tidak dapat menemukan file (meskipun saya sedang melihat langsung ke sana)

Bagaimana saya menyelesaikan ini adalah klik kanan hapus file (yang berfungsi tetapi saya tidak bisa membukanya karena windows tidak dapat menemukannya ???) dan mencoba untuk bergabung lagi dan itu memecahkan masalah.

Sangat aneh.

Semoga ini bisa membantu seseorang nanti.

TheNoob
sumber
0

Saya keluar dari editor teks saya yang sedang mengakses direktori proyek, kemudian mencoba menggabungkan ke cabang master dan itu berhasil.

PudparK
sumber