Hướng dẫn sử dụng Git: Làm thế nào để giữ hòa bình với đội

Minh họa của đội lộn xộn | Nguồn: Spob Squarepants

Git là khó, vặn lên là dễ dàng. Có rất nhiều điều bạn nên biết để sử dụng git hiệu quả với nhóm. May mắn là bạn ở đây, tôi sẽ chỉ cho bạn hướng dẫn sử dụng git để giúp bạn làm việc trong nhóm.

Git là gì?

Git là một Hệ thống kiểm soát phiên bản phân tán (DVCS) miễn phí và nguồn mở để theo dõi các thay đổi trong mã nguồn trong quá trình phát triển phần mềm. Git được thiết kế để xử lý mọi thứ từ các dự án nhỏ đến rất lớn với tốc độ và hiệu quả.

Các lệnh cơ bản

Tôi sẽ chỉ cho bạn một số lệnh cơ bản trong git để giúp bạn đóng góp trong nhóm của mình.

git init

Nếu bạn muốn tạo một kho lưu trữ cục bộ mới, bạn có thể thực thi:

git init

Sau đó, bạn có một kho lưu trữ mới và hoàn toàn mới. Từ đó bạn có thể bắt đầu làm việc mã của mình trong kho lưu trữ mới.

nhân bản git

Bạn đang ở trong một nhóm phát triển và dự án đã được thực hiện bởi nhóm trưởng của bạn trong GitHub hoặc GitLab. Bây giờ bạn muốn đóng góp công việc của bạn trong máy tính của bạn. Bạn chỉ có thể sử dụng git clone để làm cho kho lưu trữ được sao chép trong các tệp cục bộ của bạn như thế này:

nhân bản git 

chi nhánh git

Sau khi sao chép kho lưu trữ trực tuyến của bạn vào kho lưu trữ cục bộ, bạn không thể bắt đầu mã hóa ngay lập tức. Bạn cần tạo chi nhánh của riêng mình để nó không gây rối với sản phẩm cuối cùng của kho lưu trữ của bạn. Có một số tùy chọn trong lệnh git nhánh:

chi nhánh git

Liệt kê tất cả các chi nhánh trong kho lưu trữ của bạn. Điều này đồng nghĩa với danh sách chi nhánh git.

chi nhánh git 

Tạo một nhánh mới gọi là . Điều này không kiểm tra chi nhánh mới.

chi nhánh git -d 

Xóa chi nhánh được chỉ định. Đây là một hoạt động an toàn trên mạng trong đó Git ngăn bạn xóa chi nhánh nếu nó có những thay đổi chưa được xử lý.

chi nhánh git -D 

Buộc xóa chi nhánh được chỉ định, ngay cả khi nó có các thay đổi chưa được trộn. Đây là lệnh để sử dụng nếu bạn muốn loại bỏ vĩnh viễn tất cả các cam kết liên quan đến một dòng phát triển cụ thể.

chi nhánh git -m 

Đổi tên chi nhánh hiện tại thành .

chi nhánh git -a

Liệt kê tất cả các chi nhánh từ xa.

kiểm tra git

Sau khi tạo chi nhánh của riêng bạn. Bạn muốn điều hướng từ chi nhánh hiện tại của mình (mặc định là chủ) đến chi nhánh của bạn bằng cách sử dụng lệnh kiểm tra git. Kiểm tra một nhánh cập nhật các tệp trong thư mục làm việc để khớp với phiên bản được lưu trữ trong nhánh đó và nó báo cho Git ghi lại tất cả các xác nhận mới trên nhánh đó. Hãy nghĩ về nó như một cách để chọn dòng phát triển mà bạn đang làm việc.

Chuyển đổi chi nhánh là một hoạt động đơn giản. Thực hiện những điều sau đây sẽ chỉ TRƯỚC vào đầu của .

kiểm tra git 

Khi hợp tác với một nhóm, người ta thường sử dụng các kho lưu trữ từ xa. Các kho lưu trữ này có thể được lưu trữ và chia sẻ hoặc chúng có thể là bản sao địa phương của đồng nghiệp khác. Mỗi kho lưu trữ từ xa sẽ chứa tập hợp các nhánh riêng của nó. Để kiểm tra một chi nhánh từ xa, trước tiên bạn phải tìm nạp nội dung của chi nhánh.

git lấy --all

Trong các phiên bản hiện đại của Git, sau đó bạn có thể kiểm tra chi nhánh từ xa giống như một chi nhánh địa phương.

kiểm tra git 

Ngoài ra, bạn có thể kiểm tra một chi nhánh địa phương mới và đặt lại nó cho các chi nhánh từ xa cam kết cuối cùng.

kiểm tra git -b thiết lập lại git - nguồn gốc /

git từ xa

Chỉ cần nói rằng bạn muốn sao chép dự án nhóm của bạn vào kho lưu trữ trực tuyến của riêng bạn. Sau khi tạo kho lưu trữ của riêng bạn trên GitHub hoặc GitLab, bạn muốn đẩy kho lưu trữ cục bộ của dự án nhóm của bạn lên kho lưu trữ trực tuyến của riêng bạn. Để kiểm tra kết nối của bạn, bạn có thể sử dụng các lệnh sau:

git từ xa

Liệt kê các kết nối từ xa mà bạn có đến các kho lưu trữ khác.

git từ xa -v

Tương tự như lệnh trên, nhưng bao gồm URL của mỗi kết nối.

Bây giờ bạn muốn kết nối kho lưu trữ cục bộ của mình với kho lưu trữ trực tuyến của riêng bạn bằng cách sử dụng các lệnh sau:

git từ xa thêm 

Tạo một kết nối mới đến một kho lưu trữ từ xa. Sau khi thêm một điều khiển, bạn sẽ có thể sử dụng như một lối tắt thuận tiện cho trong các lệnh Git khác.

git từ xa rm 

Hủy bỏ kết nối đến kho lưu trữ từ xa được gọi là .

đổi tên từ xa 

Đổi tên một kết nối từ xa đến .

kéo git

Nếu có một bản cập nhật trên kho lưu trữ trực tuyến trong chi nhánh mà bạn hiện đang làm việc, bạn có thể cập nhật kho lưu trữ cục bộ của mình bằng cách sử dụng lệnh git pull. Cách mặc định của tôi để lấy từ kho lưu trữ trực tuyến là sử dụng git pull nhưng có một số tùy chọn trong lệnh git pull:

kéo git

Lấy bản sao từ xa được chỉ định của chi nhánh hiện tại và ngay lập tức hợp nhất nó vào bản sao cục bộ. Điều này giống như git fetch theo sau là nguồn gốc hợp nhất git / .

git kéo --no-commit

Tương tự như lời gọi mặc định, tìm nạp nội dung từ xa nhưng không tạo ra một cam kết hợp nhất mới.

git kéo --rebase

Tương tự như lần kéo trước Thay vì sử dụng git merge để tích hợp nhánh từ xa với nhánh cục bộ, hãy sử dụng git rebase.

git kéo --verbose

Cung cấp đầu ra dài dòng trong khi kéo, hiển thị nội dung được tải xuống và các chi tiết hợp nhất.

đẩy git

Sau khi bạn thực hiện các thay đổi trong kho lưu trữ cục bộ của mình, bất kể tác động đến các tệp nhỏ như thế nào. Sử dụng git đẩy để đẩy đẩy các thay đổi của bạn trong kho lưu trữ cục bộ sang kho lưu trữ trực tuyến. Cách mặc định của tôi để đẩy vào kho lưu trữ trực tuyến là sử dụng git đẩy nhưng có một số tùy chọn trong lệnh git đẩy:

đẩy git

Đẩy nhánh được chỉ định đến , cùng với tất cả các cam kết 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. Để ngăn bạn ghi đè cam kết, Git sẽ không cho phép bạn đẩy khi kết quả là hợp nhất không chuyển tiếp nhanh trong kho lưu trữ đích.

git đẩy - lực lượng

Tương tự như lệnh trên, nhưng buộc đẩy ngay cả khi nó dẫn đến kết hợp không chuyển tiếp nhanh. Không sử dụng cờ --force trừ khi bạn hoàn toàn chắc chắn rằng bạn biết bạn đang làm gì.

git đẩy - tất cả

Đẩy tất cả các chi nhánh địa phương của bạn đến điều khiển từ xa được chỉ định.

git đẩy --tags

Thẻ không được tự động đẩy khi bạn đẩy một nhánh hoặc sử dụng tùy chọn --all. Cờ --tags gửi tất cả các thẻ cục bộ của bạn đến kho lưu trữ từ xa.

hợp nhất git

Sau khi đẩy công việc của bạn đến chi nhánh kho lưu trữ trực tuyến của bạn. Bây giờ hãy nói rằng bạn muốn hợp nhất thay đổi của mình với sản phẩm cuối cùng, giả sử trên nhánh chính, nhưng chính nhánh chính đã được cập nhật vì các nhà phát triển khác trong nhóm của bạn đã hợp nhất chi nhánh của họ với nhánh chính.

Trước khi hợp nhất | Nguồn: Atlassian

Nếu họ không thay đổi mã trong cùng dòng với công việc của bạn, bạn chỉ cần hợp nhất chi nhánh của mình mà không gặp phải bất kỳ xung đột nào bằng cách sử dụng lệnh hợp nhất

git checkout master git merge chi nhánh git -d
Sau khi hợp nhất | Nguồn: Atlassian

Cách thực hành tốt nhất sau khi hợp nhất chi nhánh của bạn là xóa an toàn.

Trong trường hợp khác nếu mã của họ nằm trong cùng dòng với mã của bạn và mã khác nhau, bạn sẽ gặp xung đột hợp nhất. Bạn phải giải quyết xung đột trước khi hợp nhất chi nhánh của bạn một lần nữa.

git rebase

Thay thế cho việc hợp nhất, bạn có thể khởi động lại nhánh tính năng lên nhánh chính bằng các lệnh sau:

tính năng kiểm tra git chủ git rebase

Điều này di chuyển toàn bộ nhánh tính năng để bắt đầu trên đỉnh của nhánh chính, kết hợp hiệu quả tất cả các cam kết mới trong tổng thể. Nhưng, thay vì sử dụng một cam kết hợp nhất, hãy viết lại ghi lại lịch sử dự án bằng cách tạo các cam kết hoàn toàn mới cho mỗi cam kết trong nhánh ban đầu.

Trong khi hợp nhất tạo một cam kết hợp nhất mới trong nhánh tính năng như thế này:

Hợp nhất chủ để tính năng chi nhánh | Nguồn: Atlassian

Rebase đang chuyển tất cả các cam kết trong nhánh tính năng sang cam kết nhánh chính mới nhất như các cam kết hoàn toàn mới

Rebase master để tính năng chi nhánh | Nguồn: Atlassian

Lợi ích chính của việc nổi loạn là bạn có được lịch sử dự án sạch hơn nhiều. Đầu tiên, nó loại bỏ các cam kết hợp nhất không cần thiết theo yêu cầu của git merge. Thứ hai, như bạn có thể thấy trong sơ đồ trên, việc khởi động lại cũng dẫn đến một lịch sử dự án tuyến tính hoàn hảo, bạn có thể làm theo các mẹo của tính năng cho đến khi bắt đầu dự án mà không cần bất kỳ nhánh nào.

git hoàn nguyên

Hoàn nguyên cam kết bằng cách tạo một cam kết mới. Đây là một cách an toàn để hoàn tác các thay đổi, vì nó không có cơ hội viết lại lịch sử cam kết. Trong một trong nhiều trường hợp, nếu tính năng của bạn có lỗi trong sản phẩm cuối cùng (trong nhánh chính), bạn cần ngay lập tức thực hiện một hotfix. Bạn có thể sử dụng git Revert trong tình huống này.

Ví dụ, lệnh sau sẽ chỉ ra các thay đổi có trong lần xác nhận thứ 2 đến lần cuối, tạo một cam kết mới hoàn tác các thay đổi đó và giải quyết cam kết mới đối với dự án hiện có.

kiểm tra git hotfix git hoàn nguyên ĐẦU ~ 2

Điều này có thể được hình dung như sau:

Trước khi hoàn nguyên | Nguồn: AtlassianSau khi hoàn nguyên | Nguồn: Atlassian

Lệnh git Revert là một hoạt động hoàn tác chuyển tiếp cung cấp một phương pháp an toàn để hoàn tác các thay đổi. Thay vì xóa các cam kết mồ côi trong lịch sử cam kết, một hoàn nguyên sẽ tạo ra một cam kết mới đảo ngược các thay đổi được chỉ định. Git Revert là một thay thế an toàn hơn để thiết lập lại git liên quan đến mất việc.

git stash

git stash tạm thời kệ (hoặc stash) thay đổi bạn đã thực hiện cho bản sao làm việc của mình để bạn có thể làm việc trên một cái gì đó khác, sau đó quay lại và áp dụng lại chúng sau này. Stashing rất tiện lợi nếu bạn cần nhanh chóng chuyển đổi ngữ cảnh và làm việc trên một thứ khác, nhưng bạn đang thực hiện một thay đổi mã và chưa sẵn sàng để cam kết.

Lệnh git stash lấy các thay đổi không được cam kết của bạn (cả được dàn dựng và không được dàn dựng), lưu chúng lại để sử dụng sau, và sau đó hoàn nguyên chúng từ bản sao làm việc của bạn. Ví dụ:

$ git status Trên nhánh chính Thay đổi được cam kết: tệp mới: style.css Thay đổi không được phân loại cho cam kết: đã sửa đổi: index.html $ git stash Thư mục làm việc đã lưu và trạng thái chỉ mục WIP trên master: 5002d47 Trang chủ mới của chúng tôi hiện tại là 5002d47 Trang chủ mới của chúng tôi $ git status Trên nhánh chủ không có gì để cam kết, cây sạch

Tại thời điểm này, bạn có thể tự do thực hiện các thay đổi, tạo các cam kết mới, chuyển đổi các nhánh và thực hiện bất kỳ hoạt động Git nào khác; sau đó quay lại và áp dụng lại stash của bạn khi bạn đã sẵn sàng. Lưu ý rằng stash là cục bộ trong kho Git của bạn; stash không được chuyển đến máy chủ khi bạn đẩy.

Bạn có thể áp dụng lại các thay đổi được lưu trữ trước đó với git stash pop:

$ git status Trên nhánh master không có gì để cam kết, cây làm việc sạch $ git stash pop Trên nhánh master Thay đổi được cam kết:
 tập tin mới: style.css
Thay đổi không được tổ chức cho cam kết:
 đã sửa đổi: index.html
Giảm refs / stash @ {0} (32b3aa1d185dfe6d57b3c3cc3b32cbf3e380cc6a)

Popping stash của bạn sẽ loại bỏ các thay đổi từ stash của bạn và áp dụng lại chúng vào bản sao làm việc của bạn.

Ngoài ra, bạn có thể áp dụng lại các thay đổi đối với bản sao làm việc của mình và giữ chúng trong ngăn chứa của bạn với áp dụng git stash:

$ git stash áp dụng Trên chi nhánh chính Thay đổi được cam kết:
 tập tin mới: style.css
Thay đổi không được tổ chức cho cam kết:
 đã sửa đổi: index.html

Điều này rất hữu ích nếu bạn muốn áp dụng các thay đổi được sắp xếp giống nhau cho nhiều nhánh.

Bây giờ bạn đã biết những điều cơ bản về stash, có một cảnh báo với git stash bạn cần lưu ý: theo mặc định, Git sẽ không bỏ qua các thay đổi được thực hiện cho các tệp không bị theo dõi hoặc bỏ qua.

Đóng cửa

Tôi hy vọng bài viết này đã cho bạn thêm kiến ​​thức để hiểu Git và cách cải thiện tinh thần đồng đội của bạn trong các dự án. Hẹn gặp lại trong bài viết tiếp theo! Cảm ơn vì đã đọc!

Tài nguyên bổ sung

  • Atlassian | Hướng dẫn Git