You are on page 1of 36

SỬ DỤNG GIT TRONG

DỰ ÁN THỰC TẾ
“Build software better, together” - Github

1
KHOA CÔNG NGHỆ THÔNG TIN – GIT
git là gì?

Git là phần mềm quản lý mã nguồn phân tán được


phát triển bởi Linus Torvalds vào năm 2005, ban
đầu dành cho việc phát triển nhân Linux.
Hiện nay, Git trở thành một trong các phần mềm
quản lý mã nguồn phổ biến nhất.
Cài đặt git tại: https://git-scm.com/

2
KHOA CÔNG NGHỆ THÔNG TIN – GIT
git config

Sử dụng git config để setting email và username, có dạng config cục bộ cho từng dự
án và config global

Tạo git repository tại thư mục hiện tại, lệnh này sẽ tạo ra một thư mục ẩn tên là .git và
có thể sử dụng các lệnh của git

3
KHOA CÔNG NGHỆ THÔNG TIN – GIT
git repository

Local repository:
working directory: là nơi lưu trữ tracked và untracked file,
giám sát sự thay đổi của toàn bộ file trong thư mục
staging area (index): là nơi lưu các file đã được tracked
localrepo: là nơi lưu trữ những phiên bản của các file trong thư
mục
Remote repository:
github / gitlab: là nơi lưu trữ và quản lý source code online,
miễn phí cho các dự án public và trả phí cho dự án private

4
KHOA CÔNG NGHỆ THÔNG TIN – GIT
git branch

Git Branch dùng để kiểm soát các phiên bản của ứng dụng
bằng việc tạo nhiều nhánh, mỗi nhánh là một phiên bản.
2 ưu điểm chính của git branch:
- Có thể phát triển tính năng mới cho ứng dụng mà không
ảnh hưởng đến quá trình phát triển của branch master.
- Có thể tạo nhiều development branch khác nhau dùng, vd
như develop branch, testing branch, production branch,…

5
KHOA CÔNG NGHỆ THÔNG TIN – GIT
git branch

Tạo một nhánh mới

Nhấn vào đây để mở Hoặc mở terminal -> git


dropdown list xem tất cả branch
nhánh đang có hiện tại

6
KHOA CÔNG NGHỆ THÔNG TIN – GIT
git branch

Tạo một nhánh mới bằng lệnh: git


Chuyển từ nhánh hiện tại sang branch <branch-name>
nhánh khác bằng lệnh: git
checkout <branch-name>

Tạo và chuyển sang nhánh vừa tạo


nhanh bằng lệnh: git checkout –b
<branch-name>
(-b: branch)
Đổi tên nhánh hiện tại bằng lệnh:
git branch –m <branch-name>
(-m: move)
Đổi tên một nhánh bất kỳ bằng
lệnh: git branch –m <branch-
name> <new-branch-name>

7
KHOA CÔNG NGHỆ THÔNG TIN – GIT
git branch

Bắt đầu với tiền tố feat/ hoặc fix/ Tiếp theo là tên người thực hiện, Cuối cùng là mô tả chức năng sẽ
feat: tạo một tính năng / giao thường sẽ là viết tắt của tên + chữ thực hiện tại hoặc tên task
diện /… mới cái đầu họ và tên đệm
fix: sửa lỗi tính năng / giao Nguyễn Văn Phong -> phongnv
diện /… hiện có Hồ Minh Thư -> thuhm

Chuyển sang một nhánh khác đồng thời xóa nhánh hiện tại đi.
Lệnh này thường dùng khi bạn vừa hoàn thành tính năng ở nhánh cũ, cần Xóa nhánh hiện có
chuyển sang nhánh mới và xóa luôn nhánh cũ đi

8
KHOA CÔNG NGHỆ THÔNG TIN – GIT
git add

$ git add dùng để đánh chỉ mục cho file, chỉ định rằng
file này đã được lưu vào staging area
$ git add <tên file> / <tên file 1> <tên file 2>
$ git add .

Để loại bỏ file / tất cả file chưa được tracked:


$ git restore <tên file> / <tên file 1> <tên file 2>
$ git restore .
Để đưa file từ staging về lại working dir:
$ git restore --staged <tên file>

9
KHOA CÔNG NGHỆ THÔNG TIN – GIT
git commit

Git commit dùng để lưu lại những file lưu


trong staging vào history bằng cách chụp
snapshot của phiên bản hiện tại. Mỗi commit sẽ
có id, message,…
Message là một thành phần quan trọng của
commit, thông qua nó ta sẽ biết commit này
thực hiện / fix tính năng nào. Vì vậy, hãy
commit thật có tâm :v
Kiểm tra toàn bộ commit snapshot bằng lệnh git
log
có thể revert commit về lại trạng thái staging
bằng lệnh git reset.

10
KHOA CÔNG NGHỆ THÔNG TIN – GIT
git commit

Hãy cũng xem một ví dụ thực tế về git commit:

Đầu tiên, bạn viết code

Sau khi code xong, bạn add và commit

Bạn check log và thấy rằng đã commit


xong, giờ bạn có thể push lên github /
gitlab để review

11
KHOA CÔNG NGHỆ THÔNG TIN – GIT
git commit

Sếp review code, sếp thấy không ok, sếp


bảo fix, bạn fix theo ý sếp

Sau khi fix xong, bạn add và commit.


Nhưng lưu ý, nếu bạn cần sửa code mà không
commit lại nhưng cần sửa commit message,
hãy sử dụng git commit --amend, nếu không
hãy sử dụng git commit --amend --no-edit
(Lưu ý: chỉ dùng khi pull request chưa được
merge)

Nếu không dùng prefix --amend thì tức là bạn


sẽ tạo 1 commit mới

12
KHOA CÔNG NGHỆ THÔNG TIN – GIT
git commit

Trong một vũ trụ khác, bạn fix code


theo ý sếp

Tuy nhiên, bạn lại quên mất việc phải


commit --amend mà lại commit mới,
dẫn tới việc sinh ra 2 commit log.
Thông thường, mỗi pull request bạn tạo
trên github thường chỉ có 1 commit.
Vậy nên, việc bây giờ bạn cần làm là
merge 2 commits lại 1 commit duy nhất,
chúng ta sẽ đề cập đến vấn đề này tại
phần git rebase

13
KHOA CÔNG NGHỆ THÔNG TIN – GIT
Tạo repository github

Nhập tên respository

Nhập mô tả cho respository

Chọn loại dự án

Thêm README và
gitignore file nếu cần

14
KHOA CÔNG NGHỆ THÔNG TIN – GIT
Tạo repository github

Chọn loại connect là https, nếu


bạn có ssh key sẵn thì hãy
chuyển sang dùng ssh

copy và chạy đoạn lệnh này để


add remote vào local repo

15
KHOA CÔNG NGHỆ THÔNG TIN – GIT
Tạo repository github

Sử dụng $ git remote –v để kiểm tra xem đã link remote repo thành công chưa

Trong trường hợp muốn thay đổi remote url, sử dụng

16
KHOA CÔNG NGHỆ THÔNG TIN – GIT
git push

git push dùng để đẩy commit từ local repo lên remote repo
Giả sử branch hiện tại là:
feat/quyennc/create-home-page
Nếu muốn push lên branch tương ứng trên github
$ git push origin feat/quyennc/create-home-page
Từ lần thứ 2 push code lên branch này, thêm prefix –f để ghi đè
$ git push origin -f feat/quyennc/create-home-page
Nếu muốn push thẳng lên master
$ git push origin master

17
KHOA CÔNG NGHỆ THÔNG TIN – GIT
pull request (PR)

Pull request được tạo ra để nhằm review source code trước khi merge vào branch chính
Đây là nơi mà team leader và mọi người sẽ cùng review và đánh giá code, để lại comment bình luận, nhằm
cải thiện chất lượng code

18
KHOA CÔNG NGHỆ THÔNG TIN – GIT
pull request (PR)

Sau khi team leader review, sẽ để lại


comment hoặc suggestion, mọi người sẽ
cùng thảo luận để fix, gọi là conversation
Sau khi fix team leader sẽ resolve cái
conversation đó đi

Mỗi pull request phải đảm bảo không có


conflict với master branch

19
KHOA CÔNG NGHỆ THÔNG TIN – GIT
git reset

Đôi khi, chúng ta cần rollback lại một commit nào đấy
để sửa lỗi, trường hợp này có thể sử dụng
$ git revert hoặc $ git reset.
Git reset dùng để quay về một điểm commit nào đó,
đồng thời xóa tất cả lịch sử của các commit trên đường
di chuyển của nó.
Tuy nhiên, các thay đổi này mới chỉ diễn ra trên local
repository, để cập nhật thay đổi này lên remote
repository (github) bạn cần phải thực hiện lệnh
$ git push –f <branch-name>

20
KHOA CÔNG NGHỆ THÔNG TIN – GIT
git reset

Ý nghĩa các loại git reset:


git reset --soft B: Đưa HEAD về vị trí B, giữ
nguyên các thay đổi đã được git add tại B trong
Staging Area, tương ứng với tại B ta vừa git add
xong.
git reset B: Đưa HEAD về vị trí commit B, đồng
thời đưa các thay đổi về Working directory,
tương ứng với tại B ta vừa cột xong, chưa git
add.
git reset --hard B: Đưa HEAD về vị trí commit
B, đồng thời loại bỏ tất cả các thay đổi tại B,
tương ứng với tại B ta chưa code gì cả.

21
KHOA CÔNG NGHỆ THÔNG TIN – GIT
git reset

Vài điều về HEAD:


HEAD chính là commit hiện tại bạn đang đứng.
HEAD~1 thì cũng tương đương với lệnh git
reset B như trên, vì HEAD~1 chính là lùi HEAD
lại 1 commit.
HEAD~n là commit trước HEAD n commit trên
cùng nhánh.
Có thể dùng @ thay cho HEAD.

22
KHOA CÔNG NGHỆ THÔNG TIN – GIT
git stash

Giả sử bạn đang code trên một nhánh mới nhưng lại cần fix gấp bug trong một nhánh cũ bạn đã push trước đó.
Lúc này thay vì sử dụng git reset --hard hoặc commit code hiện tại thì hãy dùng git stash.
Git stash có tác dụng chính là tạo một branch sạch sẽ để bạn code, đồng thời những thay đổi sẽ được lưu vào một
nơi gọi là “stash”. Sau khi fix xong code ở nhánh cũ thì apply code lưu trong stash lại, mọi việc lại đâu vào đấy.

23
KHOA CÔNG NGHỆ THÔNG TIN – GIT
git stash

Kiểm tra trạng thái các


file code hiện tại

Sử dụng git stash hoặc


git stash save để lưu
lại tất cả file chưa
commit, có thể kèm
theo message

24
KHOA CÔNG NGHỆ THÔNG TIN – GIT
git stash

git stash save –u dùng để loại bỏ


những file chưa được lưu vào
staging Liệt kê tất cả stash bằng lệnh git
stash list

25
KHOA CÔNG NGHỆ THÔNG TIN – GIT
git stash

Merge code trong stash vào branch hiện


tại bằng lệnh git stash apply
“stash@{id}”
Nên add và commit code trước khi
thực hiện thao tác này

Nếu xảy ra conflict trong quá trình


apply, nếu không muốn resolve conflict
hãy sử dụng lệnh git checkout –f để
remove tất cả file, nhớ là phải commit
code cũ trước.

26
KHOA CÔNG NGHỆ THÔNG TIN – GIT
git stash

So sánh nhánh hiện tại với stash cuối


cùng (giống như đỉnh của stack), sử
dụng lệnh git stash show

Thêm tag –p để xem so sánh chi tiết

So sánh nhánh hiện tại với nhánh bất


kỳ, sử dụng lệnh git stash show
“stash@{id}”

27
KHOA CÔNG NGHỆ THÔNG TIN – GIT
git stash

Tạo một branch mới với code trong


trong stash gần nhất và cũng xoá stash
khỏi stash list như git stash pop bằng
lệnh git stash branch <branch-name>

Chỉ định stash cụ thể để tạo branch bằng


cách thêm id vào phía sau

28
KHOA CÔNG NGHỆ THÔNG TIN – GIT
git fetch

$ git fetch dùng để đồng bộ giữa remote repository mà không làm thay đổi trạng thái của
local repository, dùng để kiểm tra sự thay đổi của các remote branch
$ git pull dùng để đồng bộ code giữa remote repository và local repository

29
KHOA CÔNG NGHỆ THÔNG TIN – GIT
git rebase

git rebase dùng để hợp nhất nhiều commit thành


một commit duy nhất.
Vd: vào buổi sáng làm việc, bạn cần lấy code
mới nhất từ trên github để đồng bộ code với các
thành viên khác trong team, tránh để code bị
outdate quá nhiều.
Thay vì dùng git merge, bạn chỉ cần sử dụng git
rebase để hợp nhất nhánh của bạn với master.
Giả sử có conflict xảy ra, dùng git merge bạn sẽ
phải resolve từng conflict ở từng commit mà bạn
khác với master. Còn sử dụng git rebase chỉ cần
resolve conflict với nhánh master mà thôi.

30
KHOA CÔNG NGHỆ THÔNG TIN – GIT
git fetch + git rebase

Sử dụng git fetch -v để tải dữ liệu


remote repository (github) về

Nhánh ở remote repo sẽ có dạng:


origin/<branch_name>

Sử dụng lệnh git rebase + nhánh remote


để đồng bộ nhánh đó với code hiện tại

Trường hợp 2 nhánh có conflict, nếu


muốn merge phải resolve tất cả conflict
-> git add . -> git rebase --continue
Nếu ko muốn merge nữa, sử dụng lệnh
git rebase --abort

Nếu không thực hiện 1 trong 2 thao tác


trên, sẽ ko thể thoát khỏi trạng thái
rebasing, ko thể code tiếp được

31
KHOA CÔNG NGHỆ THÔNG TIN – GIT
git rebase merge commit

Quay lại với bài toán merge nhiều


commit thành 1 commit, đầu tiên bạn
check log bằng git log --oneline để xem
HEAD đang ở đâu

Hiện tại, tính từ HEAD, cần gộp 2


commit cec4fca và aac8f5b

Sử dụng lệnh git rebase –i HEAD~<số


commit cần merge>, sau đó sẽ vào
mode rebase

Đầu tiên, cần chọn reset đến commit


nào, thường sẽ là chọn commit mới nhất

Bấm phím “i” để vào mode INSERT, để


lại chữ “pick” ở commit đầu, còn lại sửa
thành “s”, bấm ESC để thoát mode
INSERT, gõ “:wq” để hoàn tất bước này

32
KHOA CÔNG NGHỆ THÔNG TIN – GIT
git rebase merge commit

Tiếp theo cần sửa commit message,


chọn message muốn giữ và thêm “#” để
comment các commit message còn lại

Vẫn sử dụng thao tác với phím “i” để


INSERT, “ESC” để out mode INSERT,
và “:wq” để hoàn tất thao tác

33
KHOA CÔNG NGHỆ THÔNG TIN – GIT
git rebase merge commit

Check lại git log, có thể thấy 2 commit đã


merge thành một commit duy nhất, lúc
này sử dụng git push –f để push thay đổi
này ở local lên remote repo

Và lần sau rút kinh nghiệp nhớ dùng


prefix --amend để khỏi phải làm lại những
thao tác phức tạp này nhé

34
KHOA CÔNG NGHỆ THÔNG TIN – GIT
git fetch + git checkout

Sẽ có trường hợp bạn bè cần nhờ bạn fix


một hộ, sau khi bạn của bạn push nhánh
đó lên. Bạn sẽ dùng
$ git fetch –v
để đồng bộ remote repository, sau đó sử
dụng
git checkout + <tên nhánh đó>
Và thế là bạn đã có source code của
remote branch ở dạng review

35
KHOA CÔNG NGHỆ THÔNG TIN – GIT

You might also like