Làm web (07) - Git: hủy bỏ & remote repo

Bài học trước: Làm web (06) - Git: xem lịch sử commit
-----

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

Kho chứa ở xa[1]:



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:


(đọ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

– Là dịch vụ quản lý mã nguồn trên nền web, sử dụng công nghệ Git

– Đượ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 đó,

https://github.com là địa chỉ của Git Server

– 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: Tổng hợp các bài viết về Làm web
Xem thêm: Làm web (08) - Git: thêm remote repo