Sự khác biệt giữa git am và git áp dụng là gì?


134

Cả hai git amgit applycó thể được sử dụng để áp dụng các bản vá. Tôi không thấy sự khác biệt. Bây giờ tôi thấy một sự khác biệt: git amtự động xác nhận trong khi git applychỉ chạm vào các tệp nhưng không tạo ra một cam kết. Đó có phải là sự khác biệt duy nhất?


11
amcó thể được coi là viết tắt của Apply Mail...
Philip Oakley

Câu trả lời:


144

Cả đầu vào và đầu ra đều khác nhau:

  • git applylấy một bản vá (ví dụ đầu ra của git diff) và áp dụng nó vào thư mục làm việc (hoặc chỉ mục, nếu --indexhoặc --cachedđược sử dụng).
  • git amlấy một hộp thư xác nhận được định dạng dưới dạng một email (ví dụ: đầu ra của git format-patch) và áp dụng chúng cho chi nhánh hiện tại.

git amsử dụng git applyđằng sau hậu trường , nhưng thực hiện nhiều công việc hơn trước (đọc một Maildirhoặc mbox, và phân tích thông điệp email) và sau (tạo cam kết).


6
Lưu ý: git applydường như cũng chấp nhận git format-patchđầu ra.
Ciro Santilli 郝海东 冠状 病 事件

7
git applycũng sẽ hoạt động cho đầu ra git format-patchnhưng các thay đổi sẽ không được thực hiện và sẽ cần phải được cam kết (do đó tạo ra một điểm cam kết khác trong chỉ mục mà chúng được áp dụng). Với git ambạn sẽ mang thông tin cam kết (cùng với tác giả, v.v.) vào chỉ mục mà nó được áp dụng. git applysau đó là để vá repo của bạn (xấu), git amcó thể thực hiện các thay đổi tính năng hợp pháp và đưa nó vào repo của bạn (phương pháp ưa thích).
Prasoon Joshi

18

git applylà để áp dụng các khác biệt thẳng (ví dụ từ git diff) trong khi đó git amlà để áp dụng các bản vá và chuỗi các bản vá từ email, có định dạng mbox hoặc Maildir và là "đối diện" của git format-patch. git amcố gắng trích xuất thông điệp cam kết và chi tiết về tác giả từ thông điệp email, đó là lý do tại sao nó có thể thực hiện cam kết.


9

Với git ambạn áp dụng bản vá, vì vậy nếu bạn sử dụng, git statusbạn sẽ không thấy bất kỳ thay đổi cục bộ nào.

git applyDo đó, cho phép bạn thực hiện các thay đổi trong tệp nguồn như thể bạn đang tự viết mã, git statusgit diffsẽ đưa ra các thay đổi được thực hiện trong bản vá bạn đã áp dụng, sau đó bạn có thể sửa / thêm nhiều thay đổi và gửi chúng cùng nhau như một bản vá mới .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.