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

Git HEAD tách rời

Mặc dù bạn có thể không gặp phải sự cố HEAD bị tách rời, nhưng điều quan trọng là bạn phải biết về nó để có thể tránh nó. Theo khuyến nghị, bạn không nên cam kết trên một HEAD tách rời nhưng nếu bạn làm vậy, chúng tôi sẽ hướng dẫn bạn cách lưu các cam kết của mình.

Lời nhắc

Để hiểu HEAD là gì, hãy cùng làm mới về cấu trúc giống như cây bên dưới của Git.

  1. Thư mục làm việc:Hoặc cây làm việc. Nó đề cập đến thư mục cục bộ của bạn và git status sẽ cung cấp cho bạn trạng thái của thư mục làm việc của bạn.
  2. HEAD:Đây chỉ là ảnh chụp nhanh cam kết cuối cùng của chi nhánh hiện tại của bạn. Nếu bạn định chuyển chi nhánh bằng git checkout thì HEAD sẽ thay đổi thành cam kết cuối cùng trên chi nhánh.
  3. Chỉ mục:Hoặc khu vực tổ chức, vì vậy khi bạn git add các tệp để cam kết sẽ thêm chúng vào chỉ mục này.

Hiểu về HEAD được đính kèm

Bây giờ chúng tôi hiểu rằng HEAD chỉ là cam kết mới nhất trên chi nhánh hiện tại mà bạn đang tham gia. Bằng cách thực hiện git status nó sẽ thông báo cho chi nhánh của bạn, ví dụ:On branch master và bằng cách thực hiện git log nó sẽ cho biết lịch sử cam kết của bạn với các thông tin như:

commit 38373004b8f651b58cea64cd629e1e2c18c164a0 (HEAD -> master, origin/master, origin/HEAD)
Author: Felipe <email>
Date:   Wed Sep 29 22:57:59 2020 -0500

Sau đó, nếu chúng tôi thay đổi chi nhánh của mình, giả sử chi nhánh phát triển với git checkout development thì HEAD sẽ chuyển đến lần cam kết cuối cùng. Vì vậy, trong tất cả những trường hợp bình thường này, head theo dõi chúng ta vì nó được cho là gắn với một cam kết cuối cùng trên nhánh mà chúng ta đang tham gia.

Tách HEAD

Có một số cách chúng ta có thể tách HEAD của mình.

  • Sử dụng git checkout --detach lệnh.
  • Kiểm tra một băm cam kết. Ví dụ. Nếu chúng tôi sử dụng cam kết từ bên trên git checkout 38373004b8f651b58cea64cd629e1e2c18c164a0
  • Bằng cách thêm ^ 0 vào bất kỳ nhánh nào đã cho. Ví dụ. git checkout master^0 .

Tôi không chắc liệu bạn có muốn cố ý tách HEAD ra hay không. Vì vậy, trường hợp phổ biến nhất là do nhầm lẫn bạn muốn thanh toán cho một chi nhánh và sử dụng một mã băm cam kết thay vì tên chi nhánh.

Vậy điều gì sẽ xảy ra sau một HEAD tách rời? Bạn có thể nhận được một cảnh báo tương tự như sau:

$ git checkout 38373004b8f651b58cea64cd629e1e2c18c164a0
Note: checking out '38373004b8f651b58cea64cd629e1e2c18c164a0'.

You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout.

Khi ở trên môi trường HEAD tách rời, nếu bạn ở trạng thái git status mặc dù bạn đã thực hiện các thay đổi, nó sẽ nói như thế này:

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ọ.

HEAD detached at ac63806
nothing to commit, working tree clean

Vì vậy, nó sẽ giống như bạn bị đóng băng trong thời gian và mọi thứ bạn làm đều mất hút, hoặc đơn thuần là chẳng đi đến đâu. Tại sao? Vâng vì HEAD không chỉ đến bất cứ thứ gì.

Một số người thấy điều này hữu ích để khám phá trạng thái trước đó của kho lưu trữ mà không lo bị hỏng.

Gắn lại HEAD

Bạn phải hiểu rằng bất kỳ chi nhánh nào của bạn sẽ không bị ảnh hưởng nếu bạn rơi vào trạng thái tách rời . Bây giờ, cách tốt nhất để gắn lại HEAD là tạo một nhánh mới.

Chúng ta có thể làm điều đó đơn giản như git checkout -b <branch-name> .

Điều gì sẽ xảy ra nếu chúng tôi không nhận ra rằng chúng tôi không có HEAD và bắt đầu thực hiện các thay đổi? Ở đây, chúng ta sẽ cần tạo một nhánh tạm thời và chỉ hợp nhất với nhánh mà chúng ta cần cam kết. Ví dụ:

git checkout -b temp-branch
git checkout master
git merge temp-branch

Thao tác này sẽ chuyển các thay đổi từ nhánh tạm thời của bạn vào nhánh bạn cần. Trong trường hợp này, chính.

Kết luận

Hôm nay chúng ta đã học cách tách HEAD (không phải theo nghĩa đen) và những việc cần làm sau đó. Hiểu HEAD là gì trong hoạt động bên trong Git có thể giúp chúng ta hiểu các trường hợp đặc biệt như HEAD tách rời.

Chúng tôi cũng học cách không lo lắng nếu chúng tôi kết thúc ở trạng thái HEAD tách rời. Chỉ cần lưu ý rằng vì HEAD của bạn lỏng lẻo, các thay đổi và cam kết sẽ không được phản ánh ở bất kỳ đâu. Vì vậy, hãy đảm bảo rằng bạn đã gắn lại HEAD cho phù hợp.