Những thay đổi chưa được thực hiện còn lại sau khi thiết lập lại git - có


275

Sau đó git reset --hard, git statusđưa cho tôi các tập tin trong Changes not staged for commit:phần.

Tôi cũng đã thử git reset ., git checkout -- .git checkout-index -f -a, vô ích.

Vì vậy, làm thế nào tôi có thể thoát khỏi những thay đổi không có căn cứ?

Điều này dường như chỉ đạt các tập tin dự án Visual Studio. Kỳ dị. Xem dán này: http://pastebin.com/eFZwPn9Z . Điều đặc biệt với các tệp đó là trong .gitattribut tôi có:

*.sln        eol=crlf
*.vcproj     eol=crlf
*.vcxproj*   eol=crlf

Ngoài ra, autocrlfđược đặt thành false trong toàn cầu của tôi .gitconfig. Điều đó có thể có liên quan?


Bạn đã áp dụng các lệnh đó từ thư mục gốc của kho lưu trữ chưa? Thông báo .là viết tắt của thư mục hiện tại không phải thư mục gốc
Alexander

1
Tôi đã làm chúng từ kho lưu trữ gốc thực sự.
Norswap

gitPhiên bản của bạn là gì? Hoặc bạn đang mắc một lỗi ngớ ngẩn hoặc bạn có một phiên bản cũ bị lỗi?
Shahbaz

Đó là git 1.7.4 msysgit. Nó có thể là một sai lầm, nhưng các lệnh có vẻ đủ đơn giản và tôi không thể phát hiện ra một lỗi.
Norswap

Để ghi lại, tôi đã thử sử dụng phiên bản mới nhất của msysgit (1.7.11), nhưng vấn đề vẫn tồn tại.
Norswap

Câu trả lời:


361

Tôi đã có cùng một vấn đề và nó có liên quan đến .gitattributestập tin. Tuy nhiên, loại tệp gây ra sự cố không được chỉ định trong .gitattributes.

Tôi đã có thể giải quyết vấn đề bằng cách chạy

git rm .gitattributes
git add -A
git reset --hard

7
Đó là lệnh * text = auto trong tệp gitattribut. Nó tự động thay đổi kết thúc tập tin, vì vậy các tập tin sẽ tự động được đánh dấu là "sửa đổi" khi bạn kiểm tra trạng thái.
Cody Django

3
Điều này hoạt động, nhưng tôi không hiểu chính xác tại sao. Bất cứ ai quan tâm để giải thích từng lệnh?
Edwin Stoteler 20/03/2015

18
@NLwino, git rm .gitattributesxóa .gitattribut khỏi chỉ mục. git add -Athêm tất cả (bao gồm cả việc loại bỏ các .gitattributes) để chỉ số, mà nên sau đó chỉ là việc loại bỏ .gitattributes, nếu đó thực sự là vấn đề. git reset --hardĐặt lại tất cả các thay đổi không được cam kết, trong đó bao gồm việc loại bỏ .gitattribut. Về cơ bản, điều này bỏ qua .gitattribut (và * text=autochỉ thị) cho một cam kết bằng cách xóa nó, sau đó đặt lại chỉ mục trong khi nó bị xóa, do đó đặt lại, nhưng sau khi bạn đã đặt lại các tệp khác, vì vậy chúng không được sửa đổi lại.
đám mây

4
@GameScripting, Giải pháp này không hiệu quả với tôi. Không có tệp nào như .gitattributes: "fatal: pathspec '.gitattribut' không khớp với bất kỳ tệp nào"
Pacerier

4
Tôi làm như vậy và nó nói fatal: pathspec '.gitattributes' did not match any files . Tôi đang làm gì sai?
Mật ong

136

GIẢI QUYẾT !!!

Tôi đã giải quyết vấn đề này bằng các bước sau

1) Xóa mọi tệp khỏi chỉ mục của Git.

git rm --cached -r .

2) Viết lại chỉ mục Git để chọn tất cả các kết thúc dòng mới.

git reset --hard

Giải pháp là một phần của các bước được mô tả trên trang web git https://help.github.com/articles/deals-with-line-endings/


5
CÔNG TRÌNH NÀY khi không có gì khác làm! Chúng tôi đã thử mọi thứ trong vấn đề này và nhiều chủ đề khác - đó là một nhóm phát triển lớn nên việc đưa mọi người vào cùng một crlf là một cơn ác mộng, nhưng điều này giải quyết được vấn đề.
tkersh

Thú vị ... Tôi đã từng "git rm --chached <one_specific_file>, thay vì xóa tất cả mọi thứ. 'Status git' báo cáo tập tin đó như bị xóa và được theo dõi. Sau đó, 'thiết lập lại git --hard' sửa chữa tập tin đó tất cả các file khác đã được báo cáo là "Thay đổi không dàn dựng" (Trước khi sử dụng git rm, tôi chăm chỉ cố gắng thiết lập lại khó có thể không có tác dụng) tôi yêu các hệ thống kiểm soát nguồn bí ẩn như vậy...
joeking

Bạn biết đấy, nó xóa tất cả bộ nhớ cache của bạn. Trong các dự án lớn, nó có thể lãng phí rất nhiều thời gian.
Ohar

Đó là tàn bạo. Bạn có thể đã làm điều tương tự bằng cách xóa thư mục repo và sao chép lại.
ingyhere

4
Hãy xem xét rằng bạn đang ở trên Windows và nó không phân biệt chữ hoa chữ thường. Nếu bạn cũng đang làm việc với các nhà phát triển trên các hệ thống tệp phân biệt chữ hoa chữ thường, như Mac hoặc Linux, họ có thể đang thực hiện các thẻ, nhánh hoặc thậm chí các tệp trong các trường hợp khác nhau. Trong tình huống đó, chỉ mục của bạn sẽ hiển thị các tệp hiện có được ghi đè bởi HĐH khi nó kéo. Cách duy nhất để khắc phục điều đó là đưa ra chính sách đặt tên trên máy chủ Git của bạn (hook) hoặc phát hiện lỗi trước.
ingyhere

97

Git sẽ không thiết lập lại các tập tin không có trên kho lưu trữ. Vì vậy, bạn có thể:

$ git add .
$ git reset --hard

Điều này sẽ tạo ra tất cả các thay đổi, điều này sẽ khiến Git nhận thức được các tệp đó và sau đó đặt lại chúng.

Nếu điều này không hiệu quả, bạn có thể cố gắng bỏ và bỏ các thay đổi của mình:

$ git stash
$ git stash drop

4
Các tập tin đã được theo dõi. Đã thử nó và nó cũng không hoạt động. Phải có điều gì đó thực sự sai với repo của tôi, nhưng tôi không có manh mối gì. Đối với git stash thingy, xem câu trả lời của tôi cho Shahbaz.
Norswap

Điều gì đang xảy ra khi bạn làm một trạng thái git?
YuriAlbu Stew

1
Tôi nghĩ về một giải pháp. Thực hiện một cam kết và một rebase tương tác để xóa cam kết đó.
YuriAlbu Stew

Tôi đã thử điều đó tại một thời điểm, và nó đã hoạt động, khó khăn, sau đó tôi đã thử lại lần nữa và đưa ra kết quả đáng ngạc nhiên được nêu trong phần chỉnh sửa câu trả lời của tôi.
Norswap

@YuriAlbu Stew, Git không hiểu rõ về Pola . Không phải toàn bộ mục git reset --hardđích " thiết lập lại cả khu vực tổ chức và thư mục làm việc để khớp " sao? Nếu một tập tin không được dàn dựng, rõ ràng chúng tôi muốn xóa nó khi chúng tôi làm reset --hard.
Pacerier

71

Nếu bạn sử dụng Git cho Windows, đây có thể là vấn đề của bạn

Tôi đã có cùng một vấn đề và stash, thiết lập lại cứng, làm sạch hoặc thậm chí tất cả trong số họ vẫn còn để lại những thay đổi phía sau. Vấn đề hóa ra là chế độ tập tin x không được git đặt đúng. Đây là một "vấn đề đã biết" với git cho windows. Các thay đổi cục bộ hiển thị ở trạng thái gitk và git là chế độ cũ 100755 chế độ mới 100644, không có bất kỳ sự khác biệt nào về tệp thực tế.

Cách khắc phục là bỏ qua chế độ tập tin:

git config core.filemode false

Thêm thông tin ở đây


2
Điều này làm việc ngay cả khi rm -rf *; git checkout HEAD .không. Phù!
đàn

Làm việc cho tôi, trong khi stash drop / hard reset / rm .attribution đều thất bại.
kakyo

Điều này cũng hiệu quả với tôi khi tôi gặp vấn đề khi làm việc với git repo trong Linux được lưu trữ trên máy Mac
prmph

làm việc cho tôi - đã thử mọi thứ khác và vâng, chế độ cũ và chế độ mới là vấn đề (nhận thấy tôi có một số khác nhưng các tệp giống nhau)
Taehoon A Kim

Cuộc sống và tiết kiệm thời gian.
Yogesh Patil

31

Được rồi, tôi đã giải quyết vấn đề.

Có vẻ như các .gitattributestập tin, có chứa:

*.sln        eol=crlf
*.vcproj     eol=crlf
*.vcxproj*   eol=crlf

làm cho các tập tin dự án xuất hiện không được tổ chức. Tôi không biết tại sao lại như vậy, và tôi thực sự hy vọng rằng ai đó biết cách sử dụng git sẽ cho chúng tôi một lời giải thích hay.

Cách khắc phục của tôi là xóa các tệp này và thêm vào autocrlf = falsebên dưới .[core].git/config

Điều này không hoàn toàn giống với cấu hình trước đó, vì nó yêu cầu mọi nhà phát triển phải có autocrlf = false. Tôi muốn tìm một sửa chữa tốt hơn.

BIÊN TẬP:

Tôi đã nhận xét các dòng liên quan, không ghi chú chúng và nó đã làm việc. Cái gì ... tôi thậm chí không ...!


1
Tôi chỉ có vấn đề chính xác tương tự xảy ra và đây là giải pháp duy nhất có hiệu quả. Trong trường hợp của tôi, tôi đã chuyển từ một nhánh tính năng sang chủ của mình và lấy một số thay đổi mới từ thượng nguồn và nó chỉ bắt đầu xảy ra đối với 2 tệp đã được sửa đổi. Có vẻ như các tệp có thể đã được chuyển từ Unix sang Windows kết thúc dòng có thể có liên quan đến nó. Không chắc làm thế nào hoặc tại sao mặc dù.
Steven Surowiec

+1 Vấn đề tương tự trên Windows Git. Đã có autocrlf = false. Tôi đã hợp nhất các thay đổi từ svn repo ( git svn fetch/ git merge git-svn) ngược dòng và được để lại với 1 tệp được đánh dấu là đã sửa đổi. Điều kỳ lạ là tôi đã gặp vấn đề này trước đây và tất cả những gì tôi cần làm là kiểm tra một chi nhánh khác (với -fcờ), và sau đó chuyển lại. Tôi đã làm điều đó và nó đã hoạt động, nhưng khi tôi chuyển sang một nhánh tính năng, "thay đổi" đã trở lại! Chỉnh sửa của bạn ở dưới cùng của câu trả lời là giải pháp. Trong trường hợp của tôi, tôi đã nhận xét / không ghi chú một dòng ở đầu tệp .gitattribut của tôi:* text=auto !eol
Aaron Blenkush

1
EDIT đó cũng có tác dụng với tôi: bình luận các dòng trong .gitattributes, chạy git status, bỏ ghi chú các dòng trong .gitattributes, chạy git statuslại
Ignitor

Điều này là do git đang đặt lại các tệp đó, sau đó áp dụng các kết thúc dòng được chỉ định trong .gitattributesmột lần nữa. Có git difflẽ cho thấy bức tường màu đỏ / bức tường màu xanh lá cây nổi tiếng là điển hình của sự khác biệt kết thúc dòng.
Dagroom

21

Nguyên nhân có thể # 1 - Chuẩn hóa kết thúc dòng

Một tình huống có thể xảy ra là khi tệp được đề cập đã được kiểm tra vào kho lưu trữ mà không có cấu hình chính xác cho các kết thúc dòng (1) dẫn đến một tệp trong kho lưu trữ có đầu cuối dòng không chính xác hoặc kết thúc dòng hỗn hợp. Để xác nhận, xác minh rằng git diffchỉ hiển thị các thay đổi trong kết thúc dòng (theo mặc định có thể không hiển thị các thay đổi này, hãy thử git diff | cat -vxem trả về vận chuyển dưới dạng ^Mký tự bằng chữ ).

Sau đó, ai đó có thể đã thêm .gitattributeshoặc sửa đổi core.autocrlfcài đặt để bình thường hóa kết thúc dòng (2). Dựa trên .gitattributescấu hình toàn cầu hoặc toàn cầu, Git đã áp dụng các thay đổi cục bộ cho bản sao làm việc của bạn áp dụng chuẩn hóa kết thúc dòng được yêu cầu. Thật không may, vì một số lý do git reset --hardkhông hoàn tác những thay đổi chuẩn hóa dòng này.

Giải pháp

Cách giải quyết trong đó các kết thúc dòng cục bộ được đặt lại sẽ không giải quyết được vấn đề. Mỗi khi tập tin được "nhìn thấy" bởi git, nó sẽ thử và áp dụng lại chuẩn hóa, dẫn đến cùng một vấn đề.

Tùy chọn tốt nhất là để git áp dụng chuẩn hóa mà nó muốn bằng cách chuẩn hóa tất cả các kết thúc dòng trong repo để khớp với .gitattributes và thực hiện các thay đổi đó - xem Cố gắng sửa các kết thúc dòng bằng nhánh lọc git, nhưng không gặp may .

Nếu bạn thực sự muốn thử và hoàn nguyên các thay đổi cho tệp theo cách thủ công thì giải pháp đơn giản nhất dường như là xóa các tệp đã sửa đổi, và sau đó nói với git để khôi phục chúng, mặc dù tôi lưu ý rằng giải pháp này dường như không hoạt động ổn định 100% thời gian ( CẢNH BÁO: KHÔNG chạy cái này nếu các tệp đã sửa đổi của bạn có các thay đổi khác với kết thúc dòng !!):

    git status --porcelain | grep "^ M" | cut -c4- | xargs rm
    git checkout -- .

Lưu ý rằng, trừ khi bạn bình thường hóa các kết thúc dòng trong kho lưu trữ tại một số điểm, bạn sẽ tiếp tục gặp phải vấn đề này.

Nguyên nhân có thể # 2 - Trường hợp không nhạy cảm

Nguyên nhân thứ hai có thể là sự không nhạy cảm trường hợp trên Windows hoặc Mac OS / X. Ví dụ: giả sử một đường dẫn như sau tồn tại trong kho lưu trữ:

/foo/bar

Bây giờ ai đó trên Linux cam kết các tệp vào /foo/Bar(có thể là do công cụ xây dựng hoặc thứ gì đó đã tạo thư mục đó) và đẩy. Trên Linux, đây thực sự là hai thư mục riêng biệt:

/foo/bar/fileA
/foo/Bar/fileA

Kiểm tra repo này ra trên Windows hoặc Mac có thể dẫn đến biến đổi fileAmà không thể được đặt lại, vì trên mỗi thiết lập lại, git trên Windows để kiểm tra /foo/bar/fileA, và sau đó vì Windows là trường hợp nhạy cảm, ghi đè nội dung của fileAvới/foo/Bar/fileA , kết quả là họ bị "biến dạng".

Một trường hợp khác có thể là (các) tệp riêng lẻ tồn tại trong repo, khi được kiểm tra trên một hệ thống tệp không nhạy cảm trường hợp, sẽ chồng lấp. Ví dụ:

/foo/bar/fileA
/foo/bar/filea

Có thể có những tình huống tương tự khác có thể gây ra vấn đề như vậy.

git về trường hợp hệ thống tập tin không nhạy cảm thực sự sẽ phát hiện tình huống này và hiển thị một thông báo cảnh báo hữu ích, nhưng hiện tại thì không (điều này có thể thay đổi trong tương lai - xem cuộc thảo luận này và các bản vá được đề xuất có liên quan trên danh sách gửi thư của git.git).

Giải pháp

Giải pháp là đưa trường hợp của các tệp trong chỉ mục git và trường hợp trên hệ thống tệp Windows vào căn chỉnh. Điều này có thể được thực hiện trên Linux, nó sẽ hiển thị trạng thái thực sự của mọi thứ, HOẶC trên Windows với tiện ích nguồn mở rất hữu ích Git-Unite . Git-Unite sẽ áp dụng các thay đổi trường hợp cần thiết cho chỉ số git, sau đó có thể được cam kết với repo.

(1) Đây là khả năng nhất bởi người sử dụng Windows, mà không cần bất kỳ .gitattributesđịnh nghĩa cho các tập tin trong câu hỏi, và sử dụng các thiết lập mặc định toàn cầu cho core.autocrlfđó làfalse (xem (2)).

(2) http://adaptivepatchwork.com/2012/03/01/mind-the-end-of-your-line/


Con trai chết tiệt, đã đi tất cả các cách này. Tôi đã phải cam kết sau dòng đầu tiên nhưng cuối cùng tôi đã có thể kiểm tra tổng thể. Điều đó không vui chút nào.
Tim Lieberman

16

Nếu các câu trả lời khác không hoạt động, hãy thử thêm các tệp, sau đó đặt lại

$ git add -A
$ git reset --hard

Trong trường hợp của tôi, điều này có ích khi có một loạt các tệp trống mà git đang theo dõi.


Những công việc này. Tôi chỉ sử dụng $ git add .thay vì$ git add -A
Bjarne Gerhardt-Pedersen

8

Một nguyên nhân khác cho điều này có thể là hệ thống tệp không phân biệt chữ hoa chữ thường . Nếu bạn có nhiều thư mục trong repo của mình ở cùng cấp có tên chỉ khác nhau tùy theo từng trường hợp, bạn sẽ bị ảnh hưởng bởi điều này. Duyệt kho lưu trữ nguồn bằng giao diện web của nó (ví dụ: GitHub hoặc VSTS) để đảm bảo.

Để biết thêm thông tin: https://stackoverflow.com/a/2016426/67824


Để tìm tên của các tệp như vậy chạygit ls-tree -r --name-only HEAD | tr A-Z a-z | sort | uniq -d
Diomidis Spinellis


5

Không có phương pháp nào trong số này làm việc cho tôi, giải pháp duy nhất là nuke toàn bộ repo và sao chép lại nó. Điều này bao gồm stashing, đặt lại, thêm rồi đặt lại, cài đặt clrf, độ nhạy trường hợp, vv Thở dài ..


Cập nhật, hóa ra hệ thống tập tin nhạy cảm trường hợp gắn kết của tôi không thực sự nhạy cảm trường hợp. Sau khi tôi khắc phục sự cố này có thể khắc phục bằng các kỹ thuật được đề cập ở trên.
John Hunt

4

Chạy lệnh sạch :

# Remove all untracked files and directories. (`-f` is `force`, `-d` is `remove directories`)

git clean -fd

3
Thật không may, điều này không giải quyết các vấn đề liên quan đến kết thúc dòng.
Christopher Schneider

Đây chỉ là điều giải quyết vấn đề của tôi, bất kể vấn đề của tôi là gì. Tôi không có .gitattributeskết thúc tập tin và dòng nào không phải là vấn đề vì tôi đang ở trong hộp linux và tất cả các nhà phát triển và máy chủ của chúng tôi đều là linux.
Samuel Neff

4

Kiểm tra của bạn .gitattributes.

Trong trường hợp của tôi, tôi có *.js text eol=lftrong đó và tùy chọn git core.autocrlftrue.

Nó đưa tôi đến tình huống khi git tự động chuyển đổi các kết thúc dòng tệp của tôi và ngăn tôi sửa nó và thậm chí git reset --hard HEADkhông làm gì cả.

Tôi sửa nó bằng nhận xét *.js text eol=lftrong tôi .gitattributesvà không chú ý đến nó sau nó.

Hình như nó chỉ là ma thuật.


Đây là nó cho tôi, nâng cấp dự án của tôi giới thiệu *.bat text eol=crlfcho dự án của tôi.
Leo

1

Tôi gặp phải một vấn đề tương tự cũng liên quan .gitattributes, nhưng đối với trường hợp của tôi liên quan đến LFS của GitHub. Mặc dù điều này không chính xác là kịch bản của OP, tôi nghĩ rằng nó cung cấp một cơ hội để minh họa những gì .gitattributestập tin làm và tại sao nó có thể dẫn đến những thay đổi không được thể hiện dưới dạng khác biệt "ảo".

Trong trường hợp của tôi, một tệp đã có trong kho lưu trữ của tôi, giống như từ đầu thời gian. Trong một cam kết gần đây, tôi đã thêm một git-lfs trackquy tắc mới bằng cách sử dụng một mẫu có tầm nhìn hơi rộng, và cuối cùng phù hợp với tệp cổ này. Tôi biết tôi đã không muốn thay đổi tập tin này; Tôi biết rằng tôi đã không thay đổi tập tin, nhưng bây giờ nó là trong những thay đổi chưa được thực hiện của tôi và không có số lượng kiểm tra hoặc thiết lập lại cứng trên tập tin đó sẽ sửa nó. Tại sao?

Tiện ích mở rộng GitHub LFS hoạt động chủ yếu thông qua việc tận dụng các hook gitcung cấp quyền truy cập thông qua .gitattributestệp. Nói chung, các mục trong .gitattributeschỉ định cách xử lý tệp phù hợp. Trong trường hợp của OP, nó liên quan đến việc bình thường hóa kết thúc dòng; trong tôi, đó là liệu có để LFS xử lý việc lưu trữ tệp hay không. Trong cả hai trường hợp, tệp thực sự gitnhìn thấy khi tính toán a git diffkhông khớp với tệp mà bạn thấy khi bạn kiểm tra tệp. Do đó, nếu bạn thay đổi cách xử lý tệp thông qua .gitattributesmẫu phù hợp với nó, nó sẽ hiển thị dưới dạng các thay đổi chưa được xử lý trong báo cáo trạng thái, ngay cả khi thực sự không có thay đổi trong tệp.

Tất cả những gì đã nói, "câu trả lời" của tôi cho câu hỏi là nếu thay đổi trong .gitattributestệp là điều bạn muốn làm, bạn thực sự chỉ nên thêm các thay đổi và tiếp tục. Nếu không, sau đó sửa đổi .gitattributesđể thể hiện tốt hơn những gì bạn muốn làm.

Người giới thiệu

  1. Đặc tả GitHub LFS - Mô tả tuyệt vời về cách họ móc vào cleansmudgegọi hàm để thay thế tệp của bạn trong các gitđối tượng bằng tệp văn bản đơn giản bằng hàm băm.

  2. Tài liệu gitattribut - Tất cả các chi tiết về những gì có sẵn để tùy chỉnh cách gitxử lý tài liệu của bạn.


0

Tôi đã từng gặp vấn đề tương tự. Tôi đã làm git reset --hard HEADnhưng vẫn mỗi lần tôi làm git statuslà tôi thấy một số tệp được sửa đổi.

Giải pháp của tôi tương đối đơn giản. Tôi vừa đóng IDE của mình (ở đây là Xcode) và đóng dòng lệnh của tôi (ở đây là terminal trên Mac OS của tôi) và thử lại và nó đã hoạt động.

Tuy nhiên, tôi không bao giờ có thể tìm thấy những gì bắt nguồn từ vấn đề.


0

Tôi tin rằng có một vấn đề với git cho Windows khi git viết ngẫu nhiên các kết thúc dòng sai khi thanh toán và cách giải quyết duy nhất là kiểm tra một số chi nhánh khác và buộc git bỏ qua các thay đổi. Sau đó kiểm tra chi nhánh bạn thực sự muốn làm việc.

git checkout master -f
git checkout <your branch>

Xin lưu ý rằng điều này sẽ loại bỏ bất kỳ thay đổi nào bạn có thể đã cố ý thực hiện, vì vậy chỉ thực hiện việc này nếu bạn gặp vấn đề này ngay sau khi thanh toán.

Chỉnh sửa: Tôi có thể đã thực sự gặp may mắn lần đầu tiên. Hóa ra tôi đã nhận được một lần nữa sau khi chuyển nhánh. Hóa ra các tệp git đã báo cáo là đã sửa đổi sau khi thay đổi các nhánh đang thay đổi. (Rõ ràng vì git không nhất quán áp dụng dòng CRLF kết thúc cho các tệp đúng cách.)

Tôi đã cập nhật lên git mới nhất cho Windows và hy vọng vấn đề không còn nữa.


0

Vấn đề tương tự, mặc dù tôi chỉ chắc chắn trên bề mặt. Dù sao, nó có thể giúp ai đó: những gì tôi đã làm (FWIW, trong SourceTree): đã lưu tệp không được cam kết, sau đó thực hiện thiết lập lại cứng.


0

Như các câu trả lời khác đã chỉ ra, vấn đề là do sửa lỗi tự động đầu dòng. Tôi gặp phải vấn đề này với các tệp * .svg. Tôi đã sử dụng tập tin svg cho các biểu tượng trong dự án của tôi.

Để giải quyết vấn đề này, tôi cho git biết rằng các tệp svg nên được coi là nhị phân thay vì văn bản bằng cách thêm dòng dưới đây vào .gitattribut

* .svg nhị phân


0

Trong một tình huống tương tự. Là kết quả của nhiều năm dằn vặt với nhiều lập trình viên, những người có thể nhét các bảng mã khác nhau vào cuối dòng (. Asp , .js, .css ... không phải là bản chất) vào một tệp. Một thời gian trước đã từ chối .gitattribut. Cài đặt cho repo trái autorclf = truesafecrlf = warn.

Vấn đề cuối cùng nảy sinh khi đồng bộ hóa từ kho lưu trữ với các đầu dòng khác nhau. Sau khi sao chép từ kho lưu trữ, trong trạng thái git, nhiều tệp được thay đổi cùng với ghi chú

The line will have its original line endings in your working directory. warning: LF will be replaced by CRLF in ...

Mẹo từ Làm thế nào để bình thường hóa kết thúc dòng cây làm việc trong Git? đã giúp

git add -u


0

Một khả năng khác mà tôi gặp phải là một trong các gói trong kho lưu trữ kết thúc với một ĐẦU tách rời. Nếu không có câu trả lời nào ở đây có ích và bạn gặp phải một thông báo trạng thái git như thế này thì bạn có thể gặp vấn đề tương tự:

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   path/to/package (new commits)

Đi vào path/to/packagethư mục git statussẽ mang lại kết quả như sau:

HEAD detached at 7515f05

Và lệnh sau đây sẽ khắc phục sự cố, nơi mastercần được thay thế bởi chi nhánh địa phương của bạn:

git checkout master

Và bạn sẽ nhận được một thông báo rằng chi nhánh địa phương của bạn sẽ có một số lượng cam kết đằng sau chi nhánh từ xa. git pullvà bạn nên ra khỏi rừng!


0

Đối với một số lý do

git add .

không làm việc , nhưng

$ git add -A

làm việc ra

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.