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

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.

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

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:

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

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:


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