git rebase: lỗi lỗi: không thể stat 'file': Quyền bị từ chối


342

Tôi đang sử dụng git và thực hiện một cam kết nhỏ theo sau là một cam kết lớn. Tôi quyết định sử dụng git rebaseđể ép hai cam kết lại với nhau trước khi đẩy chúng. (Tôi chưa bao giờ làm điều này trước đây.)

Tôi cũng vậy:

git rebase -i HEAD~2

Điều này đã cho tôi trình soạn thảo của mình, nơi tôi đã chọn để chọn cam kết trước đó và xóa sổ sau đó. Khi tôi lưu, git nói:

lỗi: không thể stat ' tên tệp ': Quyền bị từ chối

Không thể áp dụng sha1 cho lần xác nhận sau ... dòng văn bản ban đầu cho lần xác nhận đó

Hiện nay:

  • Không cam kết xuất hiện khi tôi làm git log.
  • git status nói với tôi rằng tôi "Hiện không ở bất kỳ chi nhánh nào."
  • Một tệp được liệt kê là đã sửa đổi và trong chỉ mục, và hai tệp được liệt kê là không bị theo dõi. Cam kết đầu tiên của tôi chỉ có một tệp (tôi nghĩ) và cam kết thứ hai của tôi có một tá tốt.

Chuyện gì đã xảy ra!? Làm thế nào để tôi sửa nó?


10
Bạn, tình cờ, sử dụng git trên windows?
CB Bailey

Đúng. Tôi chạy các lệnh trong một cửa sổ DOS.
Ryan Lundy

2
Bạn đang chạy một trình kiểm tra virus? Đôi khi các chương trình kiểm tra virus chất lượng kém gây ra các vấn đề như thế này.
Greg Hewgill

53
Tôi gặp vấn đề với kiểm tra git (vì vậy không thể hủy bỏ theo đề xuất của câu trả lời được chấp nhận) nhưng việc đóng tất cả các IDE của tôi cho phép tôi vượt qua. Câu trả lời thứ hai phải là một chấp nhận
plus-

1
@IanGrainger, câu trả lời bạn đang đề cập đã được đăng tám tháng sau khi câu trả lời được chấp nhận. Tôi có cần phải đến vòng và truy cập tất cả các câu hỏi của tôi vài tháng một lần để có khả năng thay đổi câu trả lời được chấp nhận trên tất cả chúng không? Các nút biểu quyết là có lý do. Nếu câu trả lời được đánh giá cao nhất giúp bạn nhiều hơn câu trả lời được chấp nhận, thì hãy sử dụng nó. Ai ngăn bạn lại? Nhưng tôi đã chấp nhận câu trả lời tôi đã làm vì nó giúp tôi và tôi là người đặt câu hỏi.
Ryan Lundy

Câu trả lời:


195

Tôi chỉ từng thấy lỗi này trên Windows và điều đó có nghĩa là một cái gì đó đã chặn git sửa đổi một tập tin tại thời điểm khi nó cố gắng áp dụng một bản vá.

Windows có xu hướng cung cấp cho các quy trình quyền truy cập độc quyền vào các tệp khi không thực sự cần thiết, trước đây, trình kiểm tra vi rút là một nguồn gây nghi ngờ nhưng tôi chưa bao giờ chứng minh điều này một cách thuyết phục.

Có lẽ điều dễ nhất để làm là hủy bỏ và thử lại, hy vọng điều đó không xảy ra vào lần tới.

git rebase --abort

Bạn có thể cố gắng sử dụng git applyvà kiến ​​thức về những gì git cam kết thực sự đã cố gắng thực hiện trước khi thực hiện git rebase --continuenhưng thực ra tôi không khuyến nghị điều này. Hầu hết những lần tôi thấy điều này đã cố gắng tốt hơn là có khả năng một cái gì đó vô tình bị bỏ lỡ hoặc gây rối.


6
@Kyralessa: Hmmm, bạn đã thử khởi động lại chưa? Nếu một cái gì đó liên tục khóa tập tin đó thì sau khi khởi động lại (hoặc một cái gì đó ít quyết liệt hơn để phát hành tập tin), bạn sẽ có thể git checkout -- previously-locked-filevà sao lưu và chạy.
CB Bailey

51
Chà, tôi vẫn không chắc chính xác chuyện gì đã xảy ra, nhưng tốt nhất tôi có thể nói, VS 2010 đã khóa tệp (lẻ vì đó là tệp tài liệu .xml). Process Explorer không tìm thấy bất cứ thứ gì khóa tập tin đó, nhưng sau khi tôi thoát khỏi VS, tôi đã có thể sử dụng git checkoutđể lấy lại tập tin (trong git statusđó đã bị xóa), và bây giờ mọi thứ đã trở lại như trước khi tôi cố gắng rebase / squash. Có lẽ tôi nên thử lại, mặc dù tôi cảm thấy hơi khó chịu vào thời điểm này.
Ryan Lundy

3
Theo dõi, nhiều mặt trăng sau: Tôi đã không gặp vấn đề này một lần nữa. Rebasing đã hoạt động tốt, bao gồm cả rebasing tương tác. Nó phải là một trục trặc khóa tập tin VS tạm thời.
Ryan Lundy

49
Đóng Visual Studio 2010 cũng sửa nó cho tôi
Trev

4
Atom rõ ràng cũng khóa các tập tin. Khởi động lại cố định nó.
Augustin Bralley

651

Hãy thử đóng bất kỳ chương trình nào có thư mục mở, chẳng hạn như trình soạn thảo, cửa sổ thám hiểm, lời nhắc lệnh và chương trình FTP. Điều này luôn khắc phục sự cố cho tôi trên Windows.


72
Tôi đã nhận được cùng một lỗi. Tôi chỉ đóng cửa phòng thu trực quan và mọi thứ làm việc.
jacobsimeon

6
Tôi đã đóng tất cả mọi thứ tôi có thể nghĩ ra trước khi tôi nhớ WinLess LESS -> bộ chuyển đổi CSS ẩn dưới nền.
Michael Martin-Smucker

6
Visual Studio đã tổ chức một khóa trên gói nuget khi tôi cố gắng hợp nhất. Đóng VS làm việc cho tôi.
CodeHxr

7
Nguồn phổ biến nhất của lỗi này, mà tôi đã thấy trên Windows, là Visual Studio đang khóa các tệp. Theo quy định, đóng VS trước khi chuyển đổi chi nhánh, sáp nhập, v.v.
longda

5
Câu trả lời "Tôi cũng vậy" cho Atom. Nó dường như để khóa các tập tin và thư mục; đóng nó khắc phục vấn đề.
ajm 21/07/2015

277

Chỉ cần đóng IDE của bạn (VISUAL STUDIO / ATOM, v.v.). Có thể đấy


1
Trong IntelliJ, việc dừng dịch vụ Tomcat đang hoạt động đối với tôi. Dễ dàng hơn một chút so với khởi động lại IDE.
Phil Carter

Tôi cũng đã mở một cửa sổ Git Bash - đóng cửa làm việc cho tôi.
Vince I

Bất kỳ IDE nào đáng giá, muối không nên khóa bất cứ thứ gì trong repo ... giơ ngón tay cái lên !!
LightCC

hoạt động trên vs code
Muhammed Moussa

Khắc phục sự cố này sau khi đăng ký vào một chi nhánh tạm thời bằng cách sử dụng Atom trên Windows 10. Đóng và mở lại Atom đã giải quyết vấn đề cho tôi.
mickburkejnr

24

Khi tôi thấy điều này trên máy của mình, nó còn tệ hơn cả một "quá trình nào đó mở tệp". Quyền sở hữu thực sự của tệp được kích hoạt đến mức tôi (chạy với tư cách quản trị viên) chỉ có thể truy cập tệp sau khi khởi động lại.

Gần nhất tôi có thể nói, IIS là một phần của vấn đề. Nếu tôi chuyển đổi giữa hai nhánh chính đòi hỏi nhiều tệp để sửa đổi, git sẽ xóa một tệp hoặc thư mục (thường là DLL) trong khi IIS đang cố gắng làm một cái gì đó hoặc cái khác với nó. Tại thời điểm này, quy trình IIS sẽ tự động ghi đè lên tệp trên đĩa với phiên bản bị khóa và dường như không thuộc sở hữu của ai.

Dừng IIS tại thời điểm này không làm điều đó. Tốt nhất tôi đã tìm ra để làm là khởi động lại và nhớ dừng IIS trước khi thay đổi trên các chi nhánh lớn trong tương lai.

Tôi biết điều đó không thực sự trả lời câu hỏi, nhưng có thể hữu ích cho người khác.


Xin chào, Mike ... chúng tôi đang gặp vấn đề chính xác như vậy, nhưng nó không rõ ràng. Chúng tôi đã sử dụng quy trình tương tự trên nhiều dự án với IIS đang chạy và không bao giờ gặp sự cố. Tuy nhiên, một ngày nọ, nó bắt đầu xảy ra ... khó hiểu và bực bội. Bạn đã học được nhiều hơn kể từ khi bạn viết này?
Ethan Brown

Cảm ơn vì cái nhìn sâu sắc Mike - trong trường hợp của tôi đã kiểm tra một nhánh cũ với dự án ASP.NET MVC có URL liên kết khác với nhánh trước đó khiến Visual Studio sau đó IIS giữ một khóa trên một số tệp trong dự án. Dừng apppool thích hợp trong IIS đã gỡ bỏ khóa.
gây quỹ

IIS cũng là thủ phạm đối với tôi; khi điều này bật lên nhanh chóng iisresetdường như giải phóng các khóa tập tin.
alexm

Tôi đã thấy rằng điều tương tự cũng xảy ra với OneDrive: chuyển đổi các nhánh trong một repo được lưu trữ trong OneDrive thực sự gây nhầm lẫn
CharlieB

Điều này cũng xảy ra với tôi trên win10, yêu cầu khởi động lại nhưng tôi đã không kiểm tra iisresetgiải pháp.
qdread

17

Trên Windows, nó có thể là một quá trình TortoiseGIT chặn các tệp đó. Mở trình quản lý tác vụ và kết thúc quá trình TGitCache.exe .


2
Rất tốt để biết, mặc dù trong trường hợp của tôi, tôi không sử dụng TortoiseGit; Tôi chỉ sử dụng dòng lệnh.
Ryan Lundy

13

Tôi chỉ vấp phải chuỗi câu trả lời này - lỗi này là lỗi không đúng. # Lỗi: không thể thống kê 'reddit / app / lượt xem / liên kết': Quyền bị từ chối

Đó là tất cả những gì tôi có - khi cố gắng hợp nhất. Tôi đã đọc một vài câu trả lời và sau đó nhận ra - tất cả những gì tôi phải làm là đóng trình soạn thảo mã của mình, đó là Atom.

Sau khi đóng trình chỉnh sửa - tôi chạy lại "git merge" và bùng nổ, nó hoạt động.

Thật là một lỗi vô nghĩa :(


Cảm ơn bạn! Không phải hàng ngày bạn sẽ thấy câu trả lời 'đúng' trong danh sách. Tôi đề nghị điều này để được đánh dấu câu trả lời đúng. Thay vì hủy bỏ hoạt động hiện tại, có ý nghĩa để giải quyết vấn đề thực sự.
Nikhil Kuriakose

12

nếu sử dụng vscode, hủy terminal và mở cái mới. khác có thể đóng thiết bị đầu cuối quá


Đây là nó, trông giống như một quá trình khóa hoặc một cái gì đó
Mike Upjohn

10

Điều này thỉnh thoảng xảy ra với tôi trong Windows

lỗi: không thể stat 'tên tệp': Quyền bị từ chối

Thông thường tôi có nhiều phiên bản bit bash mở và một trong các trường hợp git bash nằm trong một thư mục không tồn tại trong nhánh từ xa mà tôi lấy từ đó.

Đóng tất cả trừ một ví dụ của git bash giải quyết vấn đề cho tôi.


9

Nếu IDE bạn sử dụng (trong trường hợp bạn sử dụng IDE) có thể cũng đang cản trở bạn. Đó là những gì đã xảy ra với tôi khi sử dụng QtCreator.


Đây là trường hợp với tôi, sử dụng PhpStorm. Khởi động lại nó đã sửa lỗi.
lancemonotone

7

Sử dụng SourceTree trong Win 10, đã khắc phục sự cố bằng cách đóng trình soạn thảo Atom.

Lỗi sao chép:

  1. Trong nhánh B, tạo một tệp md, sử dụng Atom chỉnh sửa nó, lưu và cam kết.
  2. Chuyển sang nhánh A, kéo xuống các xác nhận mới từ máy chủ.
  3. Hãy thử Chuyển lại, Opps, nó báo lỗi lỗi: không thể stat 'file': Quyền bị từ chối.

6

Điều này cũng có thể xảy ra khi bạn đang sử dụng SublimeText và cửa sổ bật lên yêu cầu bạn mua chương trình chưa bị đóng.


1
Cũng đã nhận được nó với Atom chỉ bằng cách mở cây dự án / tệp
Hal

1
Giống như @Hal, vấn đề của tôi là với Atom. Đó là bởi vì một thư mục trong một chi nhánh không nằm trong một chi nhánh khác. Đóng Atom sẽ sửa nó, nhưng bạn cũng có thể thu gọn cây dự án (để ẩn thư mục) và điều đó cũng hoạt động.
jsalwen

6

Điều này thường xảy ra khi bạn có phần mềm / ứng dụng tiền xử lý đang xem dự án, chẳng hạn như Prepros hoặc Codekit. Ngoài ra, Atom và Sublime (và thậm chí Notepad ++) có thể khiến điều này xảy ra nếu một tệp trong dự án hiện đang được chỉnh sửa.

Cách dễ nhất xung quanh vấn đề là đóng bất cứ thứ gì có tệp dự án mở, hợp nhất các nhánh của bạn và sau đó mở lại chúng để làm mới nó. Điều này cũng sẽ tránh mọi vấn đề trong đó chương trình không còn nhận ra bất kỳ thay đổi nào đã xảy ra, buộc bạn phải làm mới (các) dự án bằng tay.


1
người đàn ông Tôi đã chạy elm-live trong nền. Điều này tiết kiệm cho tôi một tấn đau đầu.
frostymarvelous

6

Nếu bạn đang chạy webpack hãy tắt nó đi. Tắt IDE của bạn là tốt. Nên làm việc tốt sau khi làm những việc đó.


4

Tôi đã có một vấn đề tương tự. Nhưng nó rất đơn giản để giải quyết. Trên máy Windows, trình thám hiểm tệp của tôi có một thư mục mở tồn tại trong một nhánh nhưng không phải ở nhánh khác tôi đã kiểm tra. Đóng trình thám hiểm tệp đã giải quyết vấn đề.


4

Tôi vừa có cái này dưới Win 7.

$ git stash pop error: could stat 'ParentFolder / subfolder': Quyền bị từ chối lỗi: không thể stat 'ParentFolder / subfolder': Quyền bị từ chối

Chẩn đoán:

1> Tôi đã đi đến thư mục con và nó ở đó và tôi không thể xóa nó!

2> Sử dụng "process explorer" -> Tìm -> Tìm tay cầm và dll -> đặt tên "thư mục con" ở đó và tìm kiếm.

Kết quả: Hóa ra XMLSpy đã mở một trong những xml ở đó, đóng XML Spy và thử lại stash pop, nó hoạt động ngay bây giờ.


4

Đã xảy ra với tôi trên Windows trong khi nổi loạn bên trong thiết bị đầu cuối tích hợp IntelliJ . Tôi nhận thấy rằng tôi đã có Git bash phiên bản máy khách chạy song song.

Đóng Git bash đã giải quyết vấn đề.


2

Cuộc gặp gỡ của tôi với vấn đề này là do biên tập viên của tôi, Intellij. Là một phần của kiểm soát phiên bản nội bộ, nó đã trải qua và khóa tất cả các tệp git ẩn. (Vì nhiều lý do, tôi đã không sử dụng plugin git đi kèm với Intellij ...)

Vì vậy, tôi đã mở một cửa sổ dos bình thường với tư cách Quản trị viên, thay đổi thư mục và thực hiện

attrib -R /S

Điều đó đã loại bỏ khóa trên các tệp và mọi thứ hoạt động sau đó và tôi có thể đồng bộ hóa các thay đổi của mình bằng ứng dụng khách GitHub windows.


2

Tôi đồng ý với câu trả lời "Đóng Visual Studio" ở trên.

Tuy nhiên, một bước bổ sung mà tôi phải thực hiện ngay cả sau khi tôi đóng Visual Studio là giết thủ công quy trình Visual Studio "devenv.exe" trong Task Explorer. Sau khi tôi đã làm điều này, tôi có thể chạy lại trong gitbash:

kéo git

và lỗi "không thể thống kê tên tệp " biến mất. Có lẽ là do tiện ích mở rộng Visual Studio giữ cho quá trình mở lâu hơn ngay cả sau khi đóng.


2

Tôi vừa gặp vấn đề này. Vấn đề là - nếu bạn đã mở tệp, tệp đó đã bị xóa \ thay thế sau khi rebase (bạn có một nhánh không còn tệp này nữa), hệ thống git bị hỏng. Vì vậy, tôi đã đóng tất cả các tệp đã mở và sau đó thử kiểm tra trên một số chi nhánh khác


2

Một giải pháp thay thế thay vì đóng tất cả các ứng dụng có thể khóa thư mục như mọi câu trả lời khác cần làm, sẽ là sử dụng một tiện ích sẽ mở khóa các tệp / thư mục mà không đóng mọi thứ. (Tôi ghét phải khởi động lại Visual Studio)

LockHunter là ứng dụng tôi sử dụng: https://lockhunter.com/ Có khả năng những người khác cũng vậy, nhưng cái này đã làm việc rất tốt cho tôi.


1

Vấn đề tương tự trên Windows 10 64 Bit, chạy Git Bash phiên bản 2.9.0.windows1 Sử dụng Atom làm trình chỉnh sửa của tôi.

Điều này hiệu quả với tôi: Tôi đã thêm thư mục phần mềm Git (đối với tôi, đây là C: \ Program Files \ Git) vào các loại trừ cho Windows Defender.

Sau khi loại trừ được thêm vào, git checkout 'file'hoạt động tốt.


1

Lỗi này cũng có thể được gây ra bởi thực tế là các tệp vẫn bị "khóa" do các hành động git trước đó. Nó phải làm như thế nào với lớp hệ thống tập tin Windows hoạt động. Tôi đã từng đọc một lời giải thích tốt về điều này, nhưng tôi không thể nhớ nơi nào.

Tuy nhiên, trong trường hợp đó, vì về cơ bản là điều kiện cuộc đua, tất cả những gì bạn phải làm là tiếp tục quá trình rebase bị gián đoạn . Thật không may, điều này xảy ra với tôi mọi lúc, vì vậy tôi đã viết người trợ giúp nguy hiểm nhỏ này để tiếp tục cuộc nổi dậy của mình:

#!/bin/sh

set -e

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

Nếu bạn muốn chắc chắn hơn, bạn có thể sử dụng git rebase --edit-todođể kiểm tra xem lần cam kết tiếp theo được áp dụng có thực sự là lần thất bại được áp dụng trước đó hay không. Sử dụng git clean -dnđể đảm bảo bạn không xóa bất kỳ tập tin quan trọng nào.


1

Đã xảy ra với tôi khi ở trong windows, khi sử dụng photoshop: Khi tôi lưu một hình ảnh và sau đó chuyển sang một nhánh (để lại photoshop với hình ảnh được mở) tôi đã gặp lỗi git. Đóng hình ảnh trong photoshop và thử lại



1

Giết quá trình w3wp.exe liên quan đến kho lưu trữ đã sửa lỗi này cho tôi.


1

Trong trường hợp của tôi, tôi đã có một máy chủ phát triển webpack chạy phía sau.


0

Tôi đã gặp lỗi này khi VS1013 của tôi nằm trên nhánh nhắm mục tiêu 8.1 và tôi đang cố kiểm tra nhánh 8.0. Tôi cần phải quay lại VS và cho phép nó cập nhật. Sau đó tôi có thể kiểm tra chi nhánh 8.0 mà không gặp lỗi.


0

Tôi cũng đã sử dụng máy Windows bằng Git Shell khi gặp lỗi tương tự.

Tuy nhiên, tại thời điểm tôi có nhiều thiết bị đầu cuối Git mở.

Thiết bị đầu cuối đầu tiên nhận được lỗi bạn đã đăng ở trên và thiết bị đầu cuối khác trước đó đã chạy grunt serve lệnh thiết bị đầu cuối từ yeoman (được liên kết bên dưới). Thiết bị đầu cuối thứ hai cần thiết để vẫn mở để lưu trữ một cá thể máy chủ cục bộ.

Tắt tất cả các cửa sổ đầu cuối đang chạy các quy trình đang diễn ra có thể khiến lỗi không còn nữa.

Ít nhất đó là những gì làm việc cho tôi. Sau khi tôi tắt cửa sổ terminal thứ hai, tôi có thể dễ dàng kiểm tra các nhánh khác nhau và thao tác với các tệp.

Lệnh Grunt Serve - Yeoman.I / O
http://yeoman.io/learning/


0

Tôi chỉ gặp vấn đề này. Không có câu trả lời nào ở đây xảy ra để giải quyết điều này cho tôi.

Cuối cùng, tôi đã thêm các gói nuget vào một nhánh mà sau khi chuyển về nhánh chính, dường như không tồn tại. Khi tôi đã hợp nhất, nó sẽ báo newtonsoft ... xml không thể thống kê được. Tôi sẽ truy cập tệp được đề cập và mở nó nhưng Windows đã gửi lại lỗi nói rằng nó không thể tìm thấy tệp (mặc dù tôi đã nhìn đúng vào nó)

Làm thế nào tôi giải quyết điều này là nhấp chuột phải xóa tệp (đã hoạt động nhưng tôi không thể mở nó vì windows không thể tìm thấy nó ???) và cố gắng hợp nhất lại và nó đã giải quyết vấn đề.

Rất lạ.

Hy vọng điều này sẽ giúp ai đó sau này.


0

Tôi đã thoát khỏi trình soạn thảo văn bản của mình đang truy cập các thư mục dự án, sau đó thử sáp nhập vào nhánh chính và nó đã hoạt động.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.