Một cây là một bộ sưu tập thứ bậc của tập tin và thư mục, không gắn với bất kỳ điểm cụ thể trong lịch sử. Ví dụ: nếu bạn tạo một tệp và sau đó xóa tệp đó (không có các cam kết can thiệp nào khác), bạn sẽ kết thúc với cùng một cây bạn đã bắt đầu.
Một cam kết là một điểm trong lịch sử của dự án của bạn. Một cam kết chỉ định một cây, nhưng cũng chứa các thông tin khác như tác giả / committer và thời gian, một thông báo cam kết (trong đó tác giả mô tả những gì đã thay đổi) và quan trọng nhất là không hoặc nhiều cha mẹ, là trạng thái trước đó của kho lưu trữ. (Cam kết đầu tiên của bạn không có cha mẹ. Hầu hết các cam kết sau đó có một cha mẹ trong quá trình phát triển tuyến tính và nhiều hơn một lần nếu bạn hợp nhất.)
Bạn có thể hiểu được cách thức hoạt động của git cat-file -p
lệnh này với lệnh in ra nội dung của một hàm băm cụ thể, bất kể loại nào. Ví dụ: để xem cam kết CHÍNH, bạn có thể chạy:
$ git cat-file -p HEAD
tree 81ca1cb660ea79131336944df28b13b711d93557
parent 92b6b8fe9956866ace5397e060e7cc8ee1c76233
parent 7ea2575ed96d150ee19f70edea4bd42c7c2f0b83
author Mislav MarohniÄ <mislav.marohnic@gmail.com> 1436468108 -0700
committer Mislav MarohniÄ <mislav.marohnic@gmail.com> 1436468108 -0700
Merge pull request #951 from github/global-args
Avoid depending on a hardcoded list of git global flags
Để xem cây bên trong cam kết đó, bạn có thể cat-file -p
là cây:
$ git cat-file -p 81ca1cb660ea79131336944df28b13b711d93557
100644 blob 730f77a3be502cfe6769c1305c0b59c22274caf5 .gitignore
100644 blob bcbd000f6b9ad5b0510f804ac4a3b19306b39c03 .travis.yml
100644 blob da71aa1fa3c3ae47b2fe5e6245ce2eea1586e278 CONTRIBUTING.md
...
Tương tự như vậy, nếu bạn nhìn vào cha mẹ, bạn cũng sẽ thấy đó là những cam kết. Một tốc ký cho cây bên trong một cam kết như rev
là rev^{tree}
. Vì vậy, lệnh trước đó có thể đã được viết git cat-file -p HEAD^{tree}
. Lưu ý rằng rev^
viết tắt của cha mẹ của rev
. Khi có nhiều bậc phụ huynh, rev^1
, rev^2
, vv Nhiều thông tin có sẵn trong git trang người đàn ông rev-phân tích cú pháp .
commit has
nghĩa là gì trong phần đầu của đoạn 3 của bạn?