我当时正在学校计算机上编写一个简单的脚本,然后将更改提交到Git(在笔驱动器中的一个回购中,该回购是从家里的计算机中克隆的)。 经过几次提交后,我意识到我正在以root用户身份提交东西。

有什么办法可以将这些提交的作者更改为我的名字?


#1楼

我发现所提供的版本具有攻击性,特别是如果您从其他开发人员提交补丁程序时,这实际上会窃取他们的代码。

下面的版本在所有分支上均有效,并分别更改了作者和提交者以防止这种情况。

感谢leif81的all选项。

#!/bin/bashgit filter-branch --env-filter '
if [ "$GIT_AUTHOR_NAME" = "<old author>" ];
thenGIT_AUTHOR_NAME="<new author>";GIT_AUTHOR_EMAIL="<youmail@somehost.ext>";
fi
if [ "$GIT_COMMITTER_NAME" = "<old committer>" ];
thenGIT_COMMITTER_NAME="<new commiter>";GIT_COMMITTER_EMAIL="<youmail@somehost.ext>";
fi
' -- --all

#2楼

您可以将其用作别名,以便执行以下操作:

git change-commits GIT_AUTHOR_NAME "old name" "new name"

或最后10次提交:

git change-commits GIT_AUTHOR_EMAIL "old@email.com" "new@email.com" HEAD~10..HEAD

添加到〜/ .gitconfig中:

[alias]change-commits = "!f() { VAR=$1; OLD=$2; NEW=$3; shift 3; git filter-branch --env-filter \"if [[ \\\"$`echo $VAR`\\\" = '$OLD' ]]; then export $VAR='$NEW'; fi\" $@; }; f "

来源: https : //github.com/brauliobo/gitconfig/blob/master/configs/.gitconfig

希望它是有用的。


#3楼

  1. 运行git rebase -i <sha1 or ref of starting point>
  2. edit (或e )标记要更改的所有提交
  3. 循环执行以下两个命令,直到处理完所有提交为止:

    git commit --amend --reuse-message=HEAD --author="New Author <new@author.email>" ; git rebase --continue

这将保留所有其他提交信息(包括日期)。 --reuse-message=HEAD选项可阻止启动消息编辑器。


#4楼

注意:此答案会更改SHA1,因此请小心在已推送的分支上使用它。 如果您只想修正名称的拼写或更新旧电子邮件,则git允许您执行此操作而无需使用.mailmap重写历史记录。 看到我的其他答案 。

使用交互式基础

你可以做

git rebase -i -p <some HEAD before all of your bad commits>

然后,将所有错误提交标记为rebase文件中的“ edit”。 如果您还想更改您的第一次提交,则必须手动将其作为重新提交添加到rebase文件的第一行中(遵循其他行的格式)。 然后,当git要求您修改每次提交时,请执行

 git commit --amend --author "New Author Name <email@address.com>"

编辑或仅关闭打开的编辑器,然后执行

git rebase --continue

继续进行基地调整。

您可以通过添加--no-edit来跳过此处完全打开编辑器的操作,这样命令将是:

git commit --amend --author "New Author Name <email@address.com>" --no-edit && \
git rebase --continue

单次提交

正如一些评论者指出的那样,如果您只想更改最近的提交,则不需要rebase命令。 做就是了

 git commit --amend --author "New Author Name <email@address.com>"

这会将作者更改为指定的名称,但是将在git config user.namegit config user.email中将提交者设置为您配置的用户。 如果要将提交者设置为指定的内容,则会同时设置作者和提交者:

 git -c user.name="New Author Name" -c user.email=email@address.com commit --amend --reset-author

关于合并提交的注意事项

我的原始回复有轻微缺陷。 如果当前HEAD和您的<some HEAD before all your bad commits>之间有任何合并提交,然后<some HEAD before all your bad commits> ,那么git rebase将使它们git rebase平(顺便说一句,如果您使用GitHub pull请求,将会有大量的合并提交您的历史记录)。 这通常会导致非常不同的历史记录(因为重复的更改可能会被“重新基准化”),在最坏的情况下,它可能导致git rebase要求您解决困难的合并冲突(在合并提交中可能已经解决了) )。 解决方案是使用-p标志来git rebase ,这将保留历史记录的合并结构。 git rebase的联机帮助页警告说,使用-p-i可能会导致问题,但是在BUGS部分中,它说“编辑提交并改写其提交消息应该可以正常工作。”

我在上面的命令中添加了-p 。 对于仅更改最新提交的情况,这不是问题。


#5楼

使用交互式变基,可以在每个要更改的提交之后放置一个amend命令。 例如:

pick a07cb86 Project tile template with full details and styling
x git commit --amend --reset-author -Chead

#6楼

请注意,git存储了两个不同的电子邮件地址,一个用于提交者 (提交更改的人),另一个用于作者 (编写更改的人)。

提交者信息不会在大多数地方显示,但是您可以使用git log -1 --format=%cn,%ce来查看(或使用show代替log来指定特定的提交)。

虽然更改最后一次提交的作者就像git commit --amend --author "Author Name <email@example.com>"一样简单,但是没有任何一种方法可以对提交者信息进行相同的处理。

解决方案是(临时或不临时)更改您的用户信息,然后修改提交,这会将提交者更新为您当前的信息:

git config user.email my_other_email@example.com
git commit --amend

#7楼

今天,我们遇到了一个问题,作者名称中的UTF8字符在构建服务器上引起了麻烦,因此我们必须重写历史记录以纠正此问题。 采取的步骤是:

步骤1:按照以下说明,在git中为所有以后的提交更改用户名: https : //help.github.com/articles/setting-your-username-in-git/

步骤2:运行以下bash脚本:

#!/bin/shREPO_URL=ssh://path/to/your.git
REPO_DIR=rewrite.tmp# Clone the repository
git clone ${REPO_URL} ${REPO_DIR}# Change to the cloned repository
cd ${REPO_DIR}# Checkout all the remote branches as local tracking branches
git branch --list -r origin/* | cut -c10- | xargs -n1 git checkout# Rewrite the history, use a system that will preseve the eol (or lack of in commit messages) - preferably Linux not OSX
git filter-branch --env-filter '
OLD_EMAIL="me@something.com"
CORRECT_NAME="New Me"if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
thenexport GIT_COMMITTER_NAME="$CORRECT_NAME"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
thenexport GIT_AUTHOR_NAME="$CORRECT_NAME"
fi
' --tag-name-filter cat -- --branches --tags# Force push the rewritten branches + tags to the remote
git push -f# Remove all knowledge that we did something
rm -rf ${REPO_DIR}# Tell your colleagues to `git pull --rebase` on all their local remote tracking branches

快速概述:将您的存储库检出到临时文件中,检出所有远程分支,运行将重写历史记录的脚本,强制推送新状态,并告诉所有同事进行基准提取以获取更改。

我们在OS X上运行它时遇到了麻烦,因为它以某种方式弄乱了提交消息中的行尾,因此我们不得不在Linux机器上重新运行它。


#8楼

对于一次提交:

git commit --amend --author="Author Name <email@address.com>"

(摘自asmeurer的回答)


#9楼

您的问题确实很普遍。 请参阅“ 使用Mailmap修复Git中的作者列表 ”

为了简单起见,我创建了一个脚本来简化此过程: git-changemail

将脚本放到路径上后,您可以发出以下命令:

  • 在当前分支上更改作者匹配

     $ git changemail -a old@email.com -n newname -m new@email.com 
  • 更改<branch>和<branch2>上的作者和提交者匹配。 将-f传递给filter-branch以允许重写备份

     $ git changemail -b old@email.com -n newname -m new@email.com -- -f &lt;branch> &lt;branch2> 
  • 显示回购中的现有用户

     $ git changemail --show-both 

顺便说一句,在进行更改后,请使用以下命令从筛选器分支中清除备份: git-backup-clean


#10楼

如果您是该存储库的唯一用户,或者您不关心是否有可能破坏其他用户的存储库,那么可以。 如果您已推送这些提交,并且它们存在于其他地方可以访问它们的位置,则不会,除非您不在乎破坏其他人的回购协议。 问题是通过更改这些提交,您将生成新的SHA,这将导致将它们视为不同的提交。 当其他人尝试引入这些更改的提交时,历史和kaboom都不一样。

此页面http://inputvalidation.blogspot.com/2008/08/how-to-change-git-commit-author.html描述了操作方法。 (我还没尝试过,所以YMMV)


#11楼

正如docgnome所述,重写历史记录很危险,并且会破坏其他人的存储库。

但是,如果您确实要这样做,并且您处于bash环境中(在Linux中,在Windows上没有问题,则可以使用git bash,这是git安装随附的),请使用git filter-branch :

git filter-branch --env-filter 'if [ $GIT_AUTHOR_EMAIL = bad@email ];then GIT_AUTHOR_EMAIL=correct@email;fi;
export GIT_AUTHOR_EMAIL'

为了加快速度,您可以指定要重写的修订版本范围:

git filter-branch --env-filter 'if [ $GIT_AUTHOR_EMAIL = bad@email ];then GIT_AUTHOR_EMAIL=correct@email;fi;
export GIT_AUTHOR_EMAIL' HEAD~20..HEAD

#12楼

如果您是该存储库的唯一用户,则可以使用git filter-branch (如svick所写 )或git fast-export / git fast-import加上过滤器脚本(如docgnome答案中引用的文章所述)来重写历史记录 ,或交互式变基 。 但是,其中任何一个都会从第一次更改的提交开始就更改修订; 这对于任何将您的更改基于分支预重写的人来说都是麻烦。

复苏

如果其他开发人员未将其工作基于预重写版本,则最简单的解决方案是重新克隆(再次克隆)。

或者,他们可以尝试git rebase --pull ,如果存储库中没有任何更改,它将快速转发,或者将其分支基于重写的提交基础(我们希望避免合并,因为它会保持预先-永远重写。 所有这些都以他们没有从事工作为前提; 使用git stash来隐藏更改,否则。

如果其他开发人员使用功能分支,和/或git pull --rebase因为上游没有设置不起作用例如,他们必须重订其对后重写提交的顶级作品。 例如,在获取新更改( git fetch )之后,对于基于origin/master /派生的master分支,需要运行

$ git rebase --onto origin/master origin/master@{1} master

这里origin/master@{1}是重写前的状态(在获取之前),请参见gitrevisions 。


另一种解决方案是使用refs / replace /机制,该机制自1.6.5版起在Git中可用。 在此解决方案中,您将替换电子邮件错误的提交; 那么任何人谁取指“取代”裁判(类似fetch = +refs/replace/*:refs/replace/*在适当位置的Refspec在他们 .git/config )将得到透明的更换,和那些谁不取这些裁判会看到旧的提交。

该过程如下所示:

  1. 查找所有带有错误电子邮件的提交,例如使用

     $ git log --author=user@wrong.email --all 
  2. 对于每个错误的提交,创建一个替换提交,并将其添加到对象数据库中

     $ git cat-file -p <ID of wrong commit> | sed -e 's/user@wrong\\.email/user@example.com/g' > tmp.txt $ git hash-object -t commit -w tmp.txt <ID of corrected commit> 
  3. 现在,您已经纠正了对象数据库中的提交,您必须告诉git使用git replace命令通过纠正的错误来自动透明地替换错误的提交:

     $ git replace <ID of wrong commit> <ID of corrected commit> 
  4. 最后,列出所有替换项以检查此过程是否成功

     $ git replace -l 

    并检查是否更换

     $ git log --author=user@wrong.email --all 

当然,您可以自动执行此过程...好吧,除了使用git replace之外(不具有批处理模式),所有操作都因此进行,因此您必须为此使用shell循环,或“手动”替换。

未经测试! YMMV。

请注意,在使用refs/replace/机制时,您可能会遇到一些困难:它是新的,尚未经过很好的测试


#13楼

当接管另一位作者的未合并提交时,有一种简单的方法来处理此问题。

git commit --amend --reset-author


#14楼

Github有一个很好的解决方案 ,它是以下shell脚本:

#!/bin/shgit filter-branch --env-filter 'an="$GIT_AUTHOR_NAME"
am="$GIT_AUTHOR_EMAIL"
cn="$GIT_COMMITTER_NAME"
cm="$GIT_COMMITTER_EMAIL"if [ "$GIT_COMMITTER_EMAIL" = "your@email.to.match" ]
thencn="Your New Committer Name"cm="Your New Committer Email"
fi
if [ "$GIT_AUTHOR_EMAIL" = "your@email.to.match" ]
thenan="Your New Author Name"am="Your New Author Email"
fiexport GIT_AUTHOR_NAME="$an"
export GIT_AUTHOR_EMAIL="$am"
export GIT_COMMITTER_NAME="$cn"
export GIT_COMMITTER_EMAIL="$cm"
'

#15楼

git rebase -i YOUR_FIRTS_COMMIT_SHA^while true; do git commit --amend --author="Name Surname <email@example.com>" --no-edit && git rebase --continue; done

在rebase完成后按^ C#(循环将继续更新上次提交)


#16楼

  1. 通过Amend更改提交author name & email ,然后用old-commit with new-one替换old-commit with new-one

     $ git checkout <commit-hash> # checkout to the commit need to modify $ git commit --amend --author "name <author@email.com>" # change the author name and email $ git replace <old-commit-hash> <new-commit-hash> # replace the old commit by new one $ git filter-branch -- --all # rewrite all futures commits based on the replacement $ git replace -d <old-commit-hash> # remove the replacement for cleanliness $ git push -f origin HEAD # force push 
  2. 另一种方法Rebasing

     $ git rebase -i <good-commit-hash> # back to last good commit # Editor would open, replace 'pick' with 'edit' before the commit want to change author $ git commit --amend --author="author name <author@email.com>" # change the author name & email # Save changes and exit the editor $ git rebase --continue # finish the rebase 

#17楼

我也想添加我的示例。 我想用给定的参数创建一个bash_function。

这适用于mint-linux-17.3

# $1 => email to change, $2 => new_name, $3 => new E-Mailfunction git_change_user_config_for_commit {# defaultsWRONG_EMAIL=${1:-"you_wrong_mail@hello.world"}NEW_NAME=${2:-"your name"}NEW_EMAIL=${3:-"new_mail@hello.world"}git filter-branch -f --env-filter "if [ \$GIT_COMMITTER_EMAIL = '$WRONG_EMAIL' ]; thenexport GIT_COMMITTER_NAME='$NEW_NAME'export GIT_COMMITTER_EMAIL='$NEW_EMAIL'fiif [ \$GIT_AUTHOR_EMAIL = '$WRONG_EMAIL' ]; thenexport GIT_AUTHOR_NAME='$NEW_NAME'export GIT_AUTHOR_EMAIL='$NEW_EMAIL'fi" --tag-name-filter cat -- --branches --tags;
}

#18楼

我通过引入一个简单的author-conv-file (格式与git-cvsimport的格式相同)来适应该解决方案 。 它通过更改所有分支的author-conv-file定义的所有用户来工作。

我们将此与cvs2git结合使用,将我们的存储库从cvs迁移到git。

即示例author-conv-file

john=John Doe <john.doe@hotmail.com>
jill=Jill Doe <jill.doe@hotmail.com>

剧本:

 #!/bin/bashexport $authors_file=author-conv-filegit filter-branch -f --env-filter 'get_name () {grep "^$1=" "$authors_file" |sed "s/^.*=\(.*\) <.*>$/\1/"}get_email () {grep "^$1=" "$authors_file" |sed "s/^.*=.* <\(.*\)>$/\1/"}GIT_AUTHOR_NAME=$(get_name $GIT_COMMITTER_NAME) &&GIT_AUTHOR_EMAIL=$(get_email $GIT_COMMITTER_NAME) &&GIT_COMMITTER_NAME=$GIT_AUTHOR_NAME &&GIT_COMMITTER_EMAIL=$GIT_AUTHOR_EMAIL &&export GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL &&export GIT_COMMITTER_NAME GIT_COMMITTER_EMAIL' -- --all

#19楼

我使用以下内容重写整个存储库的作者,包括标记和所有分支:

git filter-branch --tag-name-filter cat --env-filter "export GIT_AUTHOR_NAME='New name';export GIT_AUTHOR_EMAIL='New email'
" -- --all

然后,如所描述的过滤器分支的MAN页 ,删除由备份所有原始裁判filter-branch (这是破坏性的,先备份):

git for-each-ref --format="%(refname)" refs/original/ | \
xargs -n 1 git update-ref -d

#20楼

试试看 它将与上述功能相同,但以交互方式进行。

bash <(curl -s  https://raw.githubusercontent.com/majdarbash/git-author-change-script/master/run.sh)

参考: https : //github.com/majdarbash/git-author-change-script


#21楼

最快,最简单的方法是使用git rebase的--exec参数:

git rebase -i -p --exec 'git commit --amend --reset-author --no-edit'

这将创建一个待办事项列表,如下所示:

pick ef11092 Blah blah blah
exec git commit --amend --reset-author --no-edit
pick 52d6391 Blah bloh bloo
exec git commit --amend --reset-author --no-edit
pick 30ebbfe Blah bluh bleh
exec git commit --amend --reset-author --no-edit
...

并且这将全部自动进行,当您有数百次提交时,该方法也将起作用。


#22楼

一个用于更改最后N次提交的作者的命令

git rebase -i HEAD~4 -x "git commit --amend --author 'Author Name <author.name@mail.com>' --no-edit"

笔记

  • --no-edit标志确保git commit --amend不要求额外的确认
  • 当您使用git rebase -i ,您可以手动选择更改作者的提交,

您编辑的文件将如下所示:

pick 897fe9e simplify code a little
exec git commit --amend --author 'Author Name <author.name@mail.com>' --no-edit
pick abb60f9 add new feature
exec git commit --amend --author 'Author Name <author.name@mail.com>' --no-edit
pick dc18f70 bugfix
exec git commit --amend --author 'Author Name <author.name@mail.com>' --no-edit

然后,您仍然可以修改一些行,以查看要在哪里更改作者。 这为您提供了介于自动化和控制之间的良好中间立场:您将看到将要运行的步骤,一旦保存,所有内容将立即应用。


#23楼

如果您将Eclipse与EGit结合使用,那么有一个非常简单的解决方案。
假设:您在本地分支“ local_master_user_x”中提交,由于用户无效,该分支无法推送到远程分支“ master”。

  1. 检出远程分支“ master”
  2. 选择“ local_master_user_x”包含更改的项目/文件夹/文件
  3. 右键单击-替换为-分支-'local_master_user_x'
  4. 再次提交这些更改,这次以正确的用户身份并进入本地分支“ master”
  5. 推送到远程“主”

#24楼

更改作者(或提交者)将需要重写所有历史记录。 如果您对此表示满意,并认为值得这样做,则应查看git filter-branch 。 手册页包含一些示例,可以帮助您入门。 还要注意,您可以使用环境变量来更改作者,提交者,日期等的名称。请参见git手册页的“环境变量”部分。

具体来说,您可以使用以下命令为所有分支和标签修复所有错误的作者名称和电子邮件(来源: GitHub help ):

#!/bin/shgit 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" ]
thenexport GIT_COMMITTER_NAME="$CORRECT_NAME"export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
thenexport GIT_AUTHOR_NAME="$CORRECT_NAME"export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags

#25楼

一个班轮,但是如果您有多用户存储库,请小心-这会将所有提交更改为具有相同(新)的作者和提交者。

git filter-branch -f --env-filter "GIT_AUTHOR_NAME='Newname'; GIT_AUTHOR_EMAIL='new@email'; GIT_COMMITTER_NAME='Newname'; GIT_COMMITTER_EMAIL='new@email';" HEAD

在字符串中使用换行符(可以在bash中使用):

git filter-branch -f --env-filter "GIT_AUTHOR_NAME='Newname'GIT_AUTHOR_EMAIL='new@email'GIT_COMMITTER_NAME='Newname'GIT_COMMITTER_EMAIL='new@email'" HEAD

#26楼

如果您要修复的提交是最新的,并且只是其中的几个,则可以在配置正确的名称和电子邮件后使用git resetgit stash的组合再次返回提交。

序列将如下所示(对于2次错误的提交,没有未决的更改):

git config user.name <good name>
git config user.email <good email>
git reset HEAD^
git stash
git reset HEAD^
git commit -a
git stash pop
git commit -a

#27楼

如果只有少数几个提交具有错误的作者,则可以使用exec命令和--amend提交在git rebase -i内部完成所有操作,如下所示:

git rebase -i HEAD~6 # as required

向您显示可编辑的提交列表:

pick abcd Someone else's commit
pick defg my bad commit 1
pick 1234 my bad commit 2

然后在所有带有不良作者的行之后添加exec ... --author="..."行:

pick abcd Someone else's commit
pick defg my bad commit 1
exec git commit --amend --author="New Author Name <email@address.com>" -C HEAD
pick 1234 my bad commit 2
exec git commit --amend --author="New Author Name <email@address.com>" -C HEAD

保存并退出编辑器(运行)。

此解决方案的键入时间可能比其他解决方案长,但它是高度可控的-我确切知道它会击中什么提交。

感谢@asmeurer的启发。


#28楼

这是@Brian版本的详细版本:

要更改作者和提交者,可以执行以下操作(在bash中可以在字符串中使用换行符):

git filter-branch --env-filter 'if [ "$GIT_COMMITTER_NAME" = "<Old name>" ];thenGIT_COMMITTER_NAME="<New name>";GIT_COMMITTER_EMAIL="<New email>";GIT_AUTHOR_NAME="<New name>";GIT_AUTHOR_EMAIL="<New email>";fi' -- --all

您可能会遇到以下错误之一:

  1. 临时目录已经存在
  2. 裁判/原始人开始的裁判已经存在
    (这意味着先前已在存储库上运行了另一个筛选器分支,然后将原始分支引用备份到refs / original

如果尽管出现这些错误--force强制运行,请添加--force标志:

git filter-branch --force --env-filter 'if [ "$GIT_COMMITTER_NAME" = "<Old name>" ];thenGIT_COMMITTER_NAME="<New name>";GIT_COMMITTER_EMAIL="<New email>";GIT_AUTHOR_NAME="<New name>";GIT_AUTHOR_EMAIL="<New email>";fi' -- --all

可能需要-- --all选项的一些解释:它使filter-branch在所有ref (包括所有分支)的所有修订版上起作用。 例如,这意味着标签也被重写并且在重写的分支上可见。

一个常见的“错误”是改用HEAD ,这意味着仅过滤当前分支上的所有修订。 然后在重写的分支中将不存在任何标签(或其他引用)。


#29楼

您也可以:

git filter-branch --commit-filter 'if [ "$GIT_COMMITTER_NAME" = "<Old Name>" ];thenGIT_COMMITTER_NAME="<New Name>";GIT_AUTHOR_NAME="<New Name>";GIT_COMMITTER_EMAIL="<New Email>";GIT_AUTHOR_EMAIL="<New Email>";git commit-tree "$@";elsegit commit-tree "$@";fi' HEAD

注意,如果您在Windows命令提示符中使用此命令,则需要使用"代替'

git filter-branch --commit-filter "if [ "$GIT_COMMITTER_NAME" = "<Old Name>" ];thenGIT_COMMITTER_NAME="<New Name>";GIT_AUTHOR_NAME="<New Name>";GIT_COMMITTER_EMAIL="<New Email>";GIT_AUTHOR_EMAIL="<New Email>";git commit-tree "$@";elsegit commit-tree "$@";fi" HEAD

#30楼

当您没有初始化$ HOME / .gitconfig时,就会发生这种情况。 您可以将其修复为:

git config --global user.name "you name"
git config --global user.email you@domain.com
git commit --amend --reset-author

用git版本1.7.5.4测试


#31楼

我应该指出,如果唯一的问题是作者/电子邮件与您的平常情况不同,那么这不是问题。 正确的解决方法是在目录的底部创建一个名为.mailmap的文件,并使用以下行

Name you want <email you want> Name you don't want <email you don't want>

从那时起,诸如git shortlog类的命令将认为这两个名称相同(除非您明确告诉他们不git shortlog )。 有关更多信息,请参见http://schacon.github.com/git/git-shortlog.html 。

这具有此处所有其他解决方案的优点,因为您不必重写历史记录,如果您拥有上游记录,则可能会引起问题,并且始终是意外丢失数据的好方法。

当然,如果您自己做某件事,并且确实应该是其他人,并且此时您不介意重写历史记录,那么出于作者目的,更改提交作者可能是一个好主意(在这种情况下,我会将您定向到我的其他答案在这里)。

如何在Git中更改多次提交的作者和提交者名称以及电子邮件?相关推荐

  1. git 还原文件到其他版本_如何在Git中还原旧文件版本

    git 还原文件到其他版本 读: 第1部分:什么是Git? 第2部分:Git入门 第3部分:创建第一个Git存储库 第4部分:如何在Git中还原旧文件版本 第5部分:3个用于Git的图形工具 第6部分 ...

  2. 如何在Git中保存用户名和密码?

    本文翻译自:How to save username and password in Git? I want to use a push and pull automatically in GitEx ...

  3. 在Git中更改文件名的大小写

    本文翻译自:Changing capitalization of filenames in Git I am trying to rename a file to have different cap ...

  4. 如何在 Git 中保存用户名和密码?

    问: 我想在 Git Extensions.Sourcetree 或任何其他 Git GUI 中自动使用推送和拉取功能,而无需每次都在提示中输入我的用户名和密码. 那么如何在 Git 中保存我的凭据呢 ...

  5. 好系统教你如何在Windows中更改文件夹的图标

    如何在Windows中更改文件夹的图标 浏览到要更改其图标的文件夹的位置,或创建一个新文件夹. 右键单击该文件夹,然后从出现的下拉菜单底部选择"属性". 在文件夹属性菜单中,选择自 ...

  6. linux 更改ssh端口_如何在Linux中更改SSH端口-简易指南

    linux 更改ssh端口 The default port on SSH is 22. But for security reasons, it's a good idea to change SS ...

  7. linux中更改用户密码_如何在Linux中更改用户密码

    linux中更改用户密码 In this tutorial, we will focus on how you can change a user's password in Linux. We wi ...

  8. linux重启网卡命令_如何在 Linux 中更改 MAC 地址 | Linux 中国

    在向你展示如何在 Linux 中更改 Mac 地址之前,让我们首先讨论为什么要更改它.-- Dimitrios Savvopoulos 在向你展示如何在 Linux 中更改 MAC 地址之前,让我们首 ...

  9. python绘图背景透明_如何在 Matplotlib 中更改绘图背景

    介绍Matplotlib是Python中使用最广泛的数据可视化库之一.无论是简单还是复杂的可视化项目,它都是大多数人的首选库.在本教程中,我们将研究如何在Matplotlib中更改绘图的背景.导入数据 ...

最新文章

  1. 分布式光伏发电并网无功补偿问题
  2. poj 1695(三维dp)
  3. OpenCV cv::CascadeClassifier人脸检测的实例(附完整代码)
  4. SpringSecurity集中式整合之加入jsp
  5. row_number() over (partition by....order by...)用法 分组排序
  6. 牛客网与leetcode刷题(高频题中简单or中等的)
  7. 第13课 智商问题 《小学生C++趣味编程》
  8. 14亿条记录,12c 做不到2小时内变更表结构字段类型?
  9. Android动画效果
  10. Material UI 4.10 Skeleton 骨架
  11. ipv6中ospfv3不再支持_超星尔雅《2020年考研英语全程班》2020第五章节测验题库及试题答案...
  12. 用Flash制作不停转动的地球仪
  13. 厘米换算英尺英寸(C语言程序设计)
  14. 无人车之美——双舵轮运动分解与合成
  15. Ubuntu 16.04 安装运行 ROVIO odometry
  16. 测鬼记(中)之奋斗——变数
  17. lisp绘制棱锥_椭圆轴棱锥,elliptical axicon,音标,读音,翻译,英文例句,英语词典
  18. pythonjson安装_安装pip和json
  19. 一键GHOST做全盘镜像
  20. ubuntu安装向日葵

热门文章

  1. android fastjson java.lang.ClassCastException
  2. Failed to find provider info for com.tencent.mm.sdk.plugin.provider
  3. 【剑指offer-Java版】12打印1到最大的n位数
  4. CoordinatorLayout+AppBarLayout顶部栏吸顶效果
  5. 大体了解Android应用安装过程及原理
  6. 第十六周程序阅读(1)
  7. Android之组件化开发
  8. MIUI应用权限设置
  9. sublime text3 怎么配置、运行python_【IT专家】Sublime Text3配置在可交互环境下运行python快捷键...
  10. weblogic在linux服务器上部署应用