- vừa được xem lúc

Những điều cơ bản về Git

0 0 19

Người đăng: SonDV provjp

Theo Viblo Asia

Git là gì ?

Tổng quan

Git là một hệ thống quản lý phiên bản phân tán (Distributed Version Control System – DVCS), là một trong những hệ thống quản lý phiên bản phân tán phổ biến nhất hiện nay. Git cung cấp cho mỗi lập trình viên kho lưu trữ (repository) riêng chứa toàn bộ lịch sử thay đổi.

Lợi ích khi dùng

Các dự án thực tế thường có nhiều lập trình viên làm việc song song. Vì vậy, một hệ thống kiểm soát phiên bản như Git là cần thiết để đảm bảo không có xung đột code giữa các lập trình viên.

Ngoài ra, các yêu cầu trong các dự án như vậy thay đổi thường xuyên. Vì vậy, một hệ thống kiểm soát phiên bản cho phép các nhà phát triển revert và quay lại phiên bản cũ hơn của code.

Một số ưu điểm của Git:

  • Dễ sử dụng, thao tác nhanh, gọn, lẹ, an toàn.
  • Dễ dàng kết hợp các phân nhánh (branch), có thể giúp quy trình làm việc code theo nhóm đơn giản hơn.
  • Chỉ cần clone mã nguồn từ kho chứa hoặc clone một phiên bản thay đổi nào đó từ kho chứa, hoặc một nhánh nào đó từ kho chứa là có thể làm việc ở mọi lúc mọi nơi.
  • Deployment sản phẩm một cách dễ dàng.

3 trạng thái trong Git

Working Directory

Có thể hiểu là 1 bản sao phiên bản của dự án, nơi chúng ta đang thao tác các thay đổi với dữ liệu tại local . Ở đây, ta thay đổi file nhưng chưa commit vào cơ sở dữ liệu. Có thể hiểu chúng ta sẽ có các file data, nếu có bất kỳ thay đổi (thêm mới/chỉnh sửa/xóa bỏ) thì nó sẽ ở trạng thái "Modified".

Staging Area

Đây là vùng chứa thông tin về những gì sẽ được commit trong lần commit sắp tới. Hiểu là vùng để chúng ta tổ chức các file thay đổi, đánh dấu (tracking) các file thay đổi sẽ được lưu lại thành 1 version khi commit. Nó như là cách để chúng ta giới hạn các file chúng ta cần quan tâm hoặc "suy nghĩ lại" có nên lưu trữ trong phiên bản sắp tới hay không.

Để đưa các file "Modified" vào vùng này thì chúng ta phải "Staged" bằng lệnh:

# Staged các file xác định:
$ git add <file name/path file>
ví dụ: git add helloWorld.txt # Staged tất cả các file thay đổi/thêm mới hiện tại:
$ git add . # Staged tất cả các file thay đổi/thêm mới/xóa bỏ hiện có:
$ git add -A

Git directory

Git Directory nơi Git lưu trữ các metadata và cơ sở dữ liệu cho dự án của bạn.

Để có được vùng này yêu cầu chúng ta phải khởi tạo (git init) ở tại thư mục làm việc mong muốn. Để đưa các file "staged" vào vùng này thì chúng ta phải thực hiện "commit".

Cài đặt Git

Cài đặt trên Linux sử dụng Ubuntu

$ apt-get install git

Xem thêm hướng dẫn chi tiết tại trang download của GIT

Cấu hình danh tính của bạn

$ git config --global user.name "John Doe" $ git config --global user.email johndoe@example.com

Một số khái niệm của Git

1. Repository

Repository là một kho chứa, lưu trữ dữ liệu của bạn
  • Local repository: Là repository được lưu tại cục bộ (máy tính của bạn)
  • Server repository (Remote repository): Là repository nhưng được lưu tại server của các hosting-service sử dụng Git (ví dụ: Github, GitLab, Bitbucket ...)

Tạo một git repository:

$ git init

Sao chép Repository đã tồn tại:

$ git clone [url]
ví dụ: git clone https://github.com/example/hello.git

2. Commit

Commit: ghi lại Thay Đổi vào git repository. một version mới được tạo ra bằng cách tạo một "commit" cho các sự thay đổi của dữ liệu. Tạo mới một commit:

$ git commit -m "Nội dung commit"

Lưu lại thay đổi nhưng ghi đè lên commit trước đó:

$ git commit --amend -m "Nội dung mới nếu có thay đổi"

Xem lại danh sách commit đã tạo, mỗi commit trên một dòng:

$ git log --oneline

Kiểm tra trạng thái của file:

$ git status
# On branch master
nothing to commit, working directory clean

Theo Dõi Các Tập file mới:

$ git add <file_name>

Xem thay đổi giữa working với stage:

$ git diff

Bỏ qua các file Đưa danh sách các file không muốn theo dõi vào .gitignore.

3. Branch

Branch: Một nhánh trong Git là một con trỏ (index) có khả năng di chuyển được, trỏ đến một trong những commit.

Tạo mới branch:

$ git branch <branch_name>
vd: git branch testing

Để chuyển sang một nhánh đang tồn tại:

$ git checkout <branch_name>
vd: git checkout master

Để tạo một nhánh và chuyển sang nhánh đó đồng thời:

$ git checkout -b <branch_name>
vd: git checkout -b brand123

Xóa một nhánh:

$ git branch -d <branch_name>
vd: git branch -d brand123

4. Remote

Mỗi tham chiếu đến server repository được gọi là một remote

Mỗi remote sẽ có các thông tin:
  • Tên remote
  • URL: đường link của server repository (cung cấp 2 giao thức http hoặc ssh)

Thêm một remote:

$ git remote add <remote_name> <url>
vd: git remote add example git@github.com:sun/example.git

Xem danh sách remote:

$ git remote -v

Thay đổi url của remote:

$ git remote set-url <remote_name> <remote_url>
vd: git remote set-url example https://github.com/framgia/example.git

Thay đổi tên của remote:

$ git remote rename <old_name> <new_name>
vd: git remote rename example1 example2

Xóa một remote:

$ git remote remove <remote_name>
vd: git remote remove example

Một số lệnh cơ bản trong Git

1. Tạo mới một local repository

git init

2. Sao chép một Repository

Tạo bản sao hoạt động của kho lưu trữ cục bộ:

git clone /path/to/repository vd: git clone example/MyProject

Đối với máy chủ từ xa, hãy sử dụng:

git clone username@host:/path/to/repository vd: git clone git@github.com:example/project.git

3. Commit

Commit các thay đổi đối với head (nhưng chưa đến remote repository):

git commit -m "Commit message"

Commit bất kỳ tệp nào bạn đã thêm bằng git add và cũng commit bất kỳ tệp nào bạn đã thay đổi kể từ đó:

git commit -a

4. Push

Gửi các thay đổi đến nhánh master của remote repository:

git push origin master

5. Status

Liệt kê các tệp bạn đã thay đổi và những file bạn vẫn cần add hoặc commit

git status

6. Kết nối với một remote repository

Nếu bạn chưa kết nối local repository với máy chủ từ xa, hãy thêm máy chủ để có thể đẩy đến nó:

git remote add origin <server>

Liệt kê tất cả các remote repository:

git remote -v

7. Branch

Tạo một nhánh mới và chuyển sang nó:

git checkout -b <branchname> vd git checkout -b branch1

Chuyển từ nhánh này sang nhánh khác:

git checkout <branchname> vd: git checkout branch1

Liệt kê tất cả các nhánh trong repo của bạn và cũng cho bạn biết bạn hiện đang ở nhánh nào:

git branch

Xóa một nhánh

git branch -d <branchname>

Push nhánh vào remote repository để những người khác có thể sử dụng nó

git push origin <branchname>

Đẩy tất cả các nhánh vào kho lưu trữ từ xa của bạn:

git push --all origin

Xóa một nhánh trên remote reposiroty của bạn:

git push origin :<branchname>

8. Cập nhật từ remote repository

fetch và merge các thay đổi từ remote repo về thư mục làm việc của bạn:

git pull

merge một nhánh khác vào nhánh hiện tại của bạn

git merge <branchname>

Xem tất cả merge conflicts

git diff

Xem các conflict với file cơ sở:

git diff --base <filename>

Xem trước các thay đổi, trước khi merge

git diff <sourcebranch> <targetbranch>

9. Hoàn tác các thay đổi ở local

Nếu bạn làm lộn xộn, bạn có thể thay thế các thay đổi trong cây làm việc của mình bằng nội dung cuối cùng trong đầu: Các thay đổi đã được thêm vào chỉ mục, cũng như các tệp mới, sẽ được giữ lại.

git checkout -- <filename>

Để loại bỏ tất cả các commit và thay đổi ở local của bạn, hãy fetch code mới nhất từ server và trỏ nhánh master của bạn vào đó, hãy làm như sau:

git fetch origin git reset --hard origin/master

10. Stash

Cho phép bạn chuyển nhánh khách khi đang làm việc mà không cần tạo commit để lưu lại sự thay đổi. Để lưu lại những thay đổi đang làm dở, ta sử dụng lệnh:

$ git stash save

hay

$ git stash

Một số lệnh với stash:

  • Xem danh sách stash:
git stash list
  • Apply stash gần nhất và xóa stash đó:
git stash pop
  • Apply stash:
git stash apply stash@{<index>}
  • Xem nội dung stash:
git stash show stash@{<index>}
  • Xóa stash:
git stash drop stash@{<index>}

Xóa toàn bộ stash:

git stash clear

11. git reset

Phân biệt git reset, git reset --hard, git reset --soft.

git reset.

Câu lệnh:

git reset HEAD~<index>

hoặc

git reset <commit_id>

Chức năng:

  • Di chuyển HEAD về vị trí comit reset.
  • Giữ nguyên tất cả các thay đổi của file đến vị trí hiện tại.
  • Loại bỏ các thay đổi khỏi stage.
git reset --hard.

Câu lệnh:

git reset --hard HEAD~<index>

hoặc

git reset --hard <commit_id>

Chức năng:

  • Di chuyển HEAD về vị trí commit reset.
  • Loại bỏ tất cả sự thay đổi của file sau thời điểm commit reset.
git reset --soft

Câu lệnh:

git reset --soft HEAD~<index>

hoặc

git reset --soft <commit_id>

Chức năng:

  • Di chuyển HEAD về vị trí commit reset.
  • Giữ nguyên tất cả các thay đổi của file đến vị trí hiện tại. Giữ nguyên các thay đổi ở stage.
  • Lệnh này chỉ di chuyển HEAD về vị trí commit. Trạng thái của stage và tất cả sự thay đổi của file sẽ được giữ nguyên.

Kết luận

Hy vọng với bài viết này bạn sẽ có thêm những thông tin hữu ích về GIT là gì? Và Các lệnh git cơ bản mà mọi lập trình viên nên biết. Nếu có điều gì trong bài viết còn thiếu sót, mình mong nhận được những góp ý từ các bạn. Xin cảm ơn mọi người. 🥰😍🤩

Nguồn tham khảo

https://git-scm.com/book/en/v2

https://www.w3schools.com/git/

Bình luận

Bài viết tương tự

- vừa được xem lúc

Đặt tên commit message sao cho "tình nghĩa anh em chắc chắn bền lâu"????

. Lời mở đầu. .

1 1 775

- vừa được xem lúc

Tập hợp những câu lệnh GIT hữu dụng

Dưới đây là một vài ví dụ về các câu lệnh Git mà tôi thường dùng. git config --global user.name "John Doe". git config --global user.

0 0 68

- vừa được xem lúc

Cấu hình CI/CD với Github (phần 2): Trigger một work flow

Events trigger. Bạn có thể cấu hình cho workflows chạy khi có một sự kiện nào đó xảy ra trên GitHub, theo một lịch có sẵn hoặc cũng có thể là một sự kiện nào đó xảy ra ngoài GitHub.

0 0 80

- vừa được xem lúc

Cấu hình CI/CD với Github (phần 1): Một ít lý thuyết

CI/CD là gì. Về mặt khái niệm là vậy nhưng về mặt triển khai thì CI/CD là quá trình tự động thực hiện các quá trình build, test, release, deploy khi có các trigger như commit/merge code lên một branch định sẵn hoặc có thể là tự động chạy theo một lịch cố định.

0 0 128

- vừa được xem lúc

Giới thiệu về Git LFS

. Git LFS là gì . Git LFS làm điều này bằng cách thay thế các tệp lớn trong repo của bạn bằng một con trỏ nhỏ.

0 0 37

- vừa được xem lúc

Git workflow được Google và Facebook sử dụng có gì hay ho

Với developer thì Git hẳn là công cụ rất quen thuộc và không thể thiếu rồi. Thế nhưng có mấy ai thực sự hiểu được Git.

0 0 85