Trong Phần 1, chúng ta đã nói về Git nói chung, về các khối xây dựng của Git, về các thư mục, về khu vực dàn dựng, về kho lưu trữ cục bộ và kho lưu trữ từ xa, và cả về các đối tượng bên trong kho lưu trữ mà khái niệm quan trọng nhất là snapshot.
Nếu bạn muốn xem đâu là một phần của snapshot, bạn có thể sử dụng lệnh git cat-file. Ví dụ lấy thông tin snapshot của nhánh chính là git cat-file -p master.
Và cái quan trọng là phần đầu tiên của hàm băm, trong trường hợp này là năm ký tự đầu tiên. Chúng thường là duy nhất vì vậy chúng ta không cần phải tham chiếu đến tất cả các ký tự của hàm băm.
Và khi bạn muốn kiểm tra những gì bên trong đối tượng đó, bạn có thể sử dụng lại lệnh git cat-file để chỉ định ID đối tượng. Và bạn có thể thấy rằng bạn có ba file là -- .gitignore, my_network.py và my_network.sh.
Và nếu bạn kiểm tra my_network, đây là hàm băm hiện tại. Và khi bạn thêm my_network từ thư mục hiện tại của mình và kiểm tra những gì bên trong vùng hiển thị, bạn có thể thấy rằng hàm băm đã thay đổi. Vì vậy, kể từ lần commit cuối cùng, đã có một sự thay đổi. Thay vì là 755-cái gì đó băm, nó bây giờ là CF16, ... Vì vậy, bạn luôn có thể xem đâu là một phần của đối tượng đó, trạng thái là gì, ...
Phần quan trọng của Git là các nhánh. Các nhánh về cơ bản là các mốc thời gian khác nhau trong code của bạn. Vì vậy, mọi nhánh đều có một tên và con trỏ đến các commit. Thông thường, bạn có ít nhất một nhánh được gọi là main. Nhưng tất nhiên, bạn có thể tạo bao nhiêu nhánh tùy thích.
Có thể bạn muốn triển khai một số tính năng cụ thể cho phần mềm. Và bởi vì đây là một tính năng lớn hơn, một cái gì đó cần nhiều công việc hơn, thời gian lâu hơn, thường tốt hơn là làm công việc trong các nhánh nhỏ. Và khi nó sẵn sàng, khi nó được kiểm tra thì nó sẽ được hợp nhất với nhánh chính. Việc các nhà phát triển thực hiện công việc của riêng họ trong các chi nhánh cũng rất phổ biến.
Trên thực tế nhánh main sẽ không dùng để sửa trực tiếp. Và khi các nhà phát triển muốn thực hiện bất kỳ thay đổi nào đối với mã đó, họ sẽ tạo một nhánh khác. Họ thực hiện tất cả các thử nghiệm của họ, tất cả các sửa đổi của họ ở đó. Và khi chi nhánh đã sẵn sàng, họ tạo ra một thứ gọi là yêu cầu hợp nhất. Điều này giúp cho tiến độ dự án được ổn định hơn.
Vì vậy, bên trong nhánh đó, bạn có nhiều con trỏ. Người đầu tiên là HEAD, HEAD trạng thái hiện tại của chi nhánh. Vì vậy, khi bạn làm việc với một nhánh nào đó, khi bạn thực hiện thay đổi, HEAD này sẽ di chuyển theo mọi commit mà bạn thực hiện. Nhưng nó cũng có thể khác ví dụ như thư mục làm việc của bạn có thể phản ánh một số trạng thái trước đó của nhánh đó.
Bạn cũng có thể có một thẻ, thẻ chỉ đơn giản là một chuỗi biểu thị trạng thái của một kho lưu trữ. Ví dụ khi bạn tạo một phiên bản mới của phần mềm, bạn gắn thẻ cho nó hoặc khi bạn tạo một snapshot để thử nghiệm rộng hơn, bạn cần tạo một thẻ. Vì vậy khi ai đó cần sửa các lỗi đã được phát hiện trong quá trình thử nghiệm, họ sẽ rất dễ dàng phát hiện ra phiên bản nào cần được sửa. Vì vậy, đơn giản bằng cách sử dụng thẻ, bạn không cần biết ID băm thực sự của commit đó là gì. Thẻ này là thứ giúp ích cho các nhà phát triển rất nhiều để biết được điều gì là quan trọng tại thời điểm đó.
Nhưng thẻ có thể được sử dụng cho tất cả các loại mục đích như nó có thể dành cho việc gắn thẻ phiên bản hay có thể dành cho một số công việc tính năng, ... Vì vậy, nếu bạn muốn tạo chi nhánh của riêng mình, bạn chỉ cần sử dụng lệnh git branch, chỉ định branch, thế là xong. Và nếu bạn không hợp nhất, thì dữ liệu của bạn vẫn luôn ở đó. Git khuyến khích bạn làm việc với nhiều nhánh nhỏ hơn là làm việc trên một nhánh.
Và khi bạn muốn làm việc tại một thời điểm cụ thể trong kho lưu trữ, bạn có thể sử dụng lệnh kiểm tra để nói cụ thể, cung cấp cho tôi trạng thái của kho lưu trữ tại lần commit đó và sau đó bạn có thể sử dụng nó cho bất kỳ mục đích nào.
Khi bạn sử dụng git checkout, thì HEAD cho thư mục làm việc hiện tại của bạn là HEAD tách rời. Tất nhiên, nó không trỏ đến HEAD thực tế của chi nhánh.
Khi bạn không muốn làm việc trên nhánh tính năng vào lúc này vì bạn cần thực hiện một số công việc khác trong nhánh chính. Bạn có thể sử dụng lệnh git checkout master và bắt đầu làm việc trên nhánh đó. Khi bạn làm điều đó, bạn cần phải cẩn thận vì Git biết rằng có thể bạn có một số thay đổi trong thư mục hiện tại của mình sẽ bị mất. Vì vậy, trước tiên, bạn cần phải quan tâm đến điều đó.
Vì vậy, bạn tạo một nhánh mới và thực hiện các thay đổi chưa có commit của bạn ở đó, và bạn sẽ làm việc trên nhánh đó sau đó và bạn có thể sử dụng lệnh git stash để nói, hãy tạm thời lưu những thay đổi đó ở một số nơi khác. Và sau này, tôi sẽ lấy lại điều đó.
Nếu bạn sử dụng lệnh git status để xem những gì đã thay đổi trong thư mục làm việc của mình, bạn có thể thấy rằng file my_network.py đã được sửa đổi. Và git checkout sẽ không cho phép chúng tôi chuyển sang thứ khác. Vì vậy, những gì bạn sẽ làm là sử dụng lệnh git stash push để chỉ định mục đích của những thay đổi đó là gì.
Và khi bạn thực hiện git status, bạn thấy rằng không có gì để commit, sau đó bạn có thể kiểm tra git, thực hiện công việc của bạn. Và khi bạn hoàn tất, bạn thực hiện git stash pop để lấy lại tất cả các thay đổi của mình. Vậy là bạn đã hoàn thành công việc của mình.