nhat.dev
  • Tin tức
  • Dịch vụ
  • Lập trình
    • ReactJS
    • React Native
    • Angular
    • VueJS
  • Hackintosh
    • Hackintosh
    • Opencore
  • Liên hệ
No Result
View All Result
  • Đăng nhập
logo nhat.dev
  • Tin tức
  • Dịch vụ
  • Lập trình
    • ReactJS
    • React Native
    • Angular
    • VueJS
  • Hackintosh
    • Hackintosh
    • Opencore
  • Liên hệ
No Result
View All Result
nhat.dev
No Result
View All Result
Home Lập trình

Phân biệt một số câu lệnh cơ bản trong git

Nhat Tran by Nhat Tran
26 Tháng Hai, 2020
Phân biệt một số câu lệnh cơ bản trong git
481
SHARES
1.5k
VIEWS
Chia sẻ lên FacebookChia sẻ lên Twitter

Khi mới tìm hiểu về git, bạn có nhận thấy một số câu lệnh trong git có chức năng kha khá giống nhau và bạn đã bao giờ thắc mắc về sự khác biệt giữa chúng là gì chưa? Từ kiến thức của bản thân cũng như nhặt nhạnh một số tài liệu trên mạng, hôm nay mình sẽ viết một bài viết để giúp các bạn phân biệt một số lệnh cơ bản trong git.

Git pull vs git fetch

Trước khi chúng ta nói về sự khác biệt giữa hai lệnh này, chúng ta hãy nhấn mạnh sự tương đồng của chúng đó là: cả hai đều được sử dụng để tải xuống dữ liệu mới từ một kho lưu trữ từ xa (remote repository). Việc tải xuống các dữ liệu mới về máy của bạn là vô cùng cần thiết, bởi vì khi thực hiện clone một dự án từ remote repository, thì các dữ liệu đó chỉ là một “snapshot” tại thời điểm bạn clone dự án mà thôi. Do vậy, khi có các thay đổi trên remote repository thì chúng cần được tải về trong local repository của bạn. Lúc này chúng ta có thể sử dụng** git fetch** hoặc git pull để thực hiện việc này. Vậy sự khác biệt của hai câu lệnh này là gì ?

Có thể bạnquan tâm

15 câu lệnh cần biết khi thao tác với server Linux

JavaScript Memoization là gì? Tối ưu Javascript

Redis là gì?

Git fetch: Khi chạy câu lệnh git fetch <remote_origin>, Git sẽ tải về dữ liệu của tất cả các branch của repository trên remote server nằm tại địa chỉ quy định bởi <remote_origin> và cập nhật dữ liệu này với dữ liệu của cách branch phía dưới máy local. Tuy nhiên git fetch không cập nhật dữ liệu của working directory .Điều này có nghĩa là nếu như có bất cứ thay đổi (commit) nào trên remote server thì chúng cũng không ảnh hưởng tới các tập tin, thư mục của bạn

Git pull: Khi chạy câu lệnh git pull <remote_origin> <branch_name>, Git sẽ thực hiện việc fetch dữ liệu của remote repository tại nhánh <branch_name> từ server nằm tại địa chỉ quy định bởi <remote_origin> và áp dụng (merge) các thay đổi này vào thư mục và tập tin ở working directory.
Git pull luôn cố gắng tự động trộn các thay đổi (auto merge) vì thế việc này có thể dẫn đến conflict.

Git reset vs git revert

Trong quá trình phát triền phần mềm, thì chúng ta thường không thể tránh khỏi việc sử dụng phải rollback một số commit bị lỗi. Trong trường hợp này, chúng ta sẽ có 2 phương pháp chính để giải quyết, đó là : git reset và git revert

Git reset: Git reset được dùng để quay về một điểm commit nào đó, đồng thời xóa lịch sử của các commit trước nó.
Cùng xét ví dụ dưới đây để hiểu rõ hơn về git reset:

Giả sử, lịch sử commit của bạn có các điểm commit như trên (A, B, C ,D) tương ứng với các commit_id phía trên . A , B là các commi đang hoạt động bình thường, và C, D là các commit gặp vấn đề. Lúc này bạn có thể quay trở về commit B bằng câu lệnh

git reset --hard a0fvf8

Sau khi chạy xong câu lệnh trên , ta có kết quả :

Bạn có thể thấy , con trỏ HEAD đang trỏ đến vị trí của commit B, đồng thời lịch sử commit C và D cũng biến mất, giống như bạn chưa từng thực hiện commit bị lỗi nào vậy. Lịch sử commit cũng trông gọn gàng hơ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 bạn cần phải thực hiện lệnh:

git push -f

Git revert: Đó là với** git reset**, vậy còn git revert thì sao ? git revert không làm mất các commit , thay vào đó sẽ tạo thêm commit mới, có nội dung giống hệt với commit bạn muốn quay trở về.

Vẫn với trường hợp như với git reset, điều chúng ta cần thực hiện là revert về commit D, rồi tiếp tục revert về commit C.

git revert 5lk4er
git revert 76sdeb

Kết quả sau khi lần lượt chạy 2 lệnh trên:

Ở đây, chúng ta có thể thấy rằng đã có thêm 2 commit mới D’ và C’ được tạo ra.
Như vậy, git reset thì xóa lịch sử commit giúp lịch sử trông gọn gàng hơn, còn git revert sẽ tạo ra thêm commit mới đồng thời giữ lại lịch sử commit trước đó.

Git reset, git reset –soft, git reset –hard

Như đã phân biệt giữa git reset và git revert ở trên thì chúng ta đã biết tác dụng git reset. Tuy nhiên, tùy thuộc vào hoàn cảnh cũng như mục đích mà chúng ta lại cần reset với các chế độ khác nhau ( ví dụ như có giữ lại các thay đổi trước đó hay không), do vậy git cung cấp cho ta 3 lựa chọn đi kèm là : –soft, –hard, –mixed

  • Git reset <commit_id>: Di chuyển con trỏ HEAD về vị trí commmit reset và vẫn** giữ nguyên tất cả các thay đổi của file**, nhưng loại bỏ các thay đổi khỏi stage.
  • Git reset –soft <commit_id> : Lệnh này chỉ di chuyển HEAD về vị trí commit. Trạng thái của stage và tất cả sự thay đổi của file sẽ được giữ nguyên.
  • Git reset –hard <commit_id> : Di chuyển con trỏ HEAD về vị trí commmit reset và loại bỏ tất cả sự thay đổi của file.
Tags: git
Bài viết trước

Mô hình Kano là gì? Áp dụng mô hình Kano trong cách code như nào?

Bài viết sau

Những thủ thuật jQuery bạn nên biết

Nhat Tran

Nhat Tran

Chia sẻ vài thứ hay ho bản thân tìm hiểu và tìm kiếm được đến mọi người

Bài viết sau
Những thủ thuật jQuery bạn nên biết

Những thủ thuật jQuery bạn nên biết

Subscribe
Notify of
guest
guest
0 Comments
Inline Feedbacks
View all comments

Recommended.

Authentication trong ReactJs, VueJs – nên lưu Token ở đâu?

Authentication trong ReactJs, VueJs – nên lưu Token ở đâu?

15 Tháng Tám, 2019
Cách “lách” bản quyền âm thanh và hình ảnh video Youtube 2020

Cách “lách” bản quyền âm thanh và hình ảnh video Youtube 2020

2 Tháng Mười Một, 2020

Trending.

Hướng dẫn cài macOS trên Laptop, PC 2019

Hướng dẫn cài macOS trên Laptop, PC 2019

6 Tháng Chín, 2020
Chuẩn bị kiến thức cơ bản trước khi “vọc” hackintosh

Hướng dẫn tạo bộ cài vanilla hackintosh dễ dàng nhất

6 Tháng Ba, 2020
Chuẩn bị kiến thức cơ bản trước khi “vọc” hackintosh

Phần cứng phù hợp với Hackintosh macOS

30 Tháng Mười Một, 2019
Chuẩn bị kiến thức cơ bản trước khi “vọc” hackintosh

Cài đặt Clover vào ổ cứng sau khi cài macOS

30 Tháng Mười Một, 2019
Chuẩn bị kiến thức cơ bản trước khi “vọc” hackintosh

Kích hoạt âm thanh trong hackintosh với AppleALC

30 Tháng Mười Một, 2019
nhat.dev

© 2019 nhat.dev

Chia sẻ chút kiến thức, kinh nghiệm, thủ thuật mà bản thân đã tìm hiểu và đọc được với mọi người

  • About me
  • Privacy & Policy
  • Advertise
  • Contact

Theo dõi tôi

No Result
View All Result
  • Tin tức
  • Dịch vụ
  • Lập trình
    • ReactJS
    • React Native
    • Angular
    • VueJS
  • Hackintosh
    • Hackintosh
    • Opencore
  • Liên hệ

© 2019 nhat.dev

Xin chào

Sign In with Facebook
OR

Đăng nhập bằng SSO Nhatdev

Quên mật khẩu?

Create New Account!

Fill the forms below to register

All fields are required. Đăng nhập

Lấy lại mật khẩu

Vui lòng nhập tên người dùng hoặc địa chỉ email của bạn để đặt lại mật khẩu của bạn.

Đăng nhập