在推送到远程之前更改本地分支上的 git 用户
Changing git user on local branch before pushing to remote
我处于以下情况:
我得到了一台开发机器,所有的存储库都与其他人的 git 凭据相关联。我创建了一个新的本地分支,在 9 或 10 个回购协议中进行了一系列提交。我现在在公司的 git 服务器上有一个帐户,我想将我的本地分支推送到远程服务器(同一个分支,不需要在那里更改任何内容)。
但是,我需要它来显示所有提交都是我所做的,而不是在我之前使用这台笔记本电脑的其他人所做的。
有办法吗?我是否需要以某种方式返回并将与所有这些本地提交关联的用户更改为我自己,如果是这样,我该怎么做?必要时向黑客开放。
结帐 GitHub 的 script "changing author info":
To change the name and/or email address recorded in existing commits,
you must rewrite the entire history of your Git repository.
Warning: This action is destructive to your repository's history. If
you're collaborating on a repository with others, it's considered bad
practice to rewrite published history. You should only do this in an
emergency.
Changing the Git history of your repository using a script
We've
created a script that will change any commits that previously had the
old email address in its author or committer fields to use the correct
name and email address.
Note: Running this script rewrites history for all repository
collaborators. After completing these steps, any person with forks or
clones must fetch the rewritten history and rebase any local changes
into the rewritten history.
Before running this script, you'll need:
- The old email address that appears in the author/committer fields that
you want to change
- The correct name and email address that you would
like such commits to be attributed to
Instructions:
Open Terminal.
Create a fresh, bare clone of your repository:
git clone --bare https://github.com/user/repo.git`
cd repo.git
- Copy and paste the script, replacing the following variables based on
the information you gathered:
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
Press Enter to run the script.
Review the new Git history for errors.
Push the corrected history to GitHub:
git push --force --tags origin 'refs/heads/*'
Clean up the temporary clone:
cd ..
rm -rf repo.git
我处于以下情况:
我得到了一台开发机器,所有的存储库都与其他人的 git 凭据相关联。我创建了一个新的本地分支,在 9 或 10 个回购协议中进行了一系列提交。我现在在公司的 git 服务器上有一个帐户,我想将我的本地分支推送到远程服务器(同一个分支,不需要在那里更改任何内容)。
但是,我需要它来显示所有提交都是我所做的,而不是在我之前使用这台笔记本电脑的其他人所做的。
有办法吗?我是否需要以某种方式返回并将与所有这些本地提交关联的用户更改为我自己,如果是这样,我该怎么做?必要时向黑客开放。
结帐 GitHub 的 script "changing author info":
To change the name and/or email address recorded in existing commits, you must rewrite the entire history of your Git repository.
Warning: This action is destructive to your repository's history. If you're collaborating on a repository with others, it's considered bad practice to rewrite published history. You should only do this in an emergency.
Changing the Git history of your repository using a script
We've created a script that will change any commits that previously had the old email address in its author or committer fields to use the correct name and email address.
Note: Running this script rewrites history for all repository collaborators. After completing these steps, any person with forks or clones must fetch the rewritten history and rebase any local changes into the rewritten history.
Before running this script, you'll need:
- The old email address that appears in the author/committer fields that you want to change
- The correct name and email address that you would like such commits to be attributed to
Instructions:
Open Terminal.
Create a fresh, bare clone of your repository:
git clone --bare https://github.com/user/repo.git` cd repo.git
- Copy and paste the script, replacing the following variables based on the information you gathered:
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
Press Enter to run the script.
Review the new Git history for errors.
Push the corrected history to GitHub:
git push --force --tags origin 'refs/heads/*'
Clean up the temporary clone:
cd .. rm -rf repo.git