Để cập nhật yêu cầu kéo
Để cập nhật yêu cầu kéo (điểm # 1), điều duy nhất bạn cần làm là kiểm tra cùng một nhánh, yêu cầu kéo là từ và đẩy lại nó:
cd /my/fork
git checkout master
...
git commit -va -m "Correcting for PR comments"
git push
Tùy chọn - Làm sạch lịch sử cam kết
Bạn có thể được yêu cầu xóa các cam kết của mình với nhau để lịch sử kho lưu trữ sạch sẽ hoặc chính bạn muốn xóa các cam kết trung gian làm mất tập trung vào "thông điệp" trong yêu cầu kéo của bạn (điểm # 2). Ví dụ: nếu lịch sử cam kết của bạn trông như thế này:
$ git remote add parent git@github.com:other-user/project.git
$ git fetch parent
$ git log --oneline parent/master..master
e4e32b8 add test case as per PR comments
eccaa56 code standard fixes as per PR comments
fb30112 correct typos and fatal error
58ae094 fixing problem
Đó là một ý tưởng tốt để kết hợp mọi thứ lại với nhau để chúng xuất hiện dưới dạng một cam kết duy nhất:
$ git rebase -i parent/master
Điều này sẽ nhắc bạn chọn cách viết lại lịch sử yêu cầu kéo của bạn, phần sau đây sẽ có trong trình chỉnh sửa của bạn:
pick 58ae094 fixing actual problem
pick fb30112 correct typos
pick eccaa56 code standard fixes
pick e4e32b8 add test case as per PR comments
Đối với bất kỳ cam kết nào bạn muốn là một phần của cam kết trước đó - thay đổi chọn thành squash:
pick 58ae094 fixing actual problem
squash fb30112 correct typos
squash eccaa56 code standard fixes
squash e4e32b8 add test case as per PR comments
Và đóng trình soạn thảo của bạn. Git sau đó sẽ viết lại lịch sử và nhắc bạn cung cấp một thông điệp cam kết cho một cam kết kết hợp. Sửa đổi cho phù hợp và lịch sử cam kết của bạn bây giờ sẽ được súc tích:
$ git log --oneline parent/master..master
9de3202 fixing actual problem
Đẩy nó vào ngã ba của bạn:
$ git push -f
Counting objects: 19, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (11/11), 978 bytes, done.
Total 11 (delta 9), reused 7 (delta 6)
To git@github.com:me/my-fork.git
f1238d0..9de3202 HEAD -> master
và yêu cầu kéo của bạn sẽ chứa một cam kết duy nhất, kết hợp tất cả các thay đổi được chia thành nhiều lần trước đó.
Thay đổi lịch sử trên repos công cộng là một điều xấu
Viết lại lịch sử và sử dụng git push -f
trên một nhánh, có khả năng, một người khác đã được nhân bản là một điều xấu - nó khiến lịch sử của kho lưu trữ và của thanh toán bị phân kỳ.
Tuy nhiên, sửa đổi lịch sử của ngã ba của bạn để sửa đổi thay đổi mà bạn đang đề xuất được tích hợp vào kho lưu trữ - là một điều tốt. Vì vậy, không có đặt phòng loại bỏ "tiếng ồn" ra khỏi yêu cầu kéo của bạn.
Một lưu ý trên cành
Trong phần trên tôi cho thấy yêu cầu kéo là đến từ master
nhánh ngã ba của bạn, không có gì sai với điều đó nhất thiết nhưng nó tạo ra một số hạn chế nhất định, nếu đây là kỹ thuật tiêu chuẩn của bạn, chỉ có thể mở một PR cho mỗi kho lưu trữ . Mặc dù vậy, đó là một ý tưởng tốt hơn để tạo một chi nhánh cho từng thay đổi cá nhân mà bạn muốn đề xuất:
$ git branch feature/new-widgets
$ git checkout feature/new-widgets
...
Hack hack hack
...
$ git push
# Now create PR from feature/new-widgets
master
cũng là một nhánh, vì vậy về mặt kỹ thuật nó không thành vấn đề :)