如何更改一个特定提交的提交作者?

这篇具有很好参考价值的文章主要介绍了如何更改一个特定提交的提交作者?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问:

我想更改历史中一个特定提交的作者。这不是最新的提交。

相关: How do I change the author and committer name/email for multiple commits?

答1:

huntsbot.com – 程序员副业首选,一站式外包任务、远程工作、创意产品分享订阅平台。

交互式变基在历史记录中比您需要修改的提交 (git rebase -i ) 更早。在要修改的提交列表中,将文本从 pick 更改为 edit,并在您要修改的提交的哈希旁边。然后当 git 提示您更改提交时,使用以下命令:

git commit --amend --author="Author Name " --no-edit

例如,如果您的提交历史记录是 A-B-C-D-E-F,其中 F 为 HEAD,并且您想更改 C 和 D 的作者,那么您将…

指定 git rebase -i B (这是执行 git rebase -i B 命令后看到的示例)如果需要编辑 A,请使用 git rebase -i --root 将 C 和 D 的行从选择编辑 退出编辑器(对于 vim,这将是按 Esc 然后输入 :wq)。一旦变基开始,它首先会在 C 处暂停 你会 git commit --amend --author="Author Name " 然后 git rebase --continue 它会在 D 处再次暂停 然后你会 git commit --amend --author="Author Name " 再次 git rebase --continue rebase 将完成。使用 git push -f 使用更新的提交来更新您的来源。

与HuntsBot一起,探索全球自由职业机会–huntsbot.com

如果您不知道您所在的编辑器,答案很可能是 vim。要保存并退出,请键入 Esc : wq Enter。另一方面,如果它是 Nano,并且您在底部看到诸如“WriteOut: ^O”之类的东西,那么您应该使用 Ctrl+O、Enter、Ctrl+X。

如果你想修改第一个提交怎么办?那么之前的提交哈希是什么?

请注意,您可以使用 git commit --amend --reset-author 将提交作者设置为当前用户

使用 --no-edit 选项。 git commit --amend --reset-author --no-edit 不会打开编辑器。从 git 1.7.9 开始可用。

@Brenden 修改项目中的第一个提交,使用 git rebase -i --root

答2:

huntsbot.com高效搞钱,一站式跟进超10+任务平台外包需求

这个问题的 accepted answer 是对交互式变基的巧妙使用,但不幸的是,如果我们试图更改作者的提交曾经位于随后被合并的分支上,它就会出现冲突。更一般地说,它不会在处理混乱的历史时工作。

由于我担心运行依赖于设置和取消设置环境变量来重写 git 历史的脚本,我正在编写一个基于 this post 的新答案,它类似于 this answer 但更完整。

与链接的答案不同,以下内容经过测试和工作。为清楚起见,假设 03f482d6 是我们试图替换其作者的提交,而 42627abe 是新作者的提交。

签出我们正在尝试修改的提交。 git checkout 03f482d6 更改作者。 git commit --amend --author “新作者姓名<新作者电子邮件>”

现在我们有一个新的提交,哈希假定为 42627abe。

签出原始分支。用本地的新提交替换旧提交。 git replace 03f482d6 42627abe 根据替换重写所有未来的提交。 git filter-branch – --all 删除替换以保持清洁。 git replace -d 03f482d6 推送新的历史记录(仅在以下失败时使用–force,并且仅在使用 git log 和/或 git diff 进行健全性检查后使用)。 git push --force-with-lease

而不是 4-5 你可以重新提交到新的提交:

git rebase -i 42627abe

请在第 2 步之后在其中添加注释以重新结帐您的原始分支。

这看起来比可怕的 git rebase -i 更明显。以前从未听说过这 git replace 的事情。 +1

要清理 refs/original/... 备份,请参阅 here

我建议使用 --force-with-lease 而不是 -f。它更安全。

警告:请注意 git filter-branch -- --all 正在更改原始提交所在的所有分支中的提交。如果您没有足够的凭据(或者您只是不想更改其他分支的历史记录),最好小心这个答案。

答3:

huntsbot.com – 高效赚钱,自由工作

Github 文档包含 a script that replaces the committer info for all commits in a branch(现在无法恢复,这是 last snapshot)。

更改变量值后从终端运行以下脚本 #!/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 [ “ G I T C O M M I T T E R E M A I L " = " GIT_COMMITTER_EMAIL" = " GITCOMMITTEREMAIL"="OLD_EMAIL” ] 然后 export GIT_COMMITTER_NAME=“ C O R R E C T N A M E " e x p o r t G I T C O M M I T T E R E M A I L = " CORRECT_NAME" export GIT_COMMITTER_EMAIL=" CORRECTNAME"exportGITCOMMITTEREMAIL="CORRECT_EMAIL” fi if [ “ G I T A U T H O R E M A I L " = " GIT_AUTHOR_EMAIL" = " GITAUTHOREMAIL"="OLD_EMAIL” ]然后 export GIT_AUTHOR_NAME=“ C O R R E C T N A M E " e x p o r t G I T A U T H O R E M A I L = " CORRECT_NAME" export GIT_AUTHOR_EMAIL=" CORRECTNAME"exportGITAUTHOREMAIL="CORRECT_EMAIL” fi ’ --tag-name-filter cat – --branches --tags

将更正的历史推送到 GitHub: git push --force --tags origin ‘refs/heads/*’

或者,如果您想推送选定的分支引用,请使用

git push --force --tags origin ‘refs/heads/develop’


这会在所有提交中改变它,而不仅仅是一个。有趣的是,我在不到 30 分钟前就这样做了。

当我在阅读以前的答案后找到这个答案时,我认为值得一试,瞧,它完成了这项工作。但是在我的情况下,它仅在初始提交时更改了提交者名称。顺便说一句,在我尝试第一个答案的想法之前。也许它以某种方式影响了系统。

请注意,如果您避免使用 clone / push,您最终会得到一个备份命名空间 refs/original/。我找不到智能删除这个命名空间的方法,所以我最终删除了目录 .git/refs/original ,这很有效。

如果例如 OLD_EMAIL 不匹配任何内容,为什么这会导致对 repo 的更改?出于某种原因,一些(但不是全部!)提交哈希发生了变化。

我对这个答案的用例是:我有两个 github 帐户,一个是我无意中用来提交的。该脚本通过重命名不正确的提交者电子邮件/名称来帮助修复我的所有提交。当然,如果我从第 50 次提交到第 500 次提交时向错误的用户提交,则将有 450 次不同的提交。无论如何,正如@andrej 指出的那样,在运行脚本之后,您需要 git push -f 强制将更改推送到存储库。

答4:

huntsbot.com洞察每一个产品背后的需求与收益,从而捕获灵感文章来源地址https://www.toymoban.com/news/detail-421668.html

如果您只想更改上次提交的作者,可以这样做:

将您的电子邮件重置为全局配置: git config --global user.email example@email.com

现在无需编辑即可重置提交的作者: git commit --amend --reset-author --no-edit

不,这不对。看看 OP:It's not last commit. 那么他们会如何amend呢?

这很棒,可惜它只是最后一次提交。幸运的是,我在最近的两个上需要它,所以只是做了一个 git reset HEAD~,运行了您建议的行,然后再次手动进行了下一次提交。工作得很好!

谢谢! --reset-author 为我做了诀窍,因为没有它,作者会改变,但“提交者”会保留旧作者的详细信息。

要修复我最近的六次提交:首先使用 git config --local user.name FirstName LastName 和 git config --local user.email first.last@example.com 为当前 Git 存储库设置正确的作者。然后使用 git rebase --onto HEAD~6 --exec "git commit --amend --reset-author --no-edit" HEAD~6 应用到最后六个提交。最后使用 git push --force-with-lease 将其推送到远程 Git 存储库。

@oHo我希望这是一个答案,所以我可以投票。这是唯一为我解决了这个问题的事情,这是阿斯科特的巨大痛苦。

答5:

huntsbot.com – 高效赚钱,自由工作

您可以使用以下命令更改上次提交的作者。

git commit --amend --author=“Author Name email@address.com”

但是,如果您想更改多个提交的作者姓名,那就有点棘手了。您需要启动交互式 rebase,然后将提交标记为编辑,然后一一修改并完成。

使用 git rebase -i 开始变基。它会告诉你这样的事情。

https://monosnap.com/file/G7sdn66k7JWpT91uiOUAQWMhPrMQVT.png

对于要更改作者姓名的提交,将 pick 关键字更改为 edit。

https://monosnap.com/file/dsq0AfopQMVskBNknz6GZZwlWGVwWU.png

然后关闭编辑器。对于初学者,点击 Escape,然后输入 :wq 并点击 Enter。

然后你会看到你的终端就像什么都没发生一样。实际上,您正处于交互式变基的中间。现在是时候使用上面的命令修改提交的作者姓名了。它将再次打开编辑器。退出并使用 git rebase --continue 继续变基。对要编辑的提交计数重复相同的操作。当您收到 No rebase in progress? 消息时,您可以确保交互式变基已完成。

如果您有多个提交要更改,而不是单独编辑它们,您还可以让 pick 操作,并在每行之后添加 exec git commit --no-edit --amend --author="MyNewAuthor "

我与链接中的站点无关,但我使用了此链接git-tower.com/learn/git/faq/change-author-name-email,然后结合此帖子(我使用了rebase -i -p),但最后这是我需要的。谢谢

对于初学者,在运行 git commit 之前运行 git config --global core.editor nano,然后您可以使用 Ctrl+O、Ctrl+X 退出编辑器。

答6:

huntsbot.com汇聚了国内外优秀的初创产品创意,可按收入、分类等筛选,希望这些产品与实践经验能给您带来灵感。

您链接到的问题中的答案是很好的答案并且涵盖了您的情况(另一个问题更笼统,因为它涉及重写多个提交)。

作为尝试 git filter-branch 的借口,我编写了一个脚本来重写给定提交的作者姓名和/或作者电子邮件:

#!/bin/sh

#
# Change the author name and/or email of a single commit.
#
# change-author [-f] commit-to-change [branch-to-rewrite [new-name [new-email]]]
#
#     If -f is supplied it is passed to "git filter-branch".
#
#     If  is not provided or is empty HEAD will be used.
#     Use "--all" or a space separated list (e.g. "master next") to rewrite
#     multiple branches.
#
#     If  (or ) is not provided or is empty, the normal
#     user.name (user.email) Git configuration value will be used.
#

force=''
if test "x$1" = "x-f"; then
    force='-f'
    shift
fi

die() {
    printf '%s\n' "$@"
    exit 128
}
targ="$(git rev-parse --verify "$1" 2>/dev/null)" || die "$1 is not a commit"
br="${2:-HEAD}"

TARG_COMMIT="$targ"
TARG_NAME="${3-}"
TARG_EMAIL="${4-}"
export TARG_COMMIT TARG_NAME TARG_EMAIL

filt='

    if test "$GIT_COMMIT" = "$TARG_COMMIT"; then
        if test -n "$TARG_EMAIL"; then
            GIT_AUTHOR_EMAIL="$TARG_EMAIL"
            export GIT_AUTHOR_EMAIL
        else
            unset GIT_AUTHOR_EMAIL
        fi
        if test -n "$TARG_NAME"; then
            GIT_AUTHOR_NAME="$TARG_NAME"
            export GIT_AUTHOR_NAME
        else
            unset GIT_AUTHOR_NAME
        fi
    fi

'

git filter-branch $force --env-filter "$filt" -- $br

+1 谢谢。 assembla.com git repo 似乎没有更改 repo 的 web 视图中的所有作者引用,但“git pull/clone”的结果似乎一切正常。

很好的解决方案,因为它只更改预期内容,而不更改其他字段,例如提交日期。

Github 文档包含一个 similar script

@olivieradam666 就像一个魅力,更容易阅读

@olivieradam666 谢谢。您真的应该将其添加为答案,以便获得更多关注。

答7:

保持自己快人一步,享受全网独家提供的一站式外包任务、远程工作、创意产品订阅服务–huntsbot.com

之前提交:

https://i.stack.imgur.com/fpvKO.jpg

要修复所有提交的作者,您可以从@Amber 的答案中应用命令:

git commit --amend --author="Author Name "

或者要重复使用您的姓名和电子邮件,您可以写:

git commit --amend --author=Eugen

在命令后提交:

https://i.stack.imgur.com/ClooR.jpg

例如更改从 4025621 开始的所有内容:

https://i.stack.imgur.com/1FjkF.jpg

您必须运行:

git rebase --onto 4025621 --exec "git commit --amend --author=Eugen" 4025621

注意:要包含包含空格(如姓名和电子邮件地址)的作者,作者必须用转义引号括起来。例如:

git rebase --onto 4025621 --exec "git commit --amend --author=\"Foo Bar \"" 4025621

或将此别名添加到 ~/.gitconfig:

[alias]
    reauthor = !bash -c 'git rebase --onto $1 --exec \"git commit --amend --author=$2\" $1' --

然后运行:

git reauthor 4025621 Eugen

为了验证该命令是否按预期工作,我查看了 git shortlog -e -s 的输出。

这是最符合我目的的答案,谢谢。由于我只是想调整我的电子邮件地址,我可以在更新我的 .git/config 后使用 --exec="git commit --amend --reset-author" 运行。

呃,不知道为什么我忘记了!现在完成。

很好的答案,很容易修复。喜欢别名!

那对我没有帮助。现在我有 Continue Rebase Failed 错误

答8:

打造属于自己的副业,开启自由职业之旅,从huntsbot.com开始!

找到一种可以快速更改用户并且对其他提交没有副作用的方法。

简单明了的方法:

git config user.name "New User"
git config user.email "newuser@gmail.com"

git log
git rebase -i 1f1357
# change the word 'pick' to 'edit', save and exit

git commit --amend --reset-author --no-edit
git rebase --continue

git push --force-with-lease

详细操作

显示提交日志并找出您要更改的提交之前的提交 ID:

git log

git rebase 从选择的提交 id 开始反向到最近:

git config user.name "New User"
git config user.email "newuser@gmail.com"
git rebase -i 1f1357

# change word pick to edit, save and exit
edit 809b8f7 change code order 
pick 9baaae5 add prometheus monitor kubernetes
edit 5d726c3 fix liquid escape issue   
edit 3a5f98f update tags
pick 816e21c add prometheus monitor kubernetes

rebase 将在下一个提交 ID 处停止,输出:

Stopped at 809b8f7...  change code order 
You can amend the commit now, with
  git commit --amend 

Once you are satisfied with your changes, run

  git rebase --continue

确认并继续你的变基,直到它成功到 refs/heads/master。

# each continue will show you an amend message
# use git commit --amend --reset-author --no-edit to comfirm
# use git rebase --skip to skip
git commit --amend --reset-author --no-edit
git rebase --continue
git commit --amend --reset-author --no-edit
...
git rebase --continue
Successfully rebased and updated refs/heads/master.

git推送更新

git push --force-with-lease

如果我要更改的提交是第一次提交并且之后有 3 次提交,那么第一个解决方案是否有效? @NOZUONHIGH

这里的危险是您在配置中更改了 user.name 和 user.email 但随后不将它们改回来。如果您不将它们改回来,所有 future 提交也将由新用户完成!这就是为什么在 git commit 上使用 --author 标志可能会更好的原因。

这个,简单的版本,就像一个魅力

答9:

huntsbot.com洞察每一个产品背后的需求与收益,从而捕获灵感

为了促进 Eugen Konkov 的回答,要从根提交开始,请使用 --root 标志。 --no-edit 标志也很有帮助,因为使用它不会提示您每次提交都进入编辑器。

git rebase --root --exec "git commit --amend --author='name ' --no-edit"

huntsbot.com – 高效赚钱,自由工作

答10:

huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。

如果您使用的是集中式存储库,则 Amber’s answer 还需要一个额外的步骤:

git push -f 强制更新中央存储库。

请注意,在同一个分支上工作的人不多,因为这会破坏一致性。

答11:

huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。

执行 git rebase -i 时,文档中有一个有趣的部分:

如果要将两个或多个提交合并为一个,请将第二个和后续提交的命令“pick”替换为“squash”或“fixup”。如果提交有不同的作者,折叠的提交将归属于第一个提交的作者。折叠提交的建议提交消息是第一个提交的提交消息和使用“squash”命令的提交消息的串联,但省略了使用“fixup”命令的提交的提交消息。

如果您有 ABCDEF 病史,

并且您想更改提交 B 和 D(= 2 次提交),

那么你可以这样做:

git config user.name “正确的新名称”

git config user.email “正确@new.email”

创建空提交(每个提交一个):您需要一条用于 rebase 目的的消息 git commit --allow-empty -m “empty”

您需要一条消息用于变基

git commit --allow-empty -m “empty”

开始 rebase 操作 git rebase -i B^ B^ 选择 B 的父级。

git rebase -i B^

B^ 选择 B 的父级。

您将希望在每次修改之前放置一个空提交

你会想把这些改成壁球。

git rebase -i B^ 将为您提供的示例:

pick sha-commit-B some message
pick sha-commit-C some message
pick sha-commit-D some message
pick sha-commit-E some message
pick sha-commit-F some message
# pick sha-commit-empty1 empty
# pick sha-commit-empty2 empty

将其更改为:

# change commit B's author
pick sha-commit-empty1 empty
squash sha-commit-B some message
# leave commit C alone
pick sha-commit-C some message
# change commit D's author
pick sha-commit-empty2 empty
squash sha-commit-D some message
# leave commit E-F alone
pick sha-commit-E some message
pick sha-commit-F some message

它将提示您编辑消息:

# This is a combination of 2 commits.
# The first commit's message is:

empty

# This is the 2nd commit message:

...some useful commit message there...

你可以删除前几行。

原文链接:https://www.huntsbot.com/qa/VdPW/how-to-change-the-commit-author-for-one-specific-commit?lang=zh_CN&from=csdn

huntsbot.com洞察每一个产品背后的需求与收益,从而捕获灵感

到了这里,关于如何更改一个特定提交的提交作者?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用GitHub:创建仓库、提交更改、Fork一个仓库、同步Fork仓库。

    1、创建仓库 登录后——左上角“New”——Repository name(写入自己项目名称)——选中“Add a README file”——点击Create repository。 2、提交更改(提交一个对README文件的修改) (1)找到创建仓库的文件列表,单击README.md文件,点击编辑。输入用户所添加的信息:*。 (2)点击

    2024年02月12日
    浏览(35)
  • idea提交代码时gitee显示别人的名字,如何更改git信息

    在公司中刚入职只能用别人的账号,导致一直都是用别人的账号提交代码 点击应用,最后重启idea中,就会让你重新输入账号和密码,更改完之后可以再次勾选回原来状态,就不用重启再输入密码 代码如下(示例): 代码如下(示例): 以上就是今天要讲的内容,本文仅仅

    2024年02月03日
    浏览(50)
  • 【git】修改作者和提交者信息

    every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?type=blog 修改git作者和提交者信息 1.1.1 作者和提交者 作者就是我们git log看到的信息,如下: 其修改方式参考:文章-修改用户信息 作者和提交者一般默认相同,即我们本地配置的git账号。 但若修改了aut

    2024年02月15日
    浏览(35)
  • 对于 Git 每一次提交的时间信息,什么是作者日期和提交者日期

    对于 Git 的每一次提交,在 TortoiseGit 和 IntelliJ IDEA 都可以看到这次提交的时间。但很多人不知道的是,Git 实际上对每一个提交的时间分为两个:作者日期和提交者日期。 作者日期(author date):这指的是最开始提交时,所产生的提交文件上的日期 提交者日期(committer date):

    2024年02月05日
    浏览(35)
  • 更改WordPress作者存档链接author和用户名插件Change Author Link Structure

    WordPress作者存档链接默认情况为/author/Administrator(用户名),为了防止用户名泄露,我们可以将其改为/author/1(用户ID),具体操作可参考『如何将WordPress作者存档链接中的用户名改为昵称或ID』。 如果你想要将WordPress作者存档链接中的用户名改为用户ID,同时还想要将链接中

    2024年02月21日
    浏览(33)
  • Git(8)之分支间同步特定提交

    Git(8)之分支间同步特定提交 Author:Once Day Date:2024年4月7日 漫漫长路有人对你微笑过嘛… 全系列文章可查看专栏: Git使用记录_Once_day的博客-CSDN博客 1. 分支间同步提交 在使用Git这个强大的分布式版本控制系统时,经常会遇到需要将一个分支的提交同步到另一个分支的情况。

    2024年04月10日
    浏览(24)
  • git commit指定要提交的特定目录、文件

    在 Git 中, git commit 命令用于将更改保存到本地仓库。默认情况下,它会将所有已修改的文件添加到提交中。然而,你可以使用不同的选项来指定要提交的目录或文件。 要指定要提交的特定目录,可以在 git commit 命令后面加上路径。例如,假设你有一个名为 my_directory 的目录

    2024年02月14日
    浏览(28)
  • 我想开通期权?如何开通期权账户?

    场内期权的合约由交易所统一标准化定制,大家面对的同一个合约对应的价格都是一致的,比较公开透明,期权开户当天不能交易的,期权开户需要满足20日日均50万及半年交易经验即可操作,下文科普我想开通期权?如何开通期权账户? 的知识点。 本文来自:期权酱 个人投

    2024年02月10日
    浏览(34)
  • git 如何提交一个文件的一部分内容

    场景: 我正在开发代码开发了一半,现在突然要提交代码,但是需要提交的代码和我正在开发的代码 在一个文件中,我该如何提交 命令: git add -p (p是patch缩写) 第一步 :输入命令之后会呈现代码修改的部分 绿色的注释就是新增加内容 第二步: 按回车键查看命令解释 这

    2024年02月11日
    浏览(32)
  • 最佳实践:如何优雅地提交一个 Amazon EMR Serverless 作业?

    博主历时三年精心创作的《大数据平台架构与原型实现:数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行,点击《重磅推荐:建大数据平台太难了!给我发个工程原型吧!》了解图书详情,京东购书链接:https://item.jd.com/12677623.html,扫描左侧

    2024年02月13日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包