2016-05-16 12 views

Trả lời

64

UserA là người thực sự thực hiện các thay đổi. UserB là người đã cam kết những thay đổi đó cho chi nhánh này. tức là nếu UserA cam kết các thay đổi của mình đối với branch1, UserB đến, cam kết một vài thay đổi đối với branch2, rebases branch1 với branch2. Bây giờ, các cam kết trên cùng trong branch1 sẽ cho thấy rằng UserA đã cam kết những thay đổi này với UserB.

Chỉnh sửa: Điều này chủ yếu xảy ra trong quá trình rebasing và chọn cherry, vì tác giả và người đóng góp có thể khác trong các quy trình này.

+2

Ngoài ra còn có 'git commit --author = ' ghi đè tác giả cam kết. Một số GUI như PhpStorm của Jetbrains cho phép tùy chọn đó từ cửa sổ cam kết; nó thường đi kèm với một trình đơn thả xuống tự động hoàn thành có thể bị tình cờ truy cập trước khi gửi biểu mẫu cam kết. –

8

Câu trả lời của @ venkatKA là chính xác và mang tính mô tả nhưng tôi nghĩ tôi sẽ thêm một vài chi tiết.

git cat-file -p HEAD có thể được sử dụng để in ra thông tin về các cam kết

tree d85ed3c3a055c95445898a5119ea0a532459fdsf 
parent 0b6ed951b2c04b4134c91ffa053b4330edfdffc1 
author AuthA <[email protected]> 1487356245 +0000 
committer AutbB <[email protected]> 1487356245 +0000 

Nếu bạn muốn sửa chữa committers lịch sử (ví dụ nếu bạn đang thay đổi danh tính của bạn) sau đó bạn có thể sử dụng:

git filter-branch -f --tree-filter "GIT_COMMITTER_NAME='New Author'; GIT_COMMITTER_EMAIL='New Author'" 

Các ý kiến ​​tiêu chuẩn về việc phá vỡ lịch sử phá vỡ và lý do tại sao chủ nghĩa revisionism là một ý tưởng tồi được áp dụng.

+4

Bạn cũng có thể 'git show --format = full' hoặc' git show --format = fuller' (hoặc sử dụng cùng các đối số '--format' với' git log') để xem cả tác giả và người commit. – torek

0

Một lý do khác có thể xảy ra sau sự cố này là sử dụng các biến số en2 $GIT_AUTHOR_NAME$GIT_AUTHOR_EMAIL.

Khi các biến này được đặt, chúng ghi đè phần tác giả của mọi cam kết trở lên bất kể giá trị user.nameuser.email cấu hình được đặt cục bộ. Trong trường hợp này, khi bạn nhấn git cat-file -p HEAD, tác giả hiển thị giá trị của $GIT_AUTHOR_NAME và người ghi hiển thị giá trị của cấu hình user.name cục bộ. Vì vậy, bạn sẽ cần phải xóa các dòng xuất các biến này trong .bashrc hoặc .zshrc hoặc nếu bạn muốn giữ lại các dòng đó nhưng không muốn điều này xảy ra, hãy chèn unset GIT_AUTHOR_NAME && unset GIT_AUTHOR_EMAIL trước khi chạy git commit.

Các vấn đề liên quan