Computer >> Máy Tính >  >> Lập trình >> Lập trình

Git Các thay đổi cục bộ của bạn đối với các tệp sau đây sẽ bị ghi đè bởi Checkout Solution

Bạn không thể sửa đổi một tệp trên hai nhánh và chuyển đổi giữa các nhánh đó mà không lưu trữ hoặc lưu trữ tệp. Điều này là do Git không chắc chắn những thay đổi nào nên được lưu và những thay đổi nào nên được ghi đè.

Hướng dẫn này thảo luận về lỗi "Các thay đổi cục bộ của bạn đối với các tệp sau đây sẽ bị ghi đè khi kiểm tra" và ý nghĩa của nó. Chúng tôi sẽ xem qua một ví dụ để bạn có thể tìm ra cách khắc phục lỗi này.

Các thay đổi cục bộ của bạn đối với các tệp sau đây sẽ bị thanh toán ghi đè

Kiểm soát phiên bản Git cho phép bạn duy trì các dòng phát triển riêng biệt, được gọi là các nhánh. Những thay đổi trên một nhánh không được phản ánh trên nhánh khác trừ khi bạn hợp nhất hai nhánh.

Khi bạn điều hướng đến một chi nhánh, bạn có thể xem kho lưu trữ tại một thời điểm cụ thể trong lịch sử của nó và thực hiện các thay đổi bạn cần. Bạn nên cam kết những thay đổi được thực hiện khi bạn đã sẵn sàng để Git theo dõi sự phát triển của dự án của bạn.

Bạn không thể chuyển đổi giữa hai nhánh nếu cả hai nhánh chứa một thay đổi tệp không được cam kết. Git cần biết liệu một tệp nên được lưu hay là một phần của một cam kết. Điều này bảo vệ bạn khỏi việc vô tình ghi đè mã mà bạn có thể muốn tham khảo lại sau này.

Một tình huống mẫu

Chúng tôi sẽ sao chép một kho lưu trữ chứa một tệp có tên là README.md:

git clone https://github.com/career-karma-tutorials/ck-git

Nội dung của tệp README.md như sau:

# ck-git

Kho lưu trữ của chúng tôi có hai nhánh:phát triển và chính. Trong thư mục làm việc cục bộ của chúng tôi, chúng tôi sẽ thay đổi tệp README.md trên nhánh cái gốc:

81% người tham gia cho biết họ cảm thấy tự tin hơn về triển vọng công việc công nghệ của mình sau khi tham gia một cuộc thi đào tạo. Kết hợp với bootcamp ngay hôm nay.

Sinh viên tốt nghiệp bootcamp trung bình đã dành ít hơn sáu tháng để chuyển đổi nghề nghiệp, từ khi bắt đầu bootcamp đến khi tìm được công việc đầu tiên của họ.

# Career Karma Git

Chi nhánh chính của chúng tôi hiện khác với kho lưu trữ từ xa của chúng tôi. Chúng tôi sẽ chuyển sang nhánh phát triển của mình và thay đổi nội dung của README để nói:

# Career Karma [Development]

Chúng tôi có thể thay đổi tệp này trên nhánh phát triển bằng cách thực hiện các lệnh sau:

git checkout development
nano README.md

Tiếp theo, chuyển trở lại nhánh chính, cam kết các thay đổi được thực hiện cho nhánh và đẩy chúng vào kho lưu trữ từ xa của chúng tôi:

git checkout master
git add README.md
git commit -m "docs: Update README"
git push

Lệnh git checkout cho phép chúng ta chuyển sang nhánh chính. Xem lại, kho lưu trữ từ xa của chúng tôi hiện chứa:

  • README.md được sửa đổi trên nhánh phát triển
  • Một nhánh chính đi trước một lần cam kết

Bây giờ, hãy sửa đổi lại README.md của chúng ta trên nhánh chính:

# Tutorials

Điều này có nghĩa là cả hai nhánh đều chứa sự khác biệt giữa nhánh chủ từ xa. Hãy cố gắng chuyển sang nhánh phát triển của chúng tôi với những thay đổi tại chỗ:

git checkout development

Lệnh này trả về một thông báo lỗi:

error: Your local changes to the following files would be overwritten by checkout:
    README.md
Please commit your changes or stash them before you switch branches.
Aborting

Giải pháp

Vì các nhánh phát triển và chính của chúng tôi chứa các thay đổi chưa được cam kết, Git không thể tiến hành thanh toán. Nếu Git tiếp tục, những thay đổi chưa cam kết mà chúng tôi đã thực hiện đối với README.md của mình trên nhánh chính sẽ không được lưu.

Chúng tôi có thể sửa lỗi này theo hai cách. Đầu tiên, chúng tôi có thể cam kết các thay đổi của mình trên nhánh chính:

git add README.md
git commit -m "docs: Add tutorials message to README.md file"
git push

Trong các lệnh này, chúng tôi thêm tệp README.md vào vùng dàn, thêm tất cả các tệp từ vùng dàn vào một cam kết và chúng tôi đẩy thay đổi của mình vào kho lưu trữ từ xa.

Git hiện có một bản ghi về cách tệp README.md của chúng tôi xuất hiện với những thay đổi mà chúng tôi đã thực hiện.

Ngoài ra, chúng tôi có thể lưu trữ các thay đổi của mình để sử dụng sau này. Đây là một giải pháp tốt nếu bạn muốn thực hiện các thay đổi của mình có thể truy cập được sau này khi bạn chưa sẵn sàng thêm các thay đổi vào một cam kết. Để lưu trữ các thay đổi của mình, bạn có thể chạy lệnh git stash:

git stash save README.md

Thao tác này sẽ lưu tệp README.md của chúng tôi trong một kho lưu trữ. Bất cứ khi nào chúng tôi sẵn sàng truy cập lại tệp này, chúng tôi có thể truy cập kho lưu trữ bằng lệnh stash pop:

git stash pop

Lệnh này sẽ khôi phục tệp README.md trong kho lưu trữ của chúng tôi. “Stashing” là một cách nói khác của “tiết kiệm cho sau này”. Dấu gạch chéo không tạo ra cam kết về các thay đổi của bạn.

Sau khi chúng tôi chạy một trong các giải pháp trên, chúng tôi có thể điều hướng thành công nhánh phát triển:

git checkout development

Lệnh này chuyển nhánh của chúng tôi sang "phát triển" và thông báo cho chúng tôi về sự thay đổi này trong thiết bị đầu cuối của chúng tôi:

Switched to branch 'development'

Chúng tôi đã giải quyết được vấn đề.

Kết luận

Lỗi Git “Các thay đổi cục bộ của bạn đối với các tệp sau sẽ bị ghi đè khi kiểm tra” xảy ra khi bạn thực hiện các thay đổi trên hai nhánh mà không thực hiện hoặc lưu trữ các thay đổi đó và cố gắng điều hướng giữa các nhánh.

Bạn có thể khắc phục sự cố này bằng cách lưu trữ các thay đổi của mình để sử dụng sau hoặc thêm chúng vào một cam kết.

Bây giờ bạn đã có kiến ​​thức cần thiết để khắc phục lỗi này như một người chuyên nghiệp!