Tìm hiểu về một số khái niệm trong Git

April 26, 2018 (6y ago)

Giới thiệu

Đối với các lập trình viên, việc sử dụng công cụ quản lý phiên bản git là điều không thể thiểu trong công việc hằng ngày và là một trong những kĩ năng cơ bản nhất mà ai cũng cần có được. Git có rất nhiều các khái niệm khác nhau nên nếu bạn chỉ là người mới làm quen với git thì đây chính là bài viết dành cho bạn. Bài viết sẽ giải thích tại sao chúng ta nên sử dụng git cũng như một số khái niệm thường gặp khi sử dụng git.

Tại sao cần sử dụng git?

Các khái niệm cơ bản trong git

1. Repository là gì?

$ git init

2. Branch là gì?

$ git branch <tên-branch>

hoặc

$ git checkout -b <tên-branch>

3. Làm thế nào để xóa một branch?

Lưu ý: đối với cả local branch và remote branch ta có thể tiến hành xóa đồng thời nhiều branch bằng cách liệt kê tên các branch cần xóa liền nối tiếp nhau và cách nhau một khoảng trắng

4. Push local branch lên remote server với một tên khác

$ git push <tên-remote> <tên-branch>
$ git push <tên-remote> <tên-branch>:<tên-remote-branch>

5. Phân biệt rebase và merge

$ git merge <tên-branch>

hoặc

$ git rebase <tên-branch>

Sẽ tiến hành gộp branch hiện tại với branch mà ta lựa chọn. Tuy có cùng chức năng là gộp nhánh nhưng cách hoạt động của merge và rebase lại khác với nhau, ta có thể so sánh sự khác biệt thông đó như sau:



6. Khác nhau giữa fetch và pull

$ git pull <tên-remote> <tên-remote-branch>

Lệnh này sẽ tiến hành kéo các thay đổi từ trên remote server về local của chúng ta đồng thời tiến hành merge các thay đổi đó ngay

$ git fetch <tên-remote> <tên-remote-branch>

Đối với lệnh fetch, các thay đổi từ remote server sẽ được kéo về máy nhưng không tự động merge vào source code của chúng ta mà chúng ta có thể thực hiện việc này sau khi đã review lại các thay đổi đó trước khi tiến hành merge. Các thay đổi này được đẩy sang một branch khác và ta có thể sử dụng lệnh:

$ git branch -a

Để xem được các branch sau khi fetch đồng thời cũng có thể checkout sang branch đó để xem các thay đổi.

7. Thế nào là git stash?

8. Làm thể nào để xóa bỏ trạng thài vài commit gần đây?

Để thưc hiện công việc này chúng ta có thể sử dụng 1 trong 2 lệnh sau:

$ git revert <commit-hash-code>

Lệnh này sẽ tạo ra một commit mới đảo ngược lại những thay đổi trong commit được chỉ định.

$ git reset --hard <commit-hash-code>

Keehnh này sẽ xóa toàn bộ các commit trước đó và đưa branch hiện tại trở về trạng thái của commit-hash-code đã chọn

9. Gộp một vài commit thành một commit duy nhất?

$ git rebase -i <commit-hash-code>

Với commit-hash-code là hash code của commit cuối cùng của nhóm cần gộp hoặc:

$ git rebase -i HEAD~<index>

Với index là số lượng commit cần gồm so với commit cuối cùng. Ngoài ra khi thực hiện việc rebase để gộp commit, ta có các lựa chọn khác như pick|squash|fixup để quyết định kiểu gộp. Cuối cùng ta cũng có thể dùng lệnh sau để gộp commit:

$ git reset --soft <commit-hash-code>
$ git add .
$ git commit -m"New commit"

Với commit-hash-code là mã hash của commit trước đó mà ta muốn gộp lại từ commit cuối cùng đến commit chỉ định.

10. Phân biệt giữa git reset, reset --soft, reset --hard

$ git reset <commit-hash-code>

Sẽ di chuyển HEAD về phía commit được chỉ định nhưng vẫn giữ nguyên trạng thái thay đổi của các file và đồng thời loại bỏ các file đó khỏi trạng thái staged

$ git reset --soft <commit-hash-code>

Tương tư như git reset nhưng toàn bộ các fle vẫn giữ được trạng thái staged.

$ git reset --hard <commit-hard-code>

Tương tự như 2 lệnh trên nhưng toàn bộ sự thay đổi của các file sẽ bị loại bỏ hoàn toàn nên hãy chú ý khi dùng lệnh này để tránh rơi vào trường hợp bao nhiêu công sức đổ xuống sông xuống biển

Thế nào là cherry-pick?

$ git cherry-pick <commit-hash-code>

Git flow là gì?

Các branch trong gitflow:
Các lệnh trong gitflow

Kết luận

Bài viết ở trên chủ yếu giới thiệu cho mọi người về các khái niệm trong git cũng như cách sử dụng nó trong công việc thường ngày của mình một cách hiệu quả hơn. Cám ơn bạn đã theo dõi.