-----
3.4 Hủy bỏ
Hủy bỏ (undo) là bỏ qua một kết quả do một thao tác gần nhất
tạo ra. Nên cẩn thận khi thực hiện các thao tác hủy bỏ, vì những gì đã bỏ đi sẽ
không thể lấy lại được.
Hủy bỏ commit cuối
cùng
Trong trường hợp bạn thực hiện commit vội vàng nên bị quên một
vài tập tin hoặc nội dung message không được như ý. Thay vì thực hiện một
commit khác, bạn có thể commit lại để ghi đè lên commit vừa thực hiện. Chạy lệnh
commit với tham số --amend.
Ví dụ,
$ git commit --amend
Sau khi chạy lệnh trên, Git sẽ mở trình soản thảo (đã được cấu
hình trước đó). Bạn có thể chỉnh sửa lại message của lần commit trước, sau khi
lưu và đóng lại trình soạn thảo, lệnh commit sẽ được thực thi.
Lệnh này sẽ lấy nội dung trong khu vực stage để commit, như
vậy, sau lần commit trước, nếu bạn không có thay đổi gì trên dự án thì lệnh này
đơn giản chỉ là thay đổi nội dung của message.
Sau lệnh này, nội dung của commit trước sẽ được thay thế.
Ví dụ,
$ git commit -m "commit lan 1"
$ git add them8thang3.txt
$ git commit –amend
Sau ba lệnh trên, kết quả sẽ chỉ là một commit. Commit lần
thứ hai sẽ thay thế kết quả của commit lần trước đó.
Lab 18. Hiểu về lệnh git commit
--amend
– Tạo một kho chứa trên máy cục bộ
– Thêm tập tin (dulieu1.txt) vào kho chứa, thực hiện commit
với thông điệp (message) là ‘Lần 1’
– Tiếp tục thêm tập tin (dulieu2.txt) vào kho chứa, thực hiện
commit với thông điệp (message) là ‘Lần 2’
– Dùng lệnh git log để xem lịch sử commit
– Tiếp tục thêm tập tin (dulieu3.txt) vào kho chứa, thực hiện
commit --amend với thông điệp là ‘Sửa của Lần 2’
– Dùng lệnh git log để
xem lịch sử commit, nếu chỉ có hai lần commit là được
Hủy bỏ việc tổ chức một tập tin (unstaging a staged file)
Git cho phép chuyển trạng thái của tập tin qua lại giữa “thư
mục làm việc” và “khu vực tổ chức”. Do vậy, trong khi chưa thực hiện lệnh
commit, thì bạn có thể chuyển trạng thái của các tập tin qua lại giữa hai khu vực
này.
Cụ thể, mỗi khi bạn sử dụng lệnh git status sẽ có thông báo
gợi ý việc chuyển trạng thái tập tin giữa hai khu vực.
Ví dụ,
$ git status
On branch master
Your branch is ahead of 'origin/master' by 3 commits.
(use "git push"
to publish your local commits)
Changes to be committed:
(use "git reset HEAD
<file>..." to unstage)
new file: code.txt
Untracked files:
(use "git add
<file>..." to include in what will be committed)
index.txt
– Để chuyển trạng thái tập tin từ “thư mục làm việc” qua
“khu vực stage” sử dụng lệnh $ git add
<tên tập tin>
– Để chuyển trạng thái tập tin từ “khu vực stage” sang “thư
mục làm việc” sử dụng lệnh $ git reset
HEAD <tên tập tin>
Hủy bỏ những thay đổi trên tập tin
Sau khi thực hiện thay đổi nội dung của một tập tin trong
“thư mục làm việc”, bạn hoàn toàn có thể hủy bỏ tất cả, để chuyển tập tin về
trang thái của lần commit gần nhất (hoặc như khi mới đưa nó vào thư mục làm việc
hoặc như khi mới clone về máy).
Sử dụng lệnh git checkout -- <file>
Ví dụ,
$ git checkout --
index.txt
Để ý, khi gõ lệnh git status sẽ có gợi ý để thực hiện $ git checkout,
$ git status
On branch master
Your branch is ahead of 'origin/master' by 3 commits.
(use "git push"
to publish your local commits)
Changes to be committed:
(use "git reset HEAD
<file>..." to unstage)
new file: code.txt
new file: index.txt
Changes not staged for commit:
(use "git add
<file>..." to update what will be committed)
(use "git checkout
-- <file>..." to discard changes in working directory)
modified: index.txt
Lưu ý: vì lệnh $ git checkout -- <tên tập tin> sẽ hủy
bỏ nội dung trong tập tin mà không thể phục hồi lại được. Vì vậy, không nên lạm
dụng lệnh này trừ khi bạn chắc chắn không cần các nội dung đó nữa. Nên thay thế
cách làm này bằng giải pháp tạo nhánh (branching) hoặc lưu trữ (stashing).
Lab 19.
Hủy bỏ các nội dung bị thay đổi trong tập tin tại working directory
– Tạo một kho chứa trên máy cục bộ
– Thêm tập tin abc.txt vào kho chứa, nhập nội dung “nội dung
sẽ được commit” vào tập tin abc.txt, thực hiện commit
– Thêm tiếp nội dung “nội dung sẽ bị xóa mất” vào tập tin abc.txt
– Thực hiện lệnh git checkout --abc.txt
– Mở tập tin abc.txt bằng File Explorer (Windows Explorer),
nến dòng chữ “nội dung sẽ bị xóa mất” không còn là được.
Đọc thêm tài liệu (tiếng Việt):
Đọc thêm tài liệu (tiếng Anh):
3.5 Làm việc với kho chứa ở xa
Xem qua clip này để hiểu hơn về remote repo (tiếng Anh):
Kho chứa ở xa (remote repository) là một (hoặc nhiều) phiên
bản khác của dự án, đang được đặt trên Internet, trên mạng (thậm chí ở trên
chính máy tính của bạn). Từ remote nên được hiểu là kho chứa ở một chỗ khác
(thư mục khác, ổ đĩa khác, máy tính khác).
[Đọc thêm: cách tạo một remote repository trên máy cục bộ:
Để có thể làm việc cộng tác với nhiều người, bạn cần biết
cách làm việc với các kho chứa ở xa. Các công việc liên quan đến kho chứa ở xa
thường là: kéo dữ liệu về máy cục bộ, đẩy dữ liệu lên kho chứa ở xa, tạo kho chứa,
xóa kho chứa, quản lý nhánh…v.v.
Đọc tài liệu (tiếng Việt):
Đọc tài liệu (tiếng Anh):
3.5.1
Nhà cung cấp kho chứa ở xa
Trên Internet hiện nay, đang có nhiều nhà cung cấp kho chứa cả
miễn phí và có phí. Ví dụ: Github, Gitlab, Bitbucket, GitHub Enterprise, AWS
CodeCommit, Gogs, Beanstalk.
Đọc thêm về Github tại đây:
– Tiếng Việt: https://vi.wikipedia.org/wiki/GitHub
– Tiếng Anh: https://en.wikipedia.org/wiki/GitHub
(đọc bản tiếng Anh thấy thông tin được cập nhật nhiều hơn bản
tiếng Việt, đây là lý do nên đọc tài liệu bằng tiếng Anh)
Một số thông tin quan trọng về Github:
– Có hỗ trợ CI/CD
– Được phát triển từ những năm 2007
– 28 triệu người sử dụng (năm 2018)
– Hỗ trợ tất cả các lệnh Git tiêu chuẩn
– Từ 1/2019 cho phép sử dụng miễn phí các kho chứa ở chế độ
private (có giới hạn số user)
– Là kho chứa mã nguồn lớn nhất trên thế giới
– Viết bằng ngôn ngữ Ruby
Đọc thêm về Gitlab tại đây:
Tiếng Việt:
Tiếng Anh:
Một số thông tin quan trọng về Gitlab:
– Là công cụ hỗ trợ quá trình DevOps, có tích hợp công nghệ
Git, chạy trên nền web
– Có hỗ trợ CI/CD
– Được phát triển
2011
– Viết bằng ngôn ngữ Ruby, Go, Vuejs
– Có thể tạo kho chứa private miễn phí
3.5.2
Tạo kho chứa ở xa
Trong quá trình làm một dự án, một trong các thành viên của nhóm
sẽ tạo một kho chứa ở xa (remote repository hay remote repo) để chứa mã nguồn
chung của dự án. Sau đó, các thành viên của nhóm sẽ sao chép remote repo về máy
của họ, lập trình, commit, sau đó đẩy local repo lên remote repo để chia sẻ với
các thành viên còn lại.
Sau khi được tạo, mỗi remote repo sẽ có một địa chỉ (đường dẫn)
để mọi người có thể thực hiện các thao tác dựa trên địa chỉ này.
Ví dụ,
Trong đó,
– legiacong là
tên tài khoản
– testremote là
tên của remote repo
Lab 20. Tạo kho chứa trên Github
– Đăng kí một tài khoản trên Github
– Làm theo hướng dẫn sau để tạo một repository: https://guides.github.com/activities/hello-world/#repository
– Tạo một tập tin với nội dung bất kì trên kho chứa (ví dụ
test.txt), thực hiện commit tập tin
– Sao chép (clone) kho chứa từ Github về ổ đĩa D:\ của máy cục
bộ, sử dụng chức năng clone trên trang web
– Sao chép kho chứa từ Github về ổ đĩa D:\ của máy cục bộ, sử
dụng lệnh $ git clone trong Git Bash, đặt tên mới cho kho chứa trong lệnh $ git
clone
Lab 21. Tạo kho chứa trên Gitlab
– Đăng kí một tài khoản trên Gitlab
– Làm theo hướng dẫn sau để tạo một repository (cũng là tạo
một project): https://docs.gitlab.com/ee/gitlab-basics/create-project.html
– Tạo một tập tin với nội dung bất kì trên kho chứa (ví dụ
test.txt), thực hiện commit tập tin
– Sao chép (clone) kho chứa từ Gitlab về ổ đĩa D:\ của máy cục
bộ, sử dụng chức năng clone trên trang web
– Sao chép kho chứa từ Gitlab về ổ đĩa D:\ của máy cục bộ, sử dụng
lệnh $ git clone trong Git Bash, đặt tên mới cho kho chứa trong lệnh $ git
clone
Cập nhật [12/02/2020]
-----------
Xem thêm: Làm web (08) - Git: thêm remote repo