为什么在创建分支时git无法识别我?

时间:2019-03-21 21:30:56

标签: git github

创建分支时,它无法识别我的git名称,而是MV WAG SCM。参见下图。

git

git config --list产生:

credential.helper=osxkeychain
push.default=current
pull.default=current
pull.rebase=true
user.email="myname@gmail.com" -> This is correct
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
core.ignorecase=true
core.precomposeunicode=true
....items related to remote branches
username.user=myUserName -> This is correct
username.email="myname@gmail.com" -> This is correct

我也无法进行任何更改...怎么了?

1 个答案:

答案 0 :(得分:5)

这里要记住很多重要的事情。这是前两个:

  • Git是分布式的,这意味着其中涉及许多不同的计算机。每个人都有自己的想法。
  • GitHub不是Git! GitHub是提供Git服务的托管公司。它们用一个精美的界面隐藏了实际的Git实现。精美的界面不是Git的一部分,其中很多几乎根本不使用Git。

现在,您显示的图像片段来自GitHub。因此,它向您展示了 GitHub 的内容,从字面上看,它与您可以在自己的Git存储库中设置 now 的任何内容都没有任何关系。 可能与您之前在Git存储库中设置的内容(今天或昨天或更早)有关。

  

git config --list产生...

这些是您在 计算机上设置的设置。您可以随时更改它们。

请注意,您的个人设置有两个(或更多)不同的位置。 Git称这些为--global--local。 Git 2.20和2.21添加了一个新的--worktree,您可能没有使用过。使用git config --list --show-origin查看哪个地方存储了哪个设置。

  

....与远程分支机构有关的项目

username.user=myUserName -> This is correct
username.email="myname@gmail.com" -> This is correct

这些可能是正确,但是我找不到使用username.userusername.email设置的任何内容。 (可能有些东西,但是Git允许您毫无抱怨地设置任何内容。例如,如果您应该为某软件设置zaphod.beeblebrox=heads:2,而无意中运行了git config hoopy.frood towel,则Git对此不会有任何抱怨-对 Git 都没有任何意义。)

push.default=current
pull.default=current

第一个是有意义的,但是一般而言,大多数人应该保留默认的push.default设置simple。第二个没有意义。

user.email="myname@gmail.com"

这无疑是正确的。不过,从您引用的列表中遗漏的 仍然是user.name

现在,重要的是认识到user.nameuser.email仅在使用Git创建新提交时由使用。。那时(在您进行提交时),Git会读取这两个设置。无论其中有什么内容,都进入新提交。新提交一旦被冻结,将一直冻结。您可以进行具有不同用户名和/或电子邮件设置的 other 提交,并且如果您刚进行的提交具有错误的设置,则您应该< / em>再次提交。但是您所做的任何提交中包含错误内容的提交,都会永久包含 错误的内容。

那还不错!您根本不必继续使用错误的提交。例如,如果您提交了错误的提交,则可以更改内容并运行git commit --amend来抛出错误的提交,并用更好的提交代替。被丢弃的文件仍保留在您的存储库中,但是被淘汰了,您和其他所有人都看不到它,并且在您运行{{1}时,它不会被发送到其他Git。 }。例如,您可以使用git push来解决不仅仅是上一次提交的问题。像git rebase -i --reset-author一样,它不会更改任何提交;相反,它会制作新的和改进的,而不再使用旧的和糟糕的。 1

您在配置中设置的用户名和电子邮件(已复制到您已经进行的任何提交中)在运行--amend时显示。这两个项目(用户名和电子邮件)可以任何您想要的。没有人可以阻止您在此处使用其他人的姓名和电子邮件地址。这些提交将进入您的计算机上的您的存储库,您可以使用自己的计算机进行任何操作。

但是既然您已经进行了一些新的提交,现在您可能希望将自己的Git 发送到其他Git存储库。其他Git存储库可以托管在任何地方,包括GitHub。如果您向GitHub发送新提交,那么他们不仅会相信您是巴拉克·奥巴马(Barack Obama)还是其他人。因此,现在您必须自己进行身份验证。这是该设置 起作用的地方:

git log

如果您通过https连接到GitHub,则Git将需要使用凭据帮助程序,这会告诉它使用哪个。如果您通过ssh连接到GitHub,则ssh具有其自己的独立机制。此credential.helper=osxkeychain 设置将被忽略。

  

我也无法进行任何更改...怎么了?

可能是以下两项之一或全部:

  • 您尝试向GitHub进行身份验证的尝试失败:他们不相信您是您声称的身份。

  • 或者,他们 do 相信您就是您所声称的身份,但是该人无权推送。

根据您在此处发布的内容,我们无法确定是哪种情况。但是GitHub传递回您的Git并将您的Git传递给您的错误消息,告诉您是哪种情况(或者是否不太明显)。因此,找出您是如何进行身份验证(或身份验证失败)的,以及是否成功,是否具有推送权限。纠正其中的任何一个问题(也许都纠正)。

一旦您克服了所有这些问题,最后一个绊脚石就是: Git推送提交。请记住,我们之前曾说过,所有提交都将被永久冻结。当您的Git向其Git发送提交时,您的Git会移交哈希ID,即唯一的名称,该唯一名称与 that 提交和 only 一起提交;没有其他提交具有该哈希ID名称-并且,如果他们还没有该提交名称,则Git移交他们需要的所有内容,以便他们也可以拥有该提交。

因此,在所有这种疯狂的Rube-Goldberg式机制都将您的提交传达到存储在GitHub上的Git存储库之后,它们将具有一些新的提交集-可能只是一个提交,也许是一整串他们-他们以前没有。最后,您的Git将要求其Git设置其他们的分支名称之一,或创建一个新的分支名称,以记住这些提交的最后一个。 2 GitHub然后获取存储在这些永久冻结的提交中的电子邮件地址,并在一个巨大的数据库中查找

数据库是 GitHub (不是Git!)决定提交的方式。保持翻译及其正常运行取决于GitHub及其数据库。他们为此有两种不同的幻想方案。参见例如https://help.github.com/en/articles/what-happens-when-i-change-my-username和相关文章。他们还可以控制在现有的冻结提交中看到这些电子邮件地址时将其视为“您”的电子邮件地址。

如果使用命令行Git,则可以在自己计算机上的存储库中看到Git存储的内容。如果使用GitHub Web界面,您将看到GitHub从Git存储的内容中将转换为。实际的存储在提交本身中,因此,除非您将提交存储在GitHub上的Git存储库中,否则GitHub无法进行任何翻译。


1 如果您已经通过运行credential.helper向其他Git发送了错误的提交,则然后 。这不一定是大问题,但是最好在运行git push之前确保您具有正确的提交。在您将这些错误提交分散到整个宇宙中数百万个其他Git克隆之后,甚至在托管整个其他Git克隆之前,丢弃错误的提交以改进替换提交要容易得多, 在GitHub或其他任何网站上。不过,这里的重点是您不能更改提交,只能将其替换为新的和改进的提交。如果您在其他人没有看到任何东西之前这样做,他们将永远不会知道您输入了错误的内容!

2 最后一次提交会自动记住前一个的哈希ID。那是最后一次提交的 parent 。父提交会记住父,它会记住另一个父,依此类推-因此,从 end 开始,Git可以向后工作。这个向后看的链存储库中的历史!从头开始显示一个提交,然后返回到其父级的行为是您或其他任何人查看历史的方式。提交及其关系(父,子,兄弟或完全不相关)确定存储在存储库中的历史记录。 分支名称只是一种 find last 提交的方式。