我想知道如果没有提供改变提交者的标志/命令,在哪些情况下git会改变提交者?
我创建了一些提交,创建了一个合并请求/拉取请求。其他人负责管理所有的重定基和一些合并冲突等。当我们后来寻找一些提交的时候,我们看到作者被改成了第二个人,但是我不认为他们是故意的。
aurhwmvo1#
Git不会改变提交。Git真的 * 不能 * 改变提交。所以你根本就问错了问题。幸运的是,你的上下文提供了一些线索,让你知道你想问什么问题,那就是:
git rebase和git cherry-pick都可以复制提交,并且都使用相同的策略--事实上,git rebase在git rebase的某些版本中确实调用了git cherry-pick,而在其他版本中,它共享了足够多的代码,可以认为它们在这里是相同的。这两个命令通常都以你(不管你是谁,运行git rebase或git cherry-pick的人)作为 committer,而以原作者作为 author 来创建新提交。由于Git将这些作为两个独立的实体来存储每个提交,所以这样做很好。像GitHub这样的网站通常会为复制的提交显示两个用户,尽管这种显示取决于托管网站。有一个很大的例外,那就是当使用--reset-author作为标志时,但您确实说过要排除标志。这里还有另一个问题,但不是Git问题,而是特定于托管站点的问题:
git rebase
git cherry-pick
--reset-author
这些答案会因托管站点的不同而不同。值得注意的是,如果你使用REBASE AND MERGE或SQUASH AND MERGE合并模式,GitHub会生成新的提交。前者有效地使用了git rebase,1所以它的行为就像一个强制的rebase后跟一个git merge。后者有效地使用了git merge --squash。这会生成一个新的提交,其中“你”(使用点击Web按钮的人)既是作者又是提交者。1“Efficiently”,因为GitHub使用自己的代码加上libgit 2来做一切,而不是使用命令行Git。
git merge
git merge --squash
1条答案
按热度按时间aurhwmvo1#
Git不会改变提交。Git真的 * 不能 * 改变提交。所以你根本就问错了问题。幸运的是,你的上下文提供了一些线索,让你知道你想问什么问题,那就是:
当使用Git命令复制提交时,Git什么时候会更改作者字段?
git rebase
和git cherry-pick
都可以复制提交,并且都使用相同的策略--事实上,git rebase
在git rebase
的某些版本中确实调用了git cherry-pick
,而在其他版本中,它共享了足够多的代码,可以认为它们在这里是相同的。这两个命令通常都以你(不管你是谁,运行
git rebase
或git cherry-pick
的人)作为 committer,而以原作者作为 author 来创建新提交。由于Git将这些作为两个独立的实体来存储每个提交,所以这样做很好。像GitHub这样的网站通常会为复制的提交显示两个用户,尽管这种显示取决于托管网站。有一个很大的例外,那就是当使用
--reset-author
作为标志时,但您确实说过要排除标志。这里还有另一个问题,但不是Git问题,而是特定于托管站点的问题:
当使用Bitbucket / GitHub / GitLab并合并拉/合并请求时,托管站点何时生成一个或多个新提交而不是使用原始提交,谁是新提交的作者和提交者?
这些答案会因托管站点的不同而不同。值得注意的是,如果你使用REBASE AND MERGE或SQUASH AND MERGE合并模式,GitHub会生成新的提交。前者有效地使用了
git rebase
,1所以它的行为就像一个强制的rebase后跟一个git merge
。后者有效地使用了git merge --squash
。这会生成一个新的提交,其中“你”(使用点击Web按钮的人)既是作者又是提交者。1“Efficiently”,因为GitHub使用自己的代码加上libgit 2来做一切,而不是使用命令行Git。