Trong bài viết này, tôi giới thiệu một số thao tác cơ bản để làm việc với local repo và remote repo trong Git
Trước tiên, tôi tạo một repo trên Github: https://github.com/handuy/learn-git
Sau đó clone về máy, để ở Desktop:
$ git clone https://github.com/handuy/learn-git
Di chuyển vào thư mục learn-git, sau đó liệt kê tất cả các nhánh (local và remote) bằng lệnh git branch -a
$ cd learn-git
$ git branch -a
Không có branch nào là bởi trong local repo của tôi chưa có commit nào, trong khi branch về bản chất là một pointer trỏ đến một commit
Tất nhiên là ở remote repo cũng chưa có nhánh nào bởi nó chưa có commit nào, vẫn là repo rỗng
Giờ tôi sẽ tạo commit cho local repo. Có 2 cách:
- Tạo commit ở remote repo trên Github, sau đó pull về local
- Tạo trực tiếp trên local
Tôi làm theo cách 1:
Lúc này, trên remote repo đã có nhánh master:
Giờ tôi sẽ lấy commit từ remote repo về local repo. Lưu ý là lúc này local repo vẫn chưa có commit nào, chưa có branch nào:
$ git fetch origin master
Câu lệnh trên lấy toàn bộ commit ở branch master trên remote repo về local repo
Ở local repo, sau khi chạy lệnh git fetch ở trên, ta kiểm tra các nhánh bằng lệnh git branch -a
:
Chưa có nhánh master ở local, đơn giản là bởi ta mới chỉ kéo commit từ nhánh master ở remote repo. Vậy các bạn hãy lưu ý: nhánh master ở remote repo khác với nhánh master ở local repo
Giờ tôi sẽ chạy lệnh git merge origin/master,
sau đó kiểm tra lịch sử commit ở local repo bằng lệnh git log
$ git merge origin/master
$ git log
Các bạn có thể thấy bây giờ ở local repo đã có nhánh master, nó đang trỏ đến commit có ID = 8a0007266, đây chính là commit mà tôi đã tạo ở remote repo trên Github:
Các bạn có thể sử dụng extension Git Graph của Visual Studio Code để xem lịch sử local repo:
Bản chất khi chạy lệnh git merge origin/master
ở trên thì git sẽ tạo một con trỏ master trỏ luôn đến commit 8a000726
Giờ tôi sẽ làm ngược lại, tạo một commit ở local repo rồi push lên remote repo trên Github
Trước tiên, tôi kiểm tra trạng thái repo learn-git:
$ git status
On branch master. Your branch is up to date with origin/master
: Dòng thông báo này chỉ ra rằng 2 nhánh master (local) và origin/master(remote) đều đang trỏ đến cùng 1 commit
Giờ tôi tạo một file style.css:
$ touch style.css
và commit vào nhánh master ở local repo:
$ git add .
$ git commit -m "tạo file style.css ở local repo"
và kiểm tra trạng thái repo bằng git status:
On branch master. Your branch is ahead of origin/master by 1 commit
: Thông báo này chỉ ra rằng giờ nhánh master ở local đang có 2 commit, trong khi origin/master ở remote vẫn chỉ có 1. Các bạn có thể kiểm tra bằng Git Graph:
Vậy làm thế nào để origin/master
cũng trỏ đến commit b657dfc2, hay nói một cách "văn hoa" hơn là làm thế nào để đồng bộ hoá 2 nhánh master
(local) và origin/master
(remote) ? Ta sử dụng lệnh git push
như sau:
$ git push origin master
Trong lệnh git push origin master
ở trên thì:
- push: đẩy các commit từ local repo lên remote repo
- origin: địa chỉ của remote repo. Các bạn có thể kiểm tra bằng lệnh git remote -v
- master: nhánh master ở local
Sau khi chạy lệnh git push origin master
, chúng ta lại dùng Git Graph để xem lịch sử:
Các bạn lên Github repo để kiểm tra:
Như vậy, trong bài viết này, tôi đã sử dụng các lệnh sau để tương tác giữa local repo và remote repo:
- git clone
: Download một remote repo về máy
- git branch -a
: Liệt kê tất cả các branch, cả local lẫn remote
- git fetch origin master
: Lấy toàn bộ các commit của nhánh master trên remote repo về local repo
- git merge origin/master
: Merge các commit ở nhánh origin/master (remote) vào nhánh master (local)
- git push origin master
: Cập nhật nhánh origin/master (remote) bằng cách đẩy các commit từ local repo lên remote repo
Bình luận