Có ba nơi mà một tập tin có thể là - cây, chỉ mục và bản sao làm việc. Khi bạn chỉ cần thêm một tập tin vào một thư mục, bạn đang thêm nó vào bản sao làm việc.
Khi bạn làm một cái gì đó như git add file
bạn thêm nó vào chỉ mục. Và khi bạn cam kết nó, bạn cũng thêm nó vào cây.
Nó có thể sẽ giúp bạn biết ba cờ phổ biến hơn trong thiết lập lại git:
thiết lập lại git [- <mode>
] [ <commit>
]
Biểu mẫu này đặt lại đầu nhánh hiện tại <commit>
và có thể cập nhật chỉ mục (đặt lại thành cây <commit>
) và cây làm việc tùy thuộc <mode>
, phải là một trong những điều sau đây:
--soft
Không chạm vào tệp chỉ mục cũng như cây làm việc (nhưng đặt lại đầu vào <commit>
, giống như tất cả các chế độ làm). Điều này khiến tất cả các tệp đã thay đổi của bạn "Thay đổi được cam kết", vì trạng thái git sẽ đặt nó.
--Trộn
Đặt lại chỉ mục nhưng không phải cây làm việc (nghĩa là các tệp đã thay đổi được giữ nguyên nhưng không được đánh dấu cho cam kết) và báo cáo những gì chưa được cập nhật. Đây là hành động mặc định.
--cứng
Đặt lại chỉ mục và cây làm việc. Mọi thay đổi đối với các tệp được theo dõi trong cây làm việc <commit>
đều bị loại bỏ.
Bây giờ, khi bạn làm một cái gì đó như git reset HEAD
- những gì bạn thực sự đang làm git reset HEAD --mixed
và nó sẽ "đặt lại" chỉ mục về trạng thái trước khi bạn bắt đầu thêm tệp / thêm sửa đổi vào chỉ mục (thông qua git add
) Trong trường hợp này, bản sao làm việc và chỉ mục (hoặc dàn) đã được đồng bộ hóa, nhưng bạn đã làm cho CHÍNH và chỉ mục được đồng bộ hóa sau khi đặt lại.
git rm
mặt khác loại bỏ một tập tin khỏi thư mục làm việc và chỉ mục và khi bạn cam kết, tập tin cũng bị xóa khỏi cây. git rm --cached
tuy nhiên loại bỏ tệp khỏi chỉ mục một mình và giữ nó trong bản sao làm việc của bạn. Điều này hoàn toàn ngược lại trong git add file
trường hợp này, bạn đã tạo chỉ mục khác với ĐẦU và hoạt động, trong đó, ĐẦU có phiên bản cam kết trước đó của tệp, bản sao làm việc có sửa đổi cuối cùng nếu có hoặc nội dung từ CHÍNH của các tập tin và bạn loại bỏ các tập tin từ chỉ mục. Một cam kết bây giờ sẽ đồng bộ hóa chỉ mục và cây và tệp sẽ bị xóa.
git rm --cached
cácgit diff
lệnh không hiển thị bất kỳ khác, nhưnggit diff --cached
chương trình diff, như thể nó vẫn còn lưu trữ. Cácgit status
tuy nhiên cho thấy các tập tin như làUntracked
. Có vẻ không nhất quán.