Tin tức chung

Git là gì? ưu điểm và những điều cần biết về Git khi học lập trình

01 May 2023

Hiện nay, có rất nhiều công cụ được các lập trình viên sử dụng trong quá trình lập trình. Một trong số đó là Git. Vậy Git là gì? Hãy cùng theo dõi bài viết sẻ dưới đây để tìm ra đáp án cho những câu hỏi này nhé!

1. Giới thiệu về Git

1.1 Git là gì?

Trong lúc lập trình, việc vô tình xóa đi đoạn code vẫn đang sử dụng là vấn đề không thể tránh khỏi. Để có thể lấy lại chính xác đoạn mã code đó là một vấn đề khiến không ít lập trình viên mới vào nghề phải đau đầu. Tuy nhiên, với những lập trình viên sử dụng phần mềm quản lý phiên bản phân tán Git thì điều này sẽ lại rất dễ dàng.

Theo đó, Git là một hệ thống quản lý phiên bản phân tán (Distributed Version Control System – DVCS).  Hệ thống này được ra đời vào năm 2005 và ngay sau đó đã được sử dụng rất phổ biến. Git cung cấp cho mỗi lập trình viên một kho lưu trữ (repository) gọi tắt là Repo đây là nơi chứa cơ sở dữ liệu (database), tất cả những thông tin cần thiết để duy trì và quản lý các sử đổi và lịch sử của dự án. Hơn nữa khi sử dụng phần mềm quản lý phiên bản phân tán bạn sẽ dễ dàng quay lại một phiên bản trước của tập tin đó để khôi phục lại phiên bản cũ.

Bên cạnh đó, trong hệ thống quản lý phiên bản phân tan Git các máy khách không chỉ "check out" phiên bản mới nhất của các tập tin mà là sao chép (mirror) toàn bộ kho mã nguồn (repository). Nhờ đó mà trong trường hợp máy chủ ngừng hoạt động, thì bạn hoàn toàn có thể lấy dữ liệu từ bất kỳ máy khách nào sau đó thực hiện sao chép ngược trở lại máy chủ để khôi phục lại toàn bộ hệ thống một cánh nhanh chóng.

1.2 Ưu điểm của Git

Nếu trước kia, mọi người thường sử dụng Subversion (SVN) do google hỗ trợ thì nhiều năm trở lại đây Git đang trở thành 1 xu thế mới, thay thế dần cho SVN bởi những tính năng vượt trội sau đây: 

Lưu lại các phiên bản khác nhau của mã nguồn dự án phần mềm

Khôi phục lại mã nguồn từ một phiên bản bất kỳ một cách nhanh chóng

Dễ dàng so sánh giữa các phiên bản khác

Kiểm soát được quá trình sửa chữa để khôi phục lại tập tin bị mất

Dễ dàng thử nghiệm tính năng của dự án mà không sợ làm ảnh hưởng đến phiên bản chính Điều này, giúp nâng cao được chất lượng code cho dự án chính.

Thực hiện kiểm soát và phân chia các task hiệu quả nhờ đó mà bạn cũng có thể dễ dàng thực hiện nhiều task cùng một lúc.

Đặc biệt, Git được sử dụng hoàn toàn miễn phí mà không cần bất kì cơ sở hạ tầng server nào.

2. Quy trình sử lý công việc (workflow) trên Git

Hiện tại, Git đều đang được hỗ trợ sử dụng trên tất cả các hệ điều hành như: Windows, Linux hay và đều có tài liệu hướng dẫn cài đặt chi tiết cả.

Việc cài đặt Git cũng diễn ra rất đơn giản, người dùng chỉ cần thao tác Next còn lại tự đông nó chạy cho mình hết.

Quy trình xử lý công việc trên Git sẽ như sau:

Các thuật ngữ quan trọng trong Git

Trong hệ thống quản lý phiên bản phân tán Git có rất nhiều thuật ngữ. Hãy cùng chúng tôi tìm hiểu một số thuật ngữ cơ bản dưới đây:

1. Repository (Kho lưu trữ)

Kho lưu trữ Repository hay còn được gọi là repo một tập hợp các mã nguồn. Tại đây có chứ các commit của dự án hoặc một tập hợp các tham chiếu đến các commit để người dùng có thể lấy ra để sử dụng. Ngoài ra, các bạn cũng có thể tạo các file mới, thêm và commit nó để chia sẻ. Bây giờ, bạn có một kho lưu trữ để chia sẻ.

2. Commit

Git commit có tác dụng giúp Git lưu lại ảnh chụp màn hình/snapshot đối với các thay đổi có trong thư mục trong quá trình làm việc với Git. Với Git, khi Commit thì các thay đổi sẽ được tự động lưu lại và thường nằm trong mục Staging Area. Mỗicommit có hash SHA1 duy nhất được sử dụng để theo dõi các file đã thay đổi.

3. Branch

Branch là một tập hợp các mã thay đổi duy nhất với một tên duy nhất. Mỗi kho lưu trữ (repo) có thể có một hoặc nhiều branch.

 Branch chính là branch tất cả các thay đổi cuối cùng được sát nhập vào – được gọi là branch master.

4. Checkout

Checkout là một thuật ngữ cũng là một lệnh được sử dụng để chuyển các branch. Người dùng có thể sử dụng lệnh git checkout sao tên branch mà bạn muốn chuyển đến hoặc nhập git master để trở về branch chính.

5. Fork

Fork là một bản sao của kho lưu trữ (repo). Lợi ích của fork là để chạy thử nghiệm các thay đổi mà không ảnh hưởng đến kết quả của dự án.

6. Fetch

Git fetch là lệnh được sử dụng để tìm nạp các bản sao và tải xuống vào máy tính của bạn. Git fetch sẽ lưu các thay đổi mới nhất vào repository và cùng lúc đó có thể tìm nạp branch.

7. Head

Các commit ở đầu của một branch được gọi là head. Nó có thể được hiểu là “nhánh hiện tại”. Khi bạn thực hiện quá trình chuyển nhánh bằng lệnh checkout thì HEAD sẽ được chuyển sang nhánh mới.

 8. Index

Chỉ mục(index) được sử dụng để thiết lập một tập hợp các thay đổi mà bạn muốn thực hiện. Bất cứ khi nào người dùng thực hiện thao tác thêm, xóa hoặc thay đổi một file, nó vẫn nằm trong chỉ mục cho đến khi bạn sẵn sàng commit các thay đổi. Nó như là khu vực tổ chức (stagging area) cho Git.

9. Merge

Git merge thường sẽ được người dùng sử dụng khi muốn gộp hai branch lại với nhau

10. Origin

Theo thuật ngữ gốc thì Origin được đề cập đến kho lưu trữ từ xa, nơi bạn muốn xuất bản commit của mình. Nó được cho là một bí danh của hệ thống.

Origin đóng vai trò để liên lạc với nhánh chính

11. Master

Master là nhánh chính của tất cả các repo.

12. Pull

Thuật ngữ Pull requests thường được sử dụng để thể hiện các đề xuất thay đổi cho nhánh chính. Trong quá trình bạn làm việc theo nhóm thì các pull request sẽ được sử dụng để yêu cầu người bảo trì kho lưu trữ xem xét các thay đổi và hợp nhất chúng sao cho phù hợp nhất.

13. Push

Push(Đẩy) là thuật ngữ đẩy được sử dụng khi đề cập đến việc tải nội dung kho lưu trữ cục bộ lên một kho lưu trữ từ xa. Quá trình đẩy có khả năng ghi đè các thay đổi, chính bởi vậy người dùng cần lưu ý và thận trọng khi push.

14. Remote

Remote (kho lưu trữ từ xa) là một bản sao của một chi nhánh. Remote có thể liên hệ ngược lại với nhánh gốc (origin branch) và các remote trong kho lưu trữ.

15. Rebase

Git rebase sẽ được sử dụng để phân tách, di chuyển và thoát commit. Rebase còn được sử dụng để kết hợp hai nhánh lại với nhau.

Các lệnh Git cơ bản

Lệnh 1: Git config

Git config là một lệnh thông dụng nhất của hệ thống quản lý phiên bản phân tán Git. Nó được dùng để set user name và email của bạn trong main configuration file.

Lệnh 2: Git init

Git init được sử dụng khi người dùng muốn khởi tạo 1 git repository cùng với 1 project mới 

Lệnh 3: Git Clone

Tác dụng của Git Clone là để copy 1 git repository từ remote source

Cách sử dụng: git clone <:clone git url:>

Lệnh 4: Git status

Khi bạn muốn kiểm tra trạng thái của các file mà bạn đã thay đổi trong thư mục làm việc thì bạn nên sử dụng lệnh Git Status. Với lệnh này bạn sẽ thấy được tất cả những thay đổi cuối cùng từ lần commit cuối.

Sử dụng lệnh git status để xem nội dung của index của bạn.

Nếu các file chưa được dàn dựng thì đang ở trong chỉ mục(index). Bạn dùng lệnh git status để xem nội dung index của bạn bằng cách:

git  status

 

Lệnh 5: Git add

Lệnh Git add là một trong những lệnh quan trọng nhất của hệ thống Git. Nó có tác dụng thêm các thay đổi đến stage/index ở bên trong thư mục làm việc. Lệnh này cò có thể cập nhật nội dung hiện tại của vùng làm việc vào vùng dàn dựng. Cùng với đó nó cũng chuẩn bị nội dung được dàn dựng cho lần commit tiếp theo.

Lệnh 6: Git commit

Lệnh Git commit với mục đích chính là lưu lại một snapshot của các thay đổi bên trong thư mục làm việc. Người dùng có thể sử dụng lệnh commit kết hợp với lệnh Git add để cho git biết những thay đổi của bạn và lưu vào kho lưu trữ repositoty để từ đó quản lý được quá trình thay đổi tập tin.

Lệnh 7: Git push/ Git Pull 

Lệnh git pull được sử dụng để thêm các thay đổi vào nhánh chính. Git Pull là lệnh dùng để tải dữ liệu từ một Remote repository và cập nhật Local repository phù hợp. Nói cách khác, Git Pull được sử dụng để hợp nhất các thay đổi từ Remote repository vào Local repository

Lệnh git push dùng để đẩy các commit mới ở local repo lên

Cách sử dụng: git pull <:remote:> <:branch:> and git push <:remote:> <:branch:>

Lệnh 8: Git branch

Lệnh sẽ thực hiện liệt kê tất cả các branch (nhánh).Cách sử dụng: git branch hoặc git branch -a

Lệnh 9: Git checkout

Git checkout có tác dụng chuyển sang một branch khác. Để hoạt động được, lệnh Git checkout dựa trên ba thực thể khác nhau là file, commit và nhánh. Mặc dù là lệnh quan trong nhưng đôi khi việc sử dụng lệnh này có thể gây ra nguy hiểm vì không có tùy chọn hoàn lại có sẵn trên lệnh này.

Cách sử dụng như sau: git checkout <: branch:> hoặc ** _ git checkout -b <: branch:> nếu như bạn đang muốn tạo hoặc chuyển sang bằng một nhánh mới. 

Lệnh 10: Git stash

Tác dụng của git stash là lưu các thay đổi mà bạn không muốn commit ngay lập tức. Lệnh này thường rất hữu dụng khi bạn muốn đổi sang 1 branch khác trong khi đang làm dở ở branch hiện tại.

 Cách sử dụng: $ git stash save # or just "git stash"

Lệnh 11: Git merge

Tác dụng của lệnh Git merge là gộp 2 branch lại với nhau. Khi gộp 2 branch người dùng sẽ căn cứ vào 3 commit để tạo ra một commit gộp.

Cấu trúc lệnh:

$ git merge Hoặc $ git merge

Lệnh 12: git reset

Tác dụng của lệnh là bỏ một tập tin ra khỏi Staging Area để đặt lại các thay đổi. Lệnh git reset có ba hình thức gọi chính là:

  • Mềm mại(soft)
  • Hỗn hợp(mixed)
  • Cứng(hard)

Git Reset là một lệnh linh hoạt. Nó hoạt động như một cỗ máy thời gian cho Git, bạn có thể nhảy lên và qua lại giữa các commit khác nhau. Ngoài ra, git reset có thể hoạt động trên commit hoặc ở cấp file riêng lẻ.

Lệnh 13: git remote

Khi chúng ta cần tìm nạp một kho lưu trữ một cách ngầm định, git remote sẽ thêm một điều khiển từ xa cho kho lưu trữ. Ngoài ra, chúng ta có thể thêm một điều khiển từ xa làm biệt hiệu

Cú pháp: git remote add <  tên ngắn >  

 Trên đây, là tất cả các thông tin cơ bản liên quan đến hệ thống quản lý phiên bản phân tán Git mà chúng tôi muốn gửi đến bạn đọc. Hy vọng rằng, với những thông tin trên đây đã giúp bạn hiểu thêm về Git và sử dụng hiệu quả nhất.   

Những kiến thức về lập trình khác bạn nên đọc:

Đánh giá của học viên đã tốt nghiệp

  • Các anh chị nhiệt tình, thân thiện. Em được mở mang nhiều kiến thức

    Nguyễn Hằng ly
  • Các chị dạy rất dễ hiểu và nhiệt tình. Các kiến thức như trong thực tế khi em đi thực tập tại RikkeiSoft. Cám ơn các anh chị nhiều ạ. Chúc Dev có nhiều học viên hơn nữa.

    Vũ Thị Hà Phương
  • Học ở DevPro đã giúp mình có nhiều kinh nghiệm lập trình android thực tế. Tại đây mình được các thầy dạy rất chi tiết theo một lộ trình rõ ràng của dự án cụ thể nên sau này đi làm mình rất dễ bắt nhịp với công việc.

    Nguyễn Trọng Duy
  • Qua khoá học ở DevPro thì em đã có một “ít” vốn trong tay để có thể "bò" trong lĩnh vực vạn người mê này Trong qúa trình học thì em cảm thấy trung tâm suppost rất nhiệt tình từ đồ ăn tối, event và đầu ra :p. Có chị Quyên "sinh gái" siêu nhây và siêu lầy dụ dỗ bán rẻ học viên cho các nhà tuyển dụng :3 **** Đặc biệt các thầy có rất nhiều kinh nghiệm chỉ dạy và giúp đỡ rất nhiệt tính < mấy tháng liền bám càng đi nhờ thấy :p>

    PhạmTiến Đạt
  • Tôi sẽ không khuyên các bạn phải đến DevPro để học tập thay vì những chỗ khác nhưng tôi đã từng là một người giống các bạn. Tôi băn khoăn không biết chọn nơi đâu làm ngọn đèn chỉ lối và tôi đến với Devpro . Mọi người khá hoà đồng , các thầy cũng cực nhiệt tình nhưng cũng có vốn kiến thức rất rộng còn lại là phụ thuộc vào sự nỗ lực của các bạn nữa thôi. Cố lên nhé. #ATran

    Trần Xuân Ái
  • em thấy mọi thứ đều ổn, thầy giáo nhiệt tình trong cách giảng dậy, dev cũng rất quan tâm học viên . Nhưng theo quan điểm của em và nhìn từ sự phát triển của các trung tâm khác , em nghĩ mỗi khóa học ở dev nên có bài tập cũng như dự án giao cho học sinh làm để tạo áp lực cho học viên code, giữa học viên và công ty cần có những buổi giao lưu nhiều hơn, và cũng nên có 1 số bạn trợ giảng giúp thầy đi fix những lỗi cơ bản cho những bạn hay sai , chứ nhiều khi 1 mình thầy mà phải chạy đến từng bàn fix lỗi cũng k xuể , Xin chúc devpro ngày càng phát triển hơn

    Nguyễn Đình Thành
  • Thầy giáo dạy rất nhiệt tình rất dễ hiểu, các chị quản lý vui vẻ, tạo động lực học viên. Bài giảng phong phú bao gồm nhiều kiến thức nền tảng. .., giúp học viên nắm chắc kiến thức. Có điều lớp toàn nam, ko có nữ ạ

    Vũ Văn Thủy
  • -Thầy giáo rất nhiệt tình trong công tác giảng dạy , cũng như vui tính , thầy luôn giúp đỡ bọn e rất nhiệt tình ! Tuy chỉ học với lớp 1 thời gian không quá dài nhưng e cũng cảm thấy tuyệt vời vì đã từng là học trò của thầy ! - Chị Hằng và Chị Quyên rất vui tính và nhiệt tình giúp đỡ bọn e nữa ạ - e chúc trung tâm ngày càng đông học viên hơn nữa

    Phan Trung Phú
  • DevPro là một môi trường tốt để cho những ai chưa biết gì về lập trình theo học. Bên cạnh đó, đội ngũ giảng viên rất chất lượng, nhiệt tình chỉ bảo cả trên lớp lẫn ở nhà. Ngoài ra tôi rất thích chính sách giới thiệu việc làm cho học viên sau khi tốt nghiệp để có thể tiếp với các doanh nghiệp uy tín. Sau hơn 4 tháng học tập tại công ty, tôi đã hoàn toàn tự tin rằng mình có thể tự học hỏi và bắt đầu làm việc ở một công ty mới với vai trò Web Developer. Cảm ơn DevPro vì tất cả!!

    Nguyễn Đức Huy
  • Học một lúc 2 trường, nhưng mình vấn chưa biết tìm đam mê từ đâu. Từ lúc gặp chị Hằng mình đã quyết chọn theo android, và bây giờ mình chưa bao giờ thấy hạnh phúc đến thế. Mình có công việc ổn định, chuẩn bị onsite ở nhật 1 năm hi hi.

    Trần An Hưng
  • 1.Thầy đẹp trai thì không phải bàn rồi!! Lại được cái nhiệt tình!! ok. 2. Công ty có nhiệt tình hỗ trợ không? Công ty có nhiệt tình hỗ trợ sinh viên, vd:tiền học phí được chia làm 3 đợt giúp đỡ những sv khó khăn,.....

    Trương Quang Trường
  • Em thấy trung tâm dạy tốt và chất lượng ạ. Thầy và các chị đều tận tâm, nhiệt tình và hòa đồng. Đặc biệt là giải lao giữa giờ chúng em còn được ăn nhẹ, e rất thích khoản này.

    Trần Thị Hồng Nhung
  • Tại DevPro mình còn được học code trên tool mới nhất của Android, điều đó càng khiến mình thích thú hơn và trở nên say mê từ lúc nào không biết nữa. Không khí học ở đây rất vui vẻ, ngoài giờ học mình cùng các bạn còn được giải lao ăn nhẹ và trò chuyện cùng nhau nên rất thoải mãi.

    Trương Ngọc Đức
  • Dev chính là nơi giúp mình tìm thấy niềm yêu thích code, cũng chính là nơi đã cho mình những bước đi đầu tiên, cho mình những kiến thức nền tảng tốt nhất trên con đường theo đuổi nghề Dev.

    Nguyễn Thanh Hằng
  • Thầy giáo vui tính, nhiệt tình trả lời và giúp đỡ các bạn khi các bạn có thắc mắc hay khi gặp khó khăn. Các anh chị vui tính, thân thiện tạo cảm giác thoải mái và vui vẻ cho các bạn khi học ở đây.

    Cao Minh Lâm
  • Nghĩ lại hồi đấy, không có Devpro thì chắc giờ em phát rồ mất thôi! Em vốn nghĩ mình có thể tự học được, nhưng kiến thức vốn là vô tận, không có người hướng dẫn thì mình sẽ chẳng biết bắt đầu dư lào, bước tiếp là gì? Nhờ DevPro, sự tận tâm của các thầy mà em mới biết à hóa ra mọi thứ thật đơn giản.

    Kim Erico
  • Hồi học ở DevPro, mình rất quý thầy Việt và những người bạn. Từ kiến thức học được từ trung tâm mình đã mạnh dạn đi thực tập ở một công ty lớn của Nhật Bản và đến giờ đã là nhân viên chính thức ở đây rồi. Vui hơn nữa là có bạn học cùng lớp đó giờ đang là đồng nghiệp cùng mình luôn rồi. Hihi

    Nguyễn Thanh Việt
Nguyễn Hằng ly Vũ  Thị Hà Phương Nguyễn Trọng Duy PhạmTiến Đạt Trần Xuân Ái Nguyễn Đình Thành Vũ Văn Thủy Phan Trung Phú Nguyễn Đức Huy Trần An Hưng Trương Quang Trường Trần Thị Hồng Nhung Trương Ngọc Đức Nguyễn Thanh Hằng Cao Minh Lâm Kim Erico Nguyễn Thanh Việt
DevPro Việt Nam