Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在推送到远程之前更改本地分支上的git用户_Git_Git Push - Fatal编程技术网

在推送到远程之前更改本地分支上的git用户

在推送到远程之前更改本地分支上的git用户,git,git-push,Git,Git Push,我的情况如下: 我得到了一台开发机器,所有的回购协议都与其他人的git凭证相关联。我创建了一个新的本地分支机构,在9或10个回购协议中做出了一系列承诺。我现在在公司的git服务器上有了一个帐户,我想把我的本地分支推到远程服务器同一个分支,不需要在那里做任何更改 但是,我需要它显示所有的提交都是由我完成的,而不是由在我之前使用这台笔记本电脑的其他人完成的 有办法做到这一点吗?我是否需要返回并更改与所有这些本地提交相关联的用户,如果需要,我该如何做?如有必要,可打开黑客程序。检查GitHub以更改作

我的情况如下:

我得到了一台开发机器,所有的回购协议都与其他人的git凭证相关联。我创建了一个新的本地分支机构,在9或10个回购协议中做出了一系列承诺。我现在在公司的git服务器上有了一个帐户,我想把我的本地分支推到远程服务器同一个分支,不需要在那里做任何更改

但是,我需要它显示所有的提交都是由我完成的,而不是由在我之前使用这台笔记本电脑的其他人完成的

有办法做到这一点吗?我是否需要返回并更改与所有这些本地提交相关联的用户,如果需要,我该如何做?如有必要,可打开黑客程序。

检查GitHub以更改作者信息:

要更改现有提交中记录的名称和/或电子邮件地址, 您必须重写Git存储库的整个历史记录

警告:此操作会破坏存储库的历史记录。如果 您正在与其他人协作存储库,这被认为是不好的 练习重写已出版的历史。你应该只在一个小时内做这件事 紧急情况

使用脚本更改存储库的Git历史记录 我们已经 创建了一个脚本,该脚本将更改以前具有 在其作者或提交人字段中的旧电子邮件地址,以使用正确的 姓名和电子邮件地址

注意:运行此脚本将重写所有存储库的历史记录 合作者。完成这些步骤后,任何使用叉子或 克隆必须获取重写的历史记录并重新设置任何本地更改的基础 进入重写的历史

在运行此脚本之前,您需要:

出现在作者/提交人字段中的旧电子邮件地址 你想改变吗 您希望使用的正确名称和电子邮件地址 像这样的承诺应该归于 说明:

打开终端

创建存储库的新的裸克隆:

复制并粘贴脚本,根据 您收集的信息: 按Enter键运行脚本

查看新Git历史记录中的错误

将更正的历史记录推送到GitHub:

git push-force-标记原点“refs/heads/*”

清理临时克隆:


与git一样,您需要返回并重做所有的提交,以更改关于它们的某些内容,甚至只是更改作者。只要提交还没有被推到其他地方,就像这里的情况一样,这很好,下面的脚本看起来不错。不过,作为对稍后讨论这个问题的人的一个警告,当谷歌把他们放在这里时,他们可能没有意识到上下文——不要改变你已经与其他人共享的历史记录!请注意,这将更改原始作者所做的所有提交的作者,而不仅仅是您继承笔记本电脑后所做的提交。如果原始作者在存储库中进行了任何提交,并且您重写了所有历史,并且您是团队中的一员,我几乎可以向您保证,没有人会因为您这样做而对您感到太高兴。确保您只使用所有重写历史的git命令更改您所做的提交,确保您了解它的作用,这包括强制推送。老实说,我认为您应该在开始强制推进到中央存储库之前,与团队负责人或您的软件架构师讨论这个问题。他们说,如果现在存储库中的每个人都有过时的分支,并且您生成了大量的工作来确保每个人都可以继续工作,那么在堆栈溢出时这样做是不合适的。@LasseVågsætherKarlsen很好的电话,谢谢您的提醒;我不会盲目地去做。在我决定按下红色大按钮之前,我会先看看是否有办法将作者的重写限制在某个分支/超过某个日期。
git clone --bare https://github.com/user/repo.git`
cd repo.git
OLD_EMAIL
CORRECT_NAME
CORRECT_EMAIL
#!/bin/sh

git filter-branch --env-filter '

OLD_EMAIL="your-old-email@example.com"
CORRECT_NAME="Your Correct Name"
CORRECT_EMAIL="your-correct-email@example.com"

if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
then
    export GIT_COMMITTER_NAME="$CORRECT_NAME"
    export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
then
    export GIT_AUTHOR_NAME="$CORRECT_NAME"
    export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags
cd ..
rm -rf repo.git