Một vài lệnh Git hữu dụng

3274

Người viết: Nguyễn Văn Minh

1. HEAD, ORIG_HEAD, FETCH_HEAD

  • HEADHEAD luôn luôn trỏ tới commit hiện tại ở working tree. Đa số các lệnh git thay đổi working tree sẽ bắt đầu bằng cách thay đổi vị trí của HEAD. Ví dụ như reset, revert các commit
  • Hiểu đơn giản: HEAD là tên hiển thị phần đầu của branch đang sử dụng hiện tại
  • Chúng ta biết đến HEAD nhưng dường như lại không mấy ai để ý đến ORIG_HEAD. Commit trước khi reset có thể tham chiếu bằng tên ORIG_HEAD. Trường hợp đã reset nhầm chẳng hạn, nếu reset ở trong ORIG_HEAD thì có thể quay về trạng thái trước khi reset.

  • FETCH_HEAD: cái này tương tự như HEAD nhưng nó ở trên các branch fetch, mình sẽ đề cập sau

2. Lệnh git Fetching

Nếu bạn muốn lấy code từ remote repository, bạn sử dụng pull. Nhưng nếu bạn đang ở 1 nhánh khác mà bạn không muốn lấy code về hoặc cũng không muốn chuyển sang develop để pull code, bạn có thể suy nghĩ đến việc sử dụng fetch. Fetch được sử dụng khi bạn chỉ muốn KIỂM TRA nội dung remote repository mà không muốn merge

Khi thực hiện fetch sẽ lấy lịch sử mới nhất của remote repository về, các commit sẽ được đẩy vào 1 nhánh không tên. Tuy nhiên branch này có thể checkout bằng tên FETCH_HEAD

Để đơn giản hóa fetch, bạn hãy coi fetch như 1 nhánh thông thường với

Thực hành:

Ta thấy điểm khác biệt khi dùng fetch là có thêm remote name thông thường nếu checkout sang develop và pull thì chỉ cần:

Ngoài ra ta cũng có thể thực hiện các thao tác khác trên fetch như branch thông thường, khác mỗi cái thay vì thay đổi vị trí HEAD thì ta sẽ là thay đổi vị trí của FETCH_HEAD

Một tác vụ mà bạn có thể áp dụng nhiều với fetch đó là việc lấy code từ 1 pull request của người khác. Giả sử đồng nghiệp Alice của bạn và bạn làm cùng một chức năng X. Anh ta code gần xong, đã tạo pull, bạn cần lấy code mới nhất của anh ta về từ pull đó và code tiếp. Fetch có thể là một giải pháp

  • Bước 1: Fetch code về đã

  • Bước 2: Chuyển đổi nhánh dựa vào pull request này

Ví dụ: 2 người cùng code chức năng init model ở pull số 12

Đã lấy được code của Alice, làm tiếp thôi

3. Git blame

Blame, đúng như nghĩa của nó, đây là một lệnh hữu dụng để bạn “khiển trách” đồng đội. Câu lệnh này đơn hiển thị bản sửa đổi và tác giả sửa đổi lần cuối mỗi dòng của một tệp.

Câu lệnh:

Các tùy chọn bạn có thể xem tại https://git-scm.com/docs/git-blame

Thôi khỏi nhớ tùy chọn, vì đơn giản câu lệnh này mình chủ yếu dùng xem ai viết để đi abcxyz. Nếu vậy một số package hỗ trợ trong các IDE có thể giúp bạn điều đó

  • Với Sublime text bạn có thể cài package git blame
  • Với PHPStorm, nó đã được tích hợp sẵn, việc của bạn là chỉ việc dùng (Click chuột phải vào file, Chọn Git > Annotate)

Chém gió thế thôi chứ chúng ta không nên “khiển trách” đồng đội làm gì. Đơn giản chúng ta là một team chiến thắng :v. Câu lệnh này sẽ hữu ích hơn khi bạn tìm ra người viết để trao đổi, cùng nhau giải quyết các vấn đề một cách tốt nhất để tạo ra các sản phẩm awesome

4. Một số tham số config

  • Alias: Bạn có thấy ngồi gõ cả câu lệnh git

Hơi dài dài xíu không. Thay vì thế, bạn có thể cấu hình trong config vào alias để gõ ít đi

Như vậy bạn chỉ cần $ git st hay$ git br Task/2019 hay$ git lolllà có thể làm được các tác vụ như trên. Thật tiện dụng hơn 1 chút chút xíu phải không nào

  • Config bằngpush -u

Mỗi lần push bạn lại phải điền đầy đủ cả tên remote repo và branch, như vậy có thể hơi dài nhể. Thay vào đó lần đầu bạn thêm tùy chọn -u vào câu lệnh push

Và từ lần sau chỉnh sửa, chỉ cần $ git push là được, nó sẽ tự động nhận remote repo và branch cho bạn dựa vào config.

Tài liệu tham khảo

  10 Vấn đề về Git thường gặp và Giải pháp

TopDev via Viblo