Câu trả lời:
Cả đầu vào và đầu ra đều khác nhau:
git apply
lấ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 --index
hoặc --cached
được sử dụng).git am
lấ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 am
sử 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 Maildir
hoặc mbox
, và phân tích thông điệp email) và sau (tạo cam kết).
git apply
dường như cũng chấp nhận git format-patch
đầu ra.
git apply
cũng sẽ hoạt động cho đầu ra git format-patch
như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 am
bạ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 apply
sau đó là để vá repo của bạn (xấu), git am
có 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).
git apply
là để áp dụng các khác biệt thẳng (ví dụ từ git diff
) trong khi đó git am
là để á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 am
cố 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.
Với git am
bạn áp dụng bản vá, vì vậy nếu bạn sử dụng, git status
bạn sẽ không thấy bất kỳ thay đổi cục bộ nào.
git apply
Do đó, 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 status
và git diff
sẽ đư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 .
am
có thể được coi là viết tắt củaApply Mail
...