为啥会有author 和 committer 区别

%an(author name)%cn(committer name)通常相同,除非你是以协作方式提交(如代他人提交代码)。
个人理解 :因为存在协作方式提交,自己的代码可能被别人提交,为了保留自己的信息,所以引入了author这个概念,为了标记谁提交的代码,有了committer

字段 含义 说明
%an(Author Name) 原始作者 谁写了这段代码(最初提交的人)
%cn(Committer Name) 实际提交者 谁执行了这次 git commit 操作

author(作者)

author 是最初编写该提交内容的人,通常是你用 git commit 提交时设置的名字。

git config --global user.name "YourName"
git config --global user.email "your@email.com"

✅ 自己提自己代码
git commit -m "fix: bug in login"
# %an = Your Name (👨‍💻自己)
# %cn = Your Name (👨‍💻自己)

Committer(提交者)

最终将改动合并进仓库的人。

git cherry-pick abc1234  # 你 cherry-pick 别人代码
# %an = Other Perso(🧔该提交的原始作者)
# %cn = Your Name  (👨‍💻执行 cherry-pick 操作的是你)

git checkout feature # 注:feature是别人提交的代码
git rebase main      # 你帮别人 rebase 代码(将feature分支的提交基于main分支重新应用)
# %an = Other Person(🧔不会改变) 📌即使你修改了代码内容(因为冲突),Git 不会自动更改 author
# %cn = Your Name	(👨‍💻执行 rebase 操作的是你)

git merge --no-commit feature # 你 --no-commit merge别人代码
git commit -m "commit commit"
# %an = Your Name(👨‍💻你是最终手动提交的人)
# %cn = Your Name(👨‍💻你是最终手动提交的人)

git merge --squash feature # 你 --squash merge别人代码
git commit -m "commit commit"
# squash 合并丢弃原始提交信息,新提交由你创建
# %an = Your Name(👨‍💻你是最终手动提交的人)
# %cn = Your Name(👨‍💻你是最终手动提交的人)

git merge --ff-only release # 你 --ff-only merge 别人代码
# 快进成功 ⇒ 没有新提交,只是移动指针,不修改任何提交内容
# %an = Other Person(🧔不会改变)
# %cn = Other Person(🧔不会改变)

git merge --no-ff release # 你 --no-ff merge 别人代码
# %an = Your Name(👨‍💻你是最终提交的人)
# %cn = Your Name(👨‍💻你是最终提交的人)
git merge --no-ff --author="Original Author <email>" release ✅ 如果想保留原作者信息
# %an = Other Perso(🧔手动设置合并提交的 author 为原始贡献者)
# %cn = Your Name  (👨‍💻实际执行合并的人)

git merge release # 你将 release 分支合并到当前分支
git merge --ff release # 你 --ff merge 别人代码
# 依赖到底 ff 还是 no-ff

代码托管平台 Pull Request 合并

Pull Request 合并 (GitHub/Gitee 等平台自动设置 committer)

Create a merge commit(默认合并方式):创建一个合并提交,保留原始分支的所有提交历史。
# author (%an) = 👨‍💻点击“Merge”按钮的人(即你)
# committer (%cn) = 👨‍🔧平台系统账号(如 GitHub 的 web-flow 或 github-actions[bot])

Squash and merge:将 PR 所有提交压缩成一个新提交,然后合并到目标分支。
# author (%an) = 👨‍💻点击“Merge”按钮的人(即你)
# committer (%cn) = 👨‍🔧平台系统账号(如 GitHub 的 web-flow 或 github-actions[bot])

Rebase and merge:将 PR 分支 rebase 到目标分支上,线性地合并所有原始提交
# author (%an) = 🧔原始提交的作者
# committer (%cn) = 👨‍🔧平台系统账号(如 GitHub 的 web-flow 或 github-actions[bot])

更多推荐