Bài 4: Hướng dẫn sử dụng Git – Các lệnh cơ bản cần phải biết
Bài 4: Hướng dẫn sử dụng Git – Các lệnh cơ bản cần phải biết
Học Git có dễ như Github không? Tôi chắc chắn là có vì với bài viết hướng dẫn về Git này, bạn sẽ được học các khái niệm và thuật ngữ cơ bản của Git. Kết thúc bài này chắc chắn bạn sẽ tự quản lý được phiên bản code của mình ở local bằng giao diện dòng lệnh rất chuyên nghiệp ^^.
Học Git có dễ như Github không ? Tôi chắc như đinh là có vì với bài viết hướng dẫn về Git này, bạn sẽ được học những khái niệm và thuật ngữ cơ bản của Git. Kết thúc bài này chắc như đinh bạn sẽ tự quản trị được phiên bản code của mình ở local bằng giao diện dòng lệnh rất chuyên nghiệp ^ ^ .
Trong bài Hướng dẫn sử dụng Git này, bạn sẽ học:
Các lệnh cơ bản trong Git
Hoạt động nâng cao khi làm việc với Git
Và một số mẹo và thủ thuật để quản lý dự án của bạn hiệu quả với Git.
Trước khi bắt đầu với các lệnh và hoạt động, trước tiên chúng ta hãy hiểu mục tiêu chính của Git.
Git ghi lại trạng thái hiện tại của dự án bằng cách tạo một biểu đồ cây từ chỉ mục. Nó thường ở dạng Đồ thị chu kỳ có hướng (Directed Acyclic Graph – DAG).
Trong Git các trạng thái được ghi lại thành những node và được gắn với nhau bằng mỗi mũi tên chỉ về phía trước theo thời gian.
Mục tiêu chính của Git là quản lý một dự án hoặc một tập hợp các tệp khi chúng được người dùng thay đổi theo thời gian. Git lưu trữ thông tin này trong cấu trúc dữ liệu gọi là kho Git. Kho lưu trữ là cốt lõi của Git. Bạn có thể hiểu rằng kho lưu trữ Git là thư mục chứa tất cả các file dự án của bạn và các kiểu dữ liệu khác liên quan. Git ghi nhận tất cả các thay đổi của dự án (các hành động thêm, xóa, sửa), mỗi khi có bất kỳ sự thay đổi nào Git sẽ tự động ghi vào kho lưu trữ của mình dưới dạng các thông tin theo cây thời gian thời gian đối với mỗi file và đánh dấu cho mỗi thay đổi là một phiên bản. Từ đó bạn có thể quản lý các phiên bản code của mình, có thể chuyển đổi giữa các phiên bản theo nhu cầu. Bạn có thể xem hình minh họa bên dưới để hiểu rõ hơn về Git:
Một số hành động nâng cao trong Git là:
1. Branch
2. Merge
3. Rebase
Trước tiên khi đi vào từng nội dung, tất cả chúng ta hãy tìm hiểu và khám phá về kiến trúc và phương pháp hoạt động giải trí của kho Git. Hãy xem sơ đồ của Git dưới đây :
Dựa vào các hướng dẫn dưới đây khi sử dụng từng dòng lệnh cơ bản của git và sơ đồ trên tôi sẽ giải thích để bạn có thể nắm được nguyên lý hoạt động cơ bản của Git. Nhưng trước hết, bạn cần cài đặt Git trên hệ thống của mình trước. Nếu bạn cần hướng dẫn với việc cài đặt, để xem lại kiến thức bài trước nha.
Trong Hướng dẫn sử dụng Git này, để làm quen với các dòng lệnh tôi sẽ chỉ cho bạn làm việc với Git Bash. Git Bash là giao diện dòng lệnh (CLI) chỉ có văn bản để sử dụng Git trên Windows, cung cấp các tính năng để chạy các tập lệnh tự động. Sau khi cài đặt Git trong hệ thống Windows của bạn, chỉ cần mở thư mục của bạn nơi mà bạn muốn lưu trữ tất cả các tệp dự án của mình; nhấp chuột phải và chọn ‘Git Bash here ‘.
Điều này sẽ mở ra một hành lang cửa số dòng lệnh Git Bash nơi bạn hoàn toàn có thể nhập những lệnh mở màn từ dấu USD để thực thi những hoạt động giải trí Git khác nhau .
Bây giờ, nhiệm vụ tiếp theo là khởi tạo kho lưu trữ của bạn.
Lệnh Git Init: git init tạo một kho Git trống hoặc khởi tạo lại một kho hiện có. Về cơ bản, nó tạo ra một thư mục .git với các thư mục con và các tệp mẫu. Chạy lệnh git init trong kho lưu trữ hiện tại sẽ không ghi đè lên những thứ đã có. Bây giờ để khởi tạo kho lưu trữ, bạn hãy gõ dòng lệnh tại cửa sổ Git bash vừa được mở ở trên:
git init
Khi kết thúc dòng lệnh kho lưu trữ của bạn đã được khởi tạo, việc tiếp theo chúng ta hãy tạo một số tệp trong thư mục / kho lưu trữ. Ví dụ: tôi đã tạo hai tệp văn bản là aptechbmt-1.txt và aptechbmt-2.txt bằng cách sử dụng lệnh touch sau đó liệt kê danh sách các tệp trong thư mục hiện hành bằng lệnh dir
Bây giờ hãy xem liệu các tệp này đã có trong chỉ mục của tôi hay không bằng cách sử dụng lệnh git status . Chỉ mục ở đây là gì? Chỉ mục giữ một ảnh chụp nhanh “snapshot” nội dung của cây / thư mục làm việc và ảnh chụp nhanh này được lấy làm nội dung cho phiên bản tiếp theo được thực hiện trong kho lưu trữ cục bộ. Để dễ hình dung, sau khi khởi tạo kho lưu trữ git, phiên bản đầu tiên của chúng ta chưa có gì đúng không? Khi chúng ta thêm 2 tập tin mới như trên, nghĩa là kho lưu trữ của chúng ta đã có sự thay đổi. Do đó phiên bản thứ 2 sẽ chứa ảnh chụp nội dung thay đổi (thêm 2 file mới) đó. ^^
Lệnh Git Status : Lệnh git status liệt kê tất cả các tệp đã bị sửa đổi, sẵn sàng để thêm vào kho lưu trữ cục bộ. Bạn hãy thử gõ:
git status
Kết quả cho thấy kho lưu trữ của tôi hiện có hai tệp chưa được thêm vào để lập chỉ mục nội dung. Điều này có nghĩa là tôi không thể cam kết “commit” các thay đổi với các tệp này.
Lệnh Git Add: Lệnh này giúp chúng ta cập nhật chỉ mục nội dung bằng cách sử dụng nội dung hiện tại được tìm thấy trong thư mục làm việc hiện hành “working directory” để lập chỉ mục nội dung mới, và sau đó sẵn sàng chuyển chỉ mục nội dung được lập này sang một khu vực khác được tổ chức cho lần cam kết “commit” tiếp theo gọi là “staging area“.
Quay trở lại sơ đồ mô tả quy trình làm việc của Git, rõ ràng là trước khi chúng ta thực hiện commit, thì nội dung chỉ mục của sự thay đổi trong kho được lưu trữ và luân chuyển từ khu vực working directory sang khu vực stagging area.
Như vậy, sau khi bạn thực hiện thay đổi bất kỳ đối với thư mục làm việc working directory và trước khi chạy lệnh cam kết “commit“, bạn phải sử dụng lệnh add nhằm thêm file và lập chỉ mục nội dung thay đổi cho nó để tiếp tục chuyển sang lưu trữ tại stagging area chuẩn bị sẵn sàng cho commit. Để thực hiện hãy sử dụng các lệnh dưới đây:
git add <đường dẫn thư mục>
hoặc là
git add <đường dẫn file>
Hãy để tôi chứng minh lệnh git add cho bạn để bạn có thể hiểu nó tốt hơn. Tôi sẽ lập chỉ mục nội dung thay đổi của kho cho các tập tin bằng lệnh git add -A. Lệnh này sẽ thêm tất cả các tệp vào chỉ mục trong thư mục nhưng chưa được cập nhật trong chỉ mục.
Bây giờ các tệp mới được thêm vào và lập chỉ mục nội dung, bạn đã sẵn sàng để commit chúng.
Lệnh Git Commit: Lệnh này được hiểu như là việc ghi lại các ảnh chụp nhanh “snapshot” của kho lưu trữ tại một thời điểm nhất định. Ảnh chụp nhanh đã được commit sẽ không bao giờ thay đổi trừ khi chúng ta có sự thay đổi trong kho lưu trữ một cách rõ ràng. Hãy để tôi giải thích cách commit hoạt động với sơ đồ dưới đây:
Ở đây, C1 là commit ban đầu, tức là ảnh chụp nhanh của thay đổi đầu tiên mà từ đó một ảnh chụp nhanh khác được tạo với các thay đổi có tên là C2. Lưu ý rằng bản gốc master (Head) sẽ trỏ đến commit mới nhất.
Bây giờ, khi tôi cam kết một lần nữa, một ảnh chụp nhanh C3 khác được tạo và bây giờ, bản gốc trỏ đến C3 thay vì C2.
Git nhằm mục đích giữ cho cam kết càng nhẹ càng tốt. Vì vậy, nó không sao chép một cách mù quáng toàn bộ thư mục mỗi khi bạn commit; nó lưu trữ bao gồm các commit như một tập hợp các thay đổi hoặc nó chuyển phiên bản của kho lưu trữ từ phiên bản này sang phiên bản khác mới hơn. Nói một cách dễ hiểu, nó chỉ sao chép những thay đổi được thực hiện trong kho lưu trữ. Bạn có thể commit bằng cách sử dụng lệnh dưới đây:
git commit
Hoặc bạn hoàn toàn có thể sử dụng :
git commit -m
Thử xem sao nhé
Như bạn có thể thấy ở trên, lệnh git commit đã cam kết các thay đổi trong hai tệp trong kho lưu trữ cục bộ.
Bây giờ, nếu bạn muốn thực hiện một commit ảnh chụp nhanh tất cả các thay đổi trong thư mục làm việc cùng một lúc, bạn có thể sử dụng lệnh dưới đây:
git commit -a
Bây giờ tôi sẽ tạo thêm hai tệp văn bản trong thư mục làm việc của tôi là aptechbmt-3.txt và aptechbmt-4.txt và chỉnh sửa một chút đối với file aptechbmt-1.txt bằng cách thêm nội dung cho nó. Lưu ý: tất cả các file này đều chưa được thêm vào để lập chỉ mục nội dung.
Tôi sẽ thêm file aptechbmt-3.txt bằng lệnh:
git add aptechbmt-3.txt
Lúc này tôi chỉ thêm aptechbmt-3.txt vào chỉ mục còn aptechbmt-4.txt thì không. Bây giờ, tôi muốn commit toàn bộ những biến hóa trong thư mục cùng một lúc. Tham khảo cách làm bên dưới .
Lệnh này sẽ commit một ảnh chụp nhanh về tất cả các thay đổi trong thư mục làm việc nhưng chỉ bao gồm các sửa đổi đối với các tệp được theo dõi, tức là các tệp đã được thêm bằng git add tại một số điểm trong lịch sử của chúng. Do đó, aptechbmt-4.txt không được commit vì nó chưa được thêm vào chỉ mục. Nhưng những thay đổi trong tất cả các tệp trước đó trong kho lưu trữ đã được cam kết. Ví dụ: aptechbmt-1.txt, aptechbmt-2txt, aptechbmt-3.txt. Bây giờ tôi đã thực hiện các commit mong muốn của mình trong kho lưu trữ cục bộ của tôi.
Lưu ý rằng trước khi bạn tác động đối với kho lưu trữ trung tâm bằng cách thực hiện các thay đổi trong kho lưu trữ, bạn phải luôn luôn nhớ rằng nên thay đổi từ kho lưu trữ trung tâm sang kho lưu trữ cục bộ của mình trước, để kho lưu trữ cục bộ của mình được cập nhật mới nhất với kho lưu trữ cộng tác viên khác đã đóng góp trong kho lưu trữ trung tâm. Để luôn cập nhật kho lưu trữ cục bộ của mình từ kho lưu trữ trung tâm (ở đây là kho lưu trữ Git Hub) tôi sẽ sử dụng lệnh pull .
Lệnh Pull: Lệnh git pull tìm nạp các thay đổi từ kho lưu trữ từ xa sang kho lưu trữ cục bộ. Nó hợp nhất các thay đổi ở nguồn trong kho lưu trữ cục bộ của bạn, đây là một nhiệm vụ phổ biến trong việc cộng tác dựa trên Git.
Để làm được điều này, trước tiên bạn cần đặt kho lưu trữ trung tâm của mình làm gốc “origin” hay có thể hiểu là thiết lập kết nối giữa kho lưu trữ từ xa và kho lưu trữ cục bộ bằng lệnh:
git remote add origin <đường dẫn liên kết đến kho lưu trữ trung tâm của bạn>
Trong đó để có đường dẫn liên kết đến kho lưu trữ trung tâm thì trên GitHub bạn phải tạo cho mình một kho lưu trữ (Cách tạo xem lại bài này nhé). Ở đây: tôi sử dụng kho lưu trữ từ xa tại địa chỉ này: https://github.com/aptechbuonmathuot/tu-hoc-git
Đầu tiên tôi sử dụng lệnh git remote -v để kiểm tra xem mình đã cấu hình tới các máy chủ từ xa nào, nó sẽ liệt kê tên của mỗi máy chủ từ xa kèm theo đường dẫn. Nếu bạn đã thực hiện sao chép từ một kho chứa có sẵn về kho lưu trữ cục bộ của mình, thì ít nhất bạn sẽ thấy bản gốc (origin) – đây là tên gọi mặc định mà Git đặt cho phiên bản trên máy chủ mà bạn đã sao chép từ đó bạn có thể đặt tên khác cho nó để dễ nhớ hơn. Ở ví dụ này, trước đây tôi chưa từng thực hiện việc kết nối tới một kho lưu trữ từ xa nào, nên để thực hiện thì việc đầu tiên tôi phải thiết lập kết nối với kho lưu trữ từ xa bằng lệnh git remote add
Sau khi đã làm xong các bước chuẩn bị, bây giờ chỉ việc sử dụng dòng lệnh sau:
git pull origin master
Lệnh này sẽ sao chép toàn bộ những tệp từ nhánh chính master của kho tàng trữ từ xa vào kho tàng trữ cục bộ của bạn .
Việc này sẽ hoàn toàn diễn ra suôn sẻ nếu kho lưu trữ cục bộ của bạn và kho lưu trữ từ xa có lịch sử cam kết khớp nhau. Còn trong trường hợp này Git báo lỗi “fatal: refusing to merge unrelated histories” . Để tôi giải thích lỗi này cho bạn hiểu: Lỗi này thường xảy ra do 2 nguyên nhân:
– Một là, bạn đã sao chép một dự án và bằng cách nào đó, thư mục .git đã bị xóa hoặc bị hỏng. Điều này dẫn đến việc Git không biết về lịch sử commit tại kho cục bộ của bạn và do đó sẽ khiến gây ra lỗi này khi bạn cố gắng đẩy hoặc kéo từ kho lưu trữ từ xa.
– Hai là, bạn đã tạo một kho lưu trữ mới và đã thêm một vài commit (từ đầu bài đến giờ ^^ mình thêm khá khá rồi nhỉ) và bây giờ bạn đang cố gắng lấy từ một kho lưu trữ từ xa đã có một số commit của riêng nó. Git cũng sẽ đưa ra lỗi trong trường hợp này, vì nó không biết hai dự án có liên quan như thế nào. Đây là trường hợp trong ví dụ này. Để khắc phục, rất đơn giản, bạn chỉ cần gõ lại lệnh sau:
git pull origin master --allow-unrellated-histories
Lệnh này được hiểu như tất cả chúng ta sẽ hợp nhất toàn bộ những commit trên kho tàng trữ từ xa về kho tàng trữ cục bộ một cách bắt buộc ( Nhiều khi ép mới chịu làm ^ ^ ) và mặc định Git sẽ tạo ra một commit thông tin về việc hợp nhất này, nên sau khi bạn kết thúc dòng lệnh trên Git sẽ hiển thị hành lang cửa số được cho phép tất cả chúng ta chỉnh sửa nội dung commit. Bạn hoàn toàn có thể chỉnh sửa chỗ dòng chữ màu vàng nhé .Kết quả :
Sử dụng lệnh git log –oneline để xem nhanh lịch sử commit trên máy tính cục bộ đã thay đổi thế nào
Như bạn thấy, những commit của kho tàng trữ từ xa đều được ghép vào kho tàng trữ cục bộ của mình. Trong đó, có 1 commit trên cùng ” Merge branch ‘ master ‘ … ” được tạo thêm. Ngoài ra, bạn hoàn toàn có thể kiểm tra lại ngoài Windows Explorer để thấy những file trên kho tàng trữ từ xa cũng sẽ được tải về tàng trữ tại máy tính nhé .Lưu ý : Bạn chỉ thực thi điều này, khi thực sự hiểu rõ về lịch sử dân tộc commit của 2 kho tàng trữ nhé. Ngoài ra, tất cả chúng ta cũng hoàn toàn có thể thử kéo những tệp từ một nhánh khác bằng lệnh sau :
git pull origin
Như vậy, chúng ta vừa lấy các nội dung từ kho lưu trữ từ xa về thành công. Vậy làm cách nào để đẩy ngược lại dự án của mình ở cục bộ lên kho lưu trữ từ xa? Hãy tiếp tục bằng cách sử dụng lệnh Push dưới đây.
Lệnh push: Lệnh này chuyển commit từ kho lưu trữ cục bộ của bạn sang kho lưu trữ từ xa. Nó là đối nghịch của lệnh pull.
Pull là để kéo các cam kết vào kho lưu trữ cục bộ trong khi Push là đẩy các cam kết vào kho lưu trữ từ xa.
Việc sử dụng git push là để xuất bản các thay đổi cục bộ của bạn lên một kho lưu trữ từ xa. Sau khi bạn tích lũy được một số cam kết cục bộ và sẵn sàng chia sẻ chúng với các thành viên còn lại trong nhóm, bạn có thể đẩy chúng vào kho lưu trữ từ xa bằng cách sử dụng lệnh sau:
git push
Lưu ý : Điều khiển từ xa này đề cập đến kho lưu trữ từ xa đã được cấu hình ở trên trước khi sử dụng lệnh pull.
Tôi sẽ sử dụng lệnh git push origin master để đẩy kho lưu trữ cục bộ này lên nhánh master của kho lưu trữ từ xa của tôi. Khi kết thúc dòng lệnh trên, Git sẽ xuất hiện cửa sổ thông báo bạn phải đăng nhập vào tài khoản Git Hub nếu như bạn chưa từng đăng nhập trước đây. Tài khoản này phải là chủ sở hữu kho lưu trữ từ xa hoặc phải được cấp quyền truy cập kho lưu trữ. Sau khi đăng nhập, kết quả sẽ như bên dưới:
Lưu ý: Nếu khi bạn thực hiện mà mắc lỗi như bên dưới.
Lưu ý : Nếu khi bạn triển khai mà mắc lỗi như bên dưới .
Lỗi này xảy ra khi quyền truy cập kho lưu trữ từ xa của bạn chưa được cấp do tài khoản đang sử dụng không được truy cập vào kho lưu trữ này. Để khắc phục bạn nên đăng nhập lại bằng cách, truy cập vào Control PanelAll Control Panel ItemsCredential Manager tại tab Windows Credential tìm tài khoản GitHub đã được lưu trước đây và xóa nó đi. Sau đó chạy lại lệnh git push,tiến hành làm theo hướng dẫn bên trên là được.
Sau khi thực hiện lệnh git push thì các thay đổi từ kho lưu trữ cục bộ sang kho lưu trữ từ xa cùng với tất cả các commit cần thiết và các đối tượng bên trong. Điều này tạo ra một nhánh cục bộ trong kho đích. Bây giờ hãy kiểm tra trên kho lưu trữ từ có gì nhé!
Xem thêm: Hướng dẫn sử dụng AmiBroker
Như vậy, file aptechbmt-4.txt ở dưới kho lưu trữ cục bộ sẽ không được đẩy lên kho lưu trữ từ xa vì nó chưa được thêm vào để lập chỉ mục nội dung bằng git add. Các file và lịch sử commit đều đã được đẩy lên thành công.
Để ngăn việc ghi đè, Git không cho phép push khi kết quả là hợp nhất chuyển tiếp không nhanh trong kho đích.
Lưu ý : Hợp nhất chuyển tiếp không nhanh có nghĩa là hợp nhất ngược dòng tức là hợp nhất với các nhánh tổ tiên hoặc các nhánh cha từ một nhánh con.
Để kích hoạt hợp nhất như vậy, sử dụng lệnh dưới đây:
git push -force
Lệnh trên buộc phải push ngay cả khi nó dẫn đến kết hợp chuyển tiếp không nhanh.
Đến đây, với các lệnh cơ bản của Git chắc các bạn cũng đã hình dung được quy trình làm việc của git và github theo sơ đồ ở đầu bài này. Bây giờ, chúng ta hãy tiếp tục thực hiện các hành động nâng cao hơn.
Git branch: Các nhánh trong Git không có gì ngoài con trỏ đến một cam kết cụ thể. Git thường thích giữ các nhánh của nó càng nhẹ càng tốt. Về cơ bản có hai loại là local branches và remote tracking branches.
Local branch (nhánh cục bộ) chỉ là một nhánh rẽ khác trên cây làm việc của bạn. Mặt khác, các remote tracking branches (nhánh theo dõi từ xa) có các mục đích đặc biệt. Một số trong số chúng là:
- – Chúng liên kết công việc của bạn từ kho lưu trữ cục bộ với công việc trên kho lưu trữ từ xa.
- – Chúng tự động phát hiện các nhánh từ xa để nhận thay đổi, khi bạn sử dụng git pull .
Bạn hoàn toàn có thể kiểm tra nhánh hiện tại của bạn bằng cách sử dụng lệnh :
git branch
Một câu thần chú mà bạn nên luôn luôn tụng trong khi phân nhánh ^^
Để tạo một nhánh mới, tôi sử dụng lệnh sau:
git branch
Sơ đồ dưới đây cho thấy quá trình thao tác khi một nhánh mới được tạo. Khi tất cả chúng ta tạo một nhánh mới, nó sẽ bắt nguồn từ nhánh chính. Ghi chú : dấu * để chỉ Head đang trỏ tới commit tương ứng của nhánh đó, trên sơ đồ Head của nhánh master đang trở tới commit C2, khi tạo nhánh newBranch thì Head của 2 nhánh master và newBranch đều trỏ đến commit C3
Việc tạo nhánh sẽ giúp bạn phân chia và quản lý công việc được dễ dàng hơn. Thay vì, phải tạo một kho lưu trữ mới để phát triển một tính năng mới cho dự án đã có thì bạn có thể phân nhánh ngay trong kho lưu trữ dự án để thực hiện công việc này mà không ảnh hưởng gì tới nhánh chính master.
Bây giờ, tất cả chúng ta hãy xem làm thế nào để commit khi sử dụng những nhánh .Sự phân nhánh gồm có một cam kết đơn cử cùng với toàn bộ những cam kết cha. Như bạn hoàn toàn có thể thấy trong sơ đồ trên, newBranch đã tách ra khỏi bản gốc và do đó sẽ tạo ra một đường dẫn khác .
git checkout
Lệnh này giúp chuyển đổi sang một nhánh khác, mặc định chúng ta đang ở master. Ở đây, tôi đã tạo ra một chi nhánh mới có tên là aptechbmtdev, và chuyển sang nhánh mới bằng cách sử dụng lệnh git checkout.
Một phím tắt cho các lệnh trên là:
git checkout -b
Lệnh này sẽ tạo ra một nhánh mới và chuyển sang nhánh đó cùng một lúc. Tuy nhiên tại phiên bản tôi đang sử dụng là git version 2.24.0.windows. 2 thì lệnh này không hoạt động giải trí nhé T T. Hình ảnh dưới đây miêu tả quy trình tạo branch và checkout branch, hãy chú ý những ô màu đỏ và trắng để nhận ra sự độc lạ nhé .Bây giờ trong khi tất cả chúng ta đang ở trong nhánh aptechbmtdev, hãy commit tệp văn bản aptechbmt-4.txt bằng những lệnh sau :
git add aptechbmt-4.txtgit commit -m "Thêm aptechbmt-4.txt"
Kiểm tra lịch sử vẻ vang commit bằng lệnh dưới để xem hiệu quả :
git log --all --oneline
Nhìn ảnh trên, bạn sẽ thấy mình đang ở branch aptechbmtdev để kiểm tra lịch sử dân tộc commit, con trỏ Head ( hiểu nôm na là ngọn ^ ^ ) của nhánh này đang trỏ tới commit ở đầu cuối của nhánh .
Hình ảnh trên mô tả quá trình checkout qua lại giữa các branch, tương ứng phần hiển thị bên tay trái là thư mục làm việc cũng có sự thay đổi về số lượng file.
Công việc tiếp theo của chúng ta là Push thay đổi vừa rồi lên kho lưu trữ từ xa. Đơn giản bằng cách thực hiện lệnh
git push origin aptechbmtdev
Lệnh này sẽ đẩy hàng loạt nhánh aptechbmtdev ( gồm có những file và commit của nhánh ) lên kho tàng trữ từ xa mà tất cả chúng ta đã thực thi bên trên .
Bạn hãy kiểm tra lại trên kho lưu trữ của mình đã có thêm file aptechbmt-4.txt và commit của nó không nhé!
Git merge: Hợp nhất “Merge” là cách kết hợp công việc của các nhánh khác nhau lại với nhau. Điều này sẽ cho phép chúng ta phân nhánh, phát triển một tính năng mới và sau đó kết hợp lại với nhánh gốc.
Biểu đồ trên cho tất cả chúng ta thấy hai nhánh khác nhau giữa newBranch và master. Bây giờ, khi tất cả chúng ta hợp nhất việc làm của nhánh newBranch ( C3 ) sang nhánh master ( C1, C2, C4 ) nó sao chép toàn bộ việc làm ( commit ) của newBranch vào master ( C1, C2, C3, C4 ) và tạo ra một commit mới ( C5 ) trên cùng cây. Lúc này, con trỏ Head Master sẽ trỏ đến C5. Câu lệnh hợp nhất 2 nhánh như sau :
git merge
Lưu ý: Bạn phải checkout nhánh đích (là nhánh mà bạn muốn hợp nhất vào) như sơ đồ trên khi hợp nhất newBranch vào master bạn phải checkout master.
Bây giờ, chúng ta hãy hợp nhất tất cả các công việc của nhánh aptechbmtdev vào nhánh master. Vì vậy, trước tiên tôi sẽ kiểm tra nhánh master bằng lệnh git checkout master và hợp nhất với aptechbmtdev với lệnh git merge aptechbmtdev
git checkout mastergit merge aptechbmtdev
Sử dụng lệnh git log –oneline –all để kiểm tra lịch sử commit
Như bạn có thể thấy ở trên, tất cả dữ liệu từ nhánh aptechbmtdev được hợp nhất với nhánh master. Bây giờ, tệp văn bản aptechbmt-4.txt đã được thêm vào nhánh master.
Lệnh Rebase: Đây cũng là một cách kết hợp công việc giữa các nhánh khác nhau. Rebasing tạo một tập hợp các cam kết, sao chép chúng và lưu trữ chúng vào phía sau commit mới nhất trên nhánh đích như biểu đồ bên dưới. Ưu điểm của rebasing là nó có thể được sử dụng để tạo các chuỗi commit có trình tự.
Bây giờ, các commit từ newBranch được đặt ngay sau nhánh chính và chúng ta có một chuỗi các cam kết tuyến tính nhìn đẹp hơn ^^ là merge.
Bây giờ, để rebase master, hãy gõ lệnh bên dưới trong Git Bash của bạn:
git rebase master
Lệnh này sẽ chuyển tất cả commit từ nhánh hiện tại sang nhánh master. Chúng trông như thể được phát triển một cách tuần tự, nhưng thực tế chúng lại được phát triển song song.
Ví dụ: Trên dự án sẵn có của chúng ta, tôi tạo thêm một nhánh aptechbmthotfix và thực hiện một vài commit cho nó.
git branch aptechbmthotfixgit checkout aptechbmthotfixtouch aptechbmt-5.txtgit add aptechbmt-5.txtgit commit -m "Thêm file aptechbmt-5.txt"
Tiếp tục tôi lại checkout master và tạo mới 1 commit cho master. Mục đích là để trên nhánh master này có một commit mới hơn trên nhánh aptechbmthotfix
git checkout mastertouch aptechbmt-6.txtgit add aptechbmt-6.txtgit commit -m "Thêm file aptechbmt-6.txt"
Sau khi thực hiện các lệnh trên tôi sử dụng lệnh git log để kiểm tra lịch sử commit (dạng cây) bao gồm tất cả các branch từ đầu đến giờ. Lưu ý: Head sẽ trỏ đến commit mới nhất của nhánh hiện tại bạn đang checkout.
git log --oneline --graph --color --decorate --all
Bạn để ý hiện tại commit của nhánh master có số hiệu d739a1c đang đúng trên cùng và commit của nhánh aptechbmthotfix có số hiệu 4e5b0a0 đang ở ngay bên dưới. Bây giờ, tôi sẽ checkout aptechbmthotfix và thực hiện rebase master bằng lệnh:
git rebase master
Kết quả sau khi rebase
Bạn sẽ thấy rằng sau khi rebase commit của nhánh aptechbmthotfix có số hiệu 4e5b0a0 lúc đầu đã được git đổi sang số hiệu khác là e5dec9e và đặt nó ngay trên commit của nhánh master có số hiệu d739a1c.
Tổng kết lại:
– Để hợp nhất các nhánh chúng ta có thể sử dụng Rebase và Merge đều được.
– Điểm khác nhau dễ thấy nhất của Rebase và Merge là trình tự sắp xếp các commit vào nhánh đích. Đối với Rebase nó sẽ tạo ra phiên bản commit mới (được sao chép từ commit của nhánh nguồn) và hợp nhất vào sau commit cuối cùng của nhánh đích. Còn đối với Merge thì nó sẽ giữ nguyên các commit của nguồn và hợp nhất vào nhánh đích theo trình tự thời gian commit chung của kho.
Bây giờ bạn đã trải qua tất cả các hoạt động trong bài viết Hướng dẫn sử dụng Git này, đây là một số mẹo và thủ thuật bạn nên biết. 🙂
Lưu trữ kho lưu trữ của bạn
git archive master | gzip > .tgz
Nó lưu trữ tất cả các file và dữ liệu trong một file gzip chứ không phải là thư mục .git .
Lưu ý: điều này đơn giản chỉ tạo ra một phiên bản sao lưu của kho lưu trữ và nó hoàn toàn bỏ qua việc kểm soát phiên bản. Bạn làm điều này khi bạn muốn gửi các file cho khách hàng không cài đặt Git trong máy tính của họ để xem xét.
Gói kho của bạn
Nó sẽ biến một kho lưu trữ thành một tập tin duy nhất.
Sử dụng lệnh sau-
git bundle create .bundle master
Điều này đẩy nhánh master đến một nhánh từ xa, chỉ được chứa trong một tệp thay vì một kho lưu trữ.
Một cách khác để làm điều đó là:
cd <đường dẫn>git clone repo.bundle repo-copy -b mastercd repo-copygit logcd.. /my-git-repo
Git stash – không thực hiện commit ngay
Khi chúng ta muốn hoàn tác tạm thời việc thêm một tính năng hoặc bất kỳ loại dữ liệu được thêm nào, chúng ta có thể tạm thời bỏ qua chúng.
Sử dụng lệnh dưới đây:
git statusgit stashgit status
Và khi bạn muốn vận dụng lại những biến hóa mà bạn sử dụng, hãy sử dụng lệnh bên dưới :
git stash apply
Bài viết khá dài và tôi hy vọng bạn đã thích bài viết Hướng dẫn sử dụng Git này và học các lệnh và thao tác trong Git. Hãy cho tôi biết nếu bạn muốn biết thêm về Git trong phần bình luận bên dưới 🙂
Tác giả bài viết: Aptech Buôn Ma Thuột
Tags
tự học git
Source: https://dichvubachkhoa.vn
Category : Tư Vấn Sử Dụng
Có thể bạn quan tâm
- Máy Giặt Electrolux Lỗi E51 Cảnh Báo Hỏng Nghiêm Trọng
- Lỗi E-44 máy Electrolux Dấu hiệu và cách xử lý
- Hướng dẫn xử lý lỗi H-10 tủ lạnh Sharp nội địa
- Cảnh báo mã lỗi E35 máy giặt Electrolux cần biết
- Vệ sinh bầu lọc có khắc phục lỗi U04 tủ lạnh Sharp không?
- Cảnh báo tủ lạnh Bosch lỗi E21 gây mất thực phẩm