有人派我去改变它。但是我无法将我的名字添加到该提交中

时间:2010-02-27 20:47:51

标签: git github

有人分叉我的项目并进行了一些更改。都好。他的所有更改都在一次提交中。现在他让我合并他的变化。项目托管在github上。

我遵循了http://github.com/guides/pull-requests中提到的指南,这就是我所做的

git pull git://github.com/defunkt/grit.git master

然而,由于该命令现在gitlog说另一个人提交了。我见过其他人提交的地方,一个人验证了它。由于这是我的项目,如何将我的名字添加到验证列表中。

问题编号:2

他的评论中有一个错字。我还想在承诺中解决那个应该承担他和我的名字的错字。

更新

我正在寻找一种方式来签署像这样的提交。 http://github.com/rails/rails/commit/639e044298eed903566086d297ae51a535082e73

2 个答案:

答案 0 :(得分:23)

作者/提交者/的Ack /签收

每个项目都定义了如何记录补丁的评论。 Git只直接支持两个预定义的身份字段:Author和Committer。两者都不适合标记评论/确认。 Git确实支持“Signed-off-by:”行,但这些只是提交消息中的常规文本(与作者和提交者不同,由Git管理并赋予其意义)。

与提交消息的所有部分一样,“Signed-off-by:”的含义取决于要定义的每个项目。在Git项目中,“Signed-off-by:”行意味着“我证明此代码与此项目的许可证兼容”(参见“Developer's Certificate of Origin” in Git's SubmittingPatches document)。在Git项目中,“Acked-by:”行意味着“我已经审查了这个变化,看起来很健全”。

Git项目中的典型补丁流是贡献者使用git format-patch -s生成已签名的补丁,并将它们发送到项目邮件列表,在那里他们收集讨论和Acks(如果需要)。一旦准备好应用补丁,维护者在添加他自己的“Signed-off-by:”之后应用它。因此,维护者始终是提交者(除了在一些子系统中,提交是从子系统维护者的合并中提取的),但原始贡献者仍然是作者。此工作流程在其他项目中可能有意义,也可能没有意义。

因此,GitHub中的示例提交中的“Signed-off-by:”只是提交消息末尾的文本。它的确切含义是项目分配给这些线的意义。为该提交显示的附加标识(在GitHub视图中标记为“(committer)”)是由于Committer与Author不同。当您修改提交(例如分支的提示或在rebase期间)或应用包含与您配置的标识不同的“From:”标头的修补程序时,会发生这种情况。修改其他人的提交添加签名或确认行(或修改提交消息中的拼写错误)将足以更改提交者。

通常,您不应该将您的身份推送到Committer字段。您可能会合理地关注以某种方式承认提交中包含的更改(例如,说“我已审核此”或“我批准了此”)。您这样做的方式取决于相关项目的习惯和政策。通常通过在提交消息中添加“页脚”行来完成此类确认。

添加Acks的方法

如果“Signed-off-by:”将服务器作为项目中的Ack排队,您可以通过修改git commit --amend -s的提交轻松添加它们。否则,它将涉及修改提交消息以包括适合您的项目的任何指示符。

完全保留贡献的历史

如果保留贡献者的原始历史记录对您的情况至关重要,那么您应该使用git pull --no-ff并将“Ack”添加到生成的合并提交的提交消息中。由于您无法重写,您将不得不忍受任何提交消息拼写错误。对于内容拼写错误,您或原始贡献者可以在合并之前添加修复拼写错误的提交,或者您可以在合并后添加修订。

合并后的内容修复:

git checkout <your-branch>
git pull --no-ff --no-commit <repo> <contributor's-branch>
git commit # add your "Ack", commit the merge
# fix content typo and stage it
git commit

完全保留贡献的历史记录(顶部有一些额外的更改)

在合并之前进行内容修复(或让贡献者在他的存储库中执行此操作,然后按上述方式进行操作,跳过最后的修复步骤):

git fetch <repo> <contributor's-branch>:from-contributor
git checkout from-contributor
# fix content typo and stage it
git commit
git checkout <your-branch>
git merge --no-ff --no-commit from-contributor
git commit # add your Ack, commit the merge

您将成为合并提交的作者和提交者以及任何修复提交。贡献者提交的作者和指定者将保持不变。

重写一些贡献历史记录(但保留原始分支点)

如果可以重写历史记录,那么你可以创建一个包含你的贡献者提交的本地分支,使用git rebase -i添加你的“Ack”并修复拼写错误,然后将其合并到你的主分支中。

git fetch <repo> <contributor's-branch>:from-contributor
git checkout from-contributor
git rebase -i HEAD~<N> # N is however many commits you have to go back to fix the typo

git checkout <your-branch>
git merge --no-ff --no-commit from-contributor
git commit # add your Ack, commit the merge

您可以在git checkout <your-branch> && git merge --no-ff --no-commit && git commit步骤中将相关提交添加到相应提交,而不是最终git rebase -i,然后使用git checkout <your-branch> && git merge from-contributor,如果<your-branch>提示,则可以快进{1}}是from-contributor的祖先。

您将成为任何已更改提交的提交者。除非您使用git commit --reset-author,否则现有提交的作者将保持不变。您将成为任何新提交的作者和提交者(合并提交和修复)。

重写任何或所有贡献历史记录

如果您不关心保留贡献者分支的分支点,那么您可以这样做:

git checkout <your-branch>
git pull --rebase <repo> <contributor's-branch>
git rebase -i HEAD~<N> # fix-up typo, add Ack

作者和提交者将与上述rebase + merge场景相同。

Acking / Fixing single Commit

如果您只是处理一次提交,则上述git rebase -i HEAD~<N>步骤可能只是git commit --amend

答案 1 :(得分:2)

$ git commit --amend