Nó không phải luôn luôn cần hai cha mẹ, đôi khi nó thực sự cần ba.
Sơ đồ sau minh họa kịch bản đơn giản nhất, với hai cha mẹ:
.----S
/ /
-----H----I
Ở đây H
đại diện cho cái đầu hiện tại của bạn, là nhánh chính trong ví dụ của bạn và hai xác nhận con được tạo khi bạn chạy git-stash
.
Đầu tiên là I
, đại diện cho chỉ số tại thời điểm đâm. Nói cách khác, cam kết này chứa các thay đổi đã được dàn dựng trước khi đâm. Nó có một cha mẹ duy nhất, đó là cam kết mà CHÍNH chỉ ra. Thứ hai ( S
) là cam kết stash, chứa các tệp đã được sửa đổi trước khi lưu. Nó có hai cam kết vì những thay đổi của nó có thể nằm trên đầu của những người trong tôi và những người ở H, nghĩa là, chúng có thể ảnh hưởng đến các tệp được dàn dựng hay không.
Kịch bản khác xảy ra khi bạn cung cấp công -u
tắc cho stash
lệnh, thông báo cho Git cũng lưu trữ các tệp không bị theo dõi. Biểu đồ bây giờ trở thành:
.----S----.
/ / /
-----H----I U
U
Cam kết mới có tất cả các thay đổi được giới thiệu bởi các tệp không bị theo dõi. Lưu ý rằng cam kết này sẽ có bất kỳ cha mẹ nào vì các tệp đó không tồn tại trong hiện tại HEAD
. Các stash cam kết S
hiện nay có ba phụ huynh: H
, I
và U
và bây giờ khi áp dụng các stash cam Git cũng sẽ áp dụng những thay đổi được theo dõi.
Bạn có thể thấy những sơ đồ và khác biệt rõ ràng bằng cách chạy một cái gì đó như git log --graph stash@{0}
hoặc gitk stash@{0}
.