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

Git Reset để Cứu hộ

Khi bạn đang thực hiện một dự án của chính mình hoặc là một phần của nhóm, có thể có những trường hợp bạn muốn hoàn tác một cam kết. git reset command là một trong những công cụ được coi là cứu cánh thực sự.

Cơ chế theo dõi của Git

Trước khi chuyển đến git reset , chúng ta cần hiểu về cấu trúc cơ bản của git. Git quản lý và theo dõi các tệp, thông qua các cấu trúc dạng cây với các nút và con trỏ.

Về cơ bản có ba trong số những “cây” này trên kho lưu trữ git cục bộ của bạn:

  1. Thư mục Làm việc :Hoặc cây làm việc và nó đề cập đến thư mục cục bộ của bạn và trạng thái 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. ĐẦU :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 dàn dựng khu vự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.

Quy trình làm việc của Git

Ví dụ sau cho thấy việc thực hiện các thay đổi đối với tệp và sau đó thêm tệp đó vào chỉ mục (dàn) bằng cách sử dụng git add sau đó kiểm tra trạng thái git status để xem các thay đổi sẽ được cam kết.

Git Reset để Cứu hộ

Bây giờ khi chúng ta thực hiện git commit nó lưu dưới dạng một ảnh chụp nhanh lâu dài hơn và cập nhật cái chính và HEAD cho con trỏ đó. Vì vậy, nếu chúng ta làm git status sau khi git commit , chúng ta sẽ thấy rằng cả ba cây đều ở cùng một trạng thái (sẽ không có gì phải cam kết).

Git Reset để Cứu hộ

Vậy mục đích của git đặt lại ?

Bạn có thể tự hỏi tại sao tất cả phần mở đầu này chỉ để đến git reset . Chà git reset thao tác những cây này theo những cách khác nhau. Vì vậy, git reset sẽ chấp nhận nhiều tùy chọn khác nhau tùy thuộc vào những gì bạn muốn làm.

Chế độ đặt lại Git

Giả sử chúng tôi đã cam kết một số thay đổi và tệp, sau đó để nhận ra rằng chúng tôi đã cam kết chúng vào sai nhánh hoặc cam kết của chúng tôi có lỗi nên chúng tôi muốn tua lại. Đây là nơi biết về chế độ đặt lại git rất hữu ích.

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

Tất cả git đặt lại với chế độ sẽ cập nhật con trỏ HEAD. Nó có cú pháp sau

git reset <mode> <commit-optional>

Các chế độ chính là:

  • --soft :Đặt lại con trỏ HEAD và giữ nguyên chỉ mục và thư mục làm việc. Vì vậy, HEAD của bạn sẽ được đặt lại và các cây khác vẫn hiển thị các thay đổi mới nhất.
  • --mixed : Mặc định Lựa chọn. Đặt lại HEAD và chỉ mục. Về cơ bản, điều này sẽ bỏ qua tất cả các thay đổi của bạn và để lại cho bạn trước khi bạn thực hiện git add . Lưu ý: Nếu bạn tự đặt lại git mà không có bất kỳ tùy chọn nào, nó sẽ được hiểu là git reset --mixed .
  • --hard : Hãy cẩn thận với điều này . Bên cạnh việc đặt lại HEAD, chỉ mục, nó cũng đặt lại thư mục làm việc của bạn. Vì vậy, bạn có thể mất mã đã viết! Điều này vì mọi thay đổi sau khi con trỏ HEAD hiện tại (lần cam kết cuối cùng) đều bị hủy.

Các chế độ khác như --merge--keep có thể được đọc trong tài liệu chính thức.

Hữu ích git đặt lại Thủ thuật

Tua lại một cam kết

Hãy nhớ rằng nếu chúng ta bỏ qua chế độ (git reset mà không có bất kỳ tùy chọn nào) thì nó sẽ được hiểu là –mixed.

Bây giờ nếu chúng ta chỉ cần gõ git reset HEAD sẽ không có gì xảy ra, nhưng nếu chúng ta git reset HEAD~1 thì HEAD của chúng ta bây giờ sẽ trỏ đến cam kết trước đó của nó.

Ví dụ sau tiếp tục từ ví dụ trước. Giả sử chúng tôi thêm văn bản mới vào tệp mẫu của mình. Sau đó, chúng tôi git thêm và cam kết. Sau đó, sau khi chúng tôi thực hiện git đặt lại HEAD ~ 1, tất cả các thay đổi của chúng tôi không được thực hiện theo giai đoạn và trên cam kết trước đó.

Git Reset để Cứu hộ

Đây là một cách hữu ích và nhanh chóng khi chúng tôi muốn hoàn tác một cam kết!

Hủy sắp xếp một tệp cụ thể

Giả sử bạn đã thêm một tệp vào chỉ mục với git add. Chúng tôi có thể xóa tệp đó bằng cách thực hiện:

git reset HEAD <file-name>

Tình huống: Tôi đã làm sai tất cả mã của mình! Tôi có thể quay lại khi nó đang hoạt động không?

Nếu bạn muốn loại bỏ tất cả các thay đổi cục bộ và quay lại cam kết trước đó thì phương án cuối cùng của bạn là git reset --hard .

Thông thường, nếu bạn phá vỡ mã của mình, đây có thể là lựa chọn duy nhất của bạn. Nếu bạn biết mã băm cam kết, bạn có thể do git reset --hard <commit> . Nhưng lưu ý rằng điều này cũng sẽ ảnh hưởng đến bất kỳ cam kết nào khác sau cam kết cụ thể (nếu có)!

Tình huống: Cam kết này được cho là nằm trong một chi nhánh mới!

Điều này thường xảy ra, đặc biệt là khi bạn bắt đầu làm việc trong lĩnh vực sản xuất. Nếu điều này xảy ra với bạn, đừng hoảng sợ!

Những gì chúng ta cần làm về cơ bản là tạo nhánh mới có trạng thái của nhánh mà chúng ta cần tua lại. Sau đó, chúng tôi sẽ đặt lại chi nhánh bị ảnh hưởng và sau đó chúng tôi chuyển sang chi nhánh mới và thực hiện cam kết ở đó:

git branch new-branch

git reset HEAD~1 --hard

git checkout new-branch

Máy cứu sinh bên phải!

Một từ cuối cùng

Hãy cẩn thận khi thực hiện git reset --hard và cả khi tua đến một cam kết cụ thể, đặc biệt là trong mã sản xuất và khi bạn đang làm việc với các nhà phát triển khác. Thường thì hoàn nguyên git là cách an toàn để thực hiện những thay đổi này. Nhưng đó là một cuộc trò chuyện cho một thời gian khác. Cho đến lúc đó! &# 128075; &# 127996;