Mailing list + git format-patch + git apply can generate author != committer
In projects like the Linux kernel where patches are:
generating a single new commit with different author and committer:
- the author is who wrote the patch
- the committer is who is a project maintainer, and who merged the patch
See for example this randomly selected patch and the corresponding commit:
Git web interfaces like GitHub and GitLab may or may not generate author != committer
Since Git(Hub|Lab) hold both the upstream and the fork repositories on a the same machine, they can automatically do anything that you can do locally as well, including either of:
- Create a merge commit. - Does not generate author != committer. - Keeps the SHA or the new commit intact, and creates a new commit: - * Merge commit (committer == author == project maintainer)
|\
| * Feature commit (committer == author == contributor)
|/
* Old master (random committer and author)
 - Historically, this was the first available method on GitHub. - Locally, this is done with - git merge --no-ff.
 - This produces two commits per pull request, and keeps a fork in the git history. 
- rebase on top of - master
 - GitHub also hacks the commits to set committer == whoever pressed the merge button. This is not mandatory, and not even done by default locally by - git rebase, but it gives accountability to the project maintainer.
 - The git tree now looks like: - * Feature commit (committer == maintainer, author == contributor)
|
* Old master (random committer and author)    
 - which is exactly like that of the - git applyemail patches.
 
On GitHub currently:
- you choose the method when merging via the dropdown on the merge button
- methods can be enabled or disabled on the repo settings by the owner
https://help.github.com/articles/about-merge-methods-on-github/
How to set the committer of a new commit?
The best I could find was using the environment variables to override the committer:
GIT_COMMITTER_NAME='a' GIT_COMMITTER_EMAIL='a' git commit --author 'a <a>'
How to get the committer and commit date of a given commit?
Only author data shows by default on git log.
To see the committer date you can either:
- format the log specifically for that: - git log --pretty='%cn %cd' -n1 HEAD
 - where - cnand- cdstand for- Committer Nameand- Committer Date
 
- use the - fullerpredefined format:
 - git log --format=fuller
 - See also: How to configure 'git log' to show 'commit date' 
- go low level and show the entire commit data: - git cat-file -p HEAD
 
How to set the committer date of a new commit?
git commit --date only sets the author date: for the committer date the best I could find was with the environment variable:
GIT_COMMITTER_DATE='2000-01-01T00:00:00+0000' git commit --date='2000-01-01T00:00:00+0000'
See also: What is the difference between author and committer in Git?
How Git stores author vs committer internally?
See: What is the file format of a git commit object?
Basically, the commit is a text file, and it contains two line separated fields:
author {author_name} <{author_email}> {author_date_seconds} {author_date_timezone}
committer {committer_name} <{committer_email}> {committer_date_seconds} {committer_date_timezone}
This makes it clear that both are two completely independent data entries in the commit object.