Git squash là gì

Cả hai git merge --squashvà git rebase --interactivecó thể tạo ra một cam kết "đè bẹp".
Nhưng họ phục vụ các mục đích khác nhau.

  • git merge --squash abranch

sẽ tạo ra một cam kết bị đè bẹp trên nhánh đích, mà không đánh dấu bất kỳ mối quan hệ hợp nhất nào.
[Lưu ý: nó không tạo ra một cam kết ngay lập tức: bạn cần một bổ sung git commit -m "squash branch"]
Điều này hữu ích nếu bạn muốn loại bỏ hoàn toàn nhánh nguồn, đi từ [lược đồ lấy từ câu hỏi SO ]:

git checkout stable X stable / a---b---c---d---e---f---g tmp

đến:

git merge --squash tmp git commit -m "squash tmp" X-------------------G stable / a---b---c---d---e---f---g tmp

và sau đó xóa tmpchi nhánh.

phát lại một số hoặc tất cả các cam kết của bạn trên một cơ sở mới, cho phép bạn xóa sổ [hoặc gần đây là "sửa chữa", xem câu hỏi SO này ], trực tiếp đến:

git checkout tmp git rebase -i stable stable X-------------------G tmp / a---b

Nếu bạn chọn đè bẹp tất cả các cam kết của tmp[nhưng ngược lại merge --squash, bạn có thể chọn phát lại một số và xóa các số khác].

Vì vậy, sự khác biệt là:

  • mergekhông chạm vào nhánh nguồn của bạn [ tmpở đây] và tạo một cam kết duy nhất ở nơi bạn muốn.
  • rebasecho phép bạn tiếp tục trên cùng một nhánh nguồn [tĩnh tmp] với:
    • một căn cứ mới
    • một lịch sử sạch hơn

Trong Git, thuật ngữ Squash được sử dụng để dồn những commit trước đó thành một. Nó không phải là một lệnh ; thay vào đó, nó là một từ khóa. Squash là một kỹ thuật tuyệt vời cho những biến hóa đơn cử theo nhóm trước khi chuyển tiếp chúng cho những người khác. Bạn hoàn toàn có thể hợp nhất nhiều commit thành một commit duy nhất bằng lệnh rebase tương tác mê hoặc .

Nếu bạn là người dùng Git, thì bạn hẳn đã nhận ra tầm quan trọng của việc xóa một commit. Đặc biệt nếu bạn là một người đóng góp mã nguồn mở, thì nhiều lần, bạn phải tạo một PR [pull request] với commit bị bóp nghẹt. Bạn cũng có thể xóa các commit nếu bạn đã tạo PR.

Bạn đang đọc: Tự học Git | Squash trong git » //chickgolden.com

Hãy cùng tìm hiểu và khám phá làm thế nào để Squash commit ?

1. Commit Squash

Là một người góp phần có nghĩa vụ và trách nhiệm cho Git, cần phải làm cho quy trình cộng tác hiệu suất cao và có ý nghĩa. Git được cho phép một số ít công cụ cộng tác can đảm và mạnh mẽ theo nhiều cách khác nhau. Git squash là một trong những công cụ can đảm và mạnh mẽ giúp tương hỗ cộng tác hiệu suất cao và ít đau đớn hơn .
squash không phải là lệnh ; thay vào đó, nó là một trong nhiều tùy chọn có sẵn cho bạn để giảm giá tương tác git. squash được cho phép tất cả chúng ta viết lại lịch sử vẻ vang. Giả sử tất cả chúng ta đã triển khai nhiều commit trong quy trình thao tác của dự án Bất Động Sản, việc dồn toàn bộ những commit thành một commit lớn là lựa chọn đúng đắn hơn là thúc ép. Chúng ta hãy hiểu làm thế nào để squash hai commit .

Bước 1: Kiểm tra lịch sử commit

Để kiểm tra lịch sử dân tộc commit, hãy chạy lệnh dưới đây :

git log --oneline

Lệnh đã cho sẽ hiển thị lịch sử vẻ vang trong một dòng. Chúng ta hoàn toàn có thể theo dõi lịch sử dân tộc và chọn những commit mà tất cả chúng ta muốn xóa. Hãy xem xét đầu ra dưới đây :

Bước 2: Chọn các commit để squash.

Giả sử tất cả chúng ta muốn xóa những commit ở đầu cuối. Để xóa những commit, hãy chạy lệnh dưới đây :

git rebase -i HEAD ~ 3

Lệnh trên sẽ mở trình soạn thảo văn bản mặc định của bạn và sẽ xóa ba lần commit sau cuối. Trình chỉnh sửa sẽ mở như sau :

Từ hình ảnh trên, chúng ta có thể thấy các commit trước đó được hiển thị ở đầu trình chỉnh sửa. Nếu chúng ta muốn hợp nhất chúng thành một commit duy nhất, thì chúng ta phải thay thế từ pick bằng squash trên đầu trình soạn thảo. Để viết trên trình chỉnh sửa, nhấn nút ‘ i ‘ để vào chế độ chèn. Sau khi chỉnh sửa tài liệu, nhấn : wq để lưu và thoát khỏi trình chỉnh sửa .

Bước 3: Cập nhật các commit

Khi nhấn phím enter, một cửa sổ mới của trình soạn thảo văn bản sẽ được mở để xác nhận commit. Chúng ta có thể chỉnh sửa thông báo commit trên màn hình này.

Tôi đang chỉnh sửa thông tin commit tiên phong của mình vì nó sẽ là sự tích hợp của cả ba commit. Hãy xem xét hình ảnh dưới đây :

Hình ảnh trên là màn hình trình chỉnh sửa để xác nhận việc hợp nhất các commit. Tại đây chúng ta có thể cập nhật các thông báo commit. Để chỉnh sửa trên trình soạn thảo này, hãy nhấn nút ‘ i ‘ cho chế độ chèn và chỉnh sửa văn bản mong muốn. Nhấn các phím : wq, để lưu và thoát khỏi trình chỉnh sửa.

Xem thêm: Puppeteer là gì

Khi tất cả chúng ta thoát khỏi trình chỉnh sửa, nó sẽ hiển thị miêu tả về những bản update. Hãy xem xét đầu ra dưới đây :

Kết quả ở trên liệt kê miêu tả những biến hóa đã được thực thi trên kho tàng trữ. Bây giờ, những commit đã bị bóp nghẹt. Kiểm tra lịch sử vẻ vang commit để xác nhận với sự trợ giúp của nhật ký git. Hãy xem xét đầu ra dưới đây :

Tham khảo:

//blog.codecamp.jp/git_rebase

Git Re-base

Đối với những người mới sử dụng git thì chắc chắn cái khiến anh em chúng ta đau đầu nhất là merge và rebase . Nghe giải thích sơ qua thì có vẻ giống nhau đó là chức năng để kết hợp lại từ nhánh gốc nào đó , ông rebase còn được biết sẽ giúp commit được sạch sẽ hơn . Tuy nhiên nếu dùng rebase bằng phương pháp sai thì cũng rất dễ bị anh em xung quanh ác cảm . Thế nên ở bài này tôi sẽ xin phép giới thiệu sơ qua về chức năng rebase này nhé .

Mục lục

1.1 git rebase là gì ? 1.2 Các điểm chú ý git rebase? 1.3 Merge với rebase khác nhau gì ? 1.4 Cách phân biệt merge và rebase

Git Rebase là một chức năng được dùng khi gắn nhánh đã hoàn thành công việc vào nhánh gốc . Về mặt nội dung thì là việc điều chỉnh nhánh công việc gắn vào với nhánh gốc nên các commit sẽ được đăng kí theo thứ tự gắn vào . Chính vì thế sẽ có đặc trưng là dễ nhìn hơn sau khi xác nhận commit .

  • Những điểm cần chú ý ở git rebase

Thông thường thì chúng ta sẽ thực hiện công việc gắn các nhanh con vào nhánh gốc nhưng khi chúng ta làm ngược lại thì tức là sẽ cho ra 1 kết quả cực kì tệ hại . Đó là tất cả các nhánh sẽ bị xóa hết và chỉ còn lại nhánh gốc . Nếu đây là một điều làm trong dự án thì chắc chắn sẽ bị mọi người comment .

Ví dụ rebase sai

  • Khác nhau giữa merge và rebase Tích hợp các nhánh với nhau chúng ta sẽ có 2 phương pháp là merge và rebase . Nếu so với rebase thì merge là cách có thể tích hợp với master với rất nhiều nhánh trong 1 lần . Tuy nhiên trường hợp tích hợp bằng merge thì những commit của branch sẽ hoàn toàn không được record lại . Do vậy nếu chúng ta muốn lưu lại một cách chuẩn xác flow của dự án thì Rebase là phương pháp được recommend.

  • Cách phân biệt giữa rebase và merge ###Những ai thích rebase

Với những dự án mà member đã quen với Git và muốn lưu giữ lại tất cả những record thì rebase là tốt hơn . Nếu có member dự án không nằm trong công ty thì do trao đổi với nhau sẽ rất khó nên rebase sẽ phát huy lợi thế trong lúc này

Những ai thích merge

Với những dự án nào member chưa quen dùng Git thì tất nhiên merge là 1 sự lựa chọn sáng suốt . Tuy nhiên sẽ phải bù lại phần git commit ko được lưu lại bằng mail hoặc chat nội bộ

*** Summary***

Về mặt cơ bản thì chỉ cần nghĩ khi sử dụng Rebase nếu có nhầm lẫn nào đó thì các branch sẽ bị xóa hết , chỉ cần nghĩ như vậy và làm cẩn thận thì chắc chắ sẽ không có vấn đề gì lớn xảy ra . Quan trọng vẫn là mindset của member khi làm dự án cũng như skill Ho-ren-so khi thực hiện một thao tác nào đó lên nhánh gốc

Trong hướng dẫn này, sẽ sử dụng local repository mà lịch sử trước đó đã được chuẩn bị

Hãy tải xuống từ đây.

Di chuyển đến thư mục stepup-tutorial/tutorial7. Lịch sử của repository này là trạng thái hiển thị bằng sơ đồ phía dưới.

Tại đây, sẽ tổng hợp tất cả commit của branch issue1 thành 1 commit rồi mang vào branch master.

Sau khi di chuyển vào branch master, hãy chỉ định lựa chọn --squash rồi thực hiện merge.

$ git checkout master Switched to branch 'master' $ git merge --squash issue1 Auto-merging sample.txt CONFLICT [content]: Merge conflict in sample.txt Squash commit -- not updating HEAD Automatic merge failed; fix conflicts and then commit the result.

Vì sẽ phát sinh xung đột nên hãy mở sample.txt, chỉnh sửa những chổ xung đột rồi sau đó hãy thực hiện commit.

$ git add sample.txt $ git commit [master 0d744a7] Conflicts: sample.txt 1 files changed, 4 insertions[+], 0 deletions[-]

Bây giờ, cái đã tổng hợp tất cả commit trên branch issue1 thành 1 cái đó sẽ được thêm vào branch master. Hãy kiểm tra lịch sử bằng lệnh log.

Video liên quan

Chủ Đề