我正在学校的计算机上编写一个简单的脚本,并将更改提交给Git(在我的pendrive中的repo中,从我家里的计算机克隆).几次提交后,我意识到我正在以root用户身份提交东西.
有没有办法将这些提交的作者改成我的名字?
我遇到了与此处提出的问题相同的问题:根目录中的新git存储库包含子目录中的存在存储库
我在这里听到了这个答案:根目录中的新git存储库包含子目录中的存在存储库
现在,gitk --all显示两个历史:一个在当前达到高潮master,一个命名original/refs/heads/master.
我不知道这第二个历史是什么,或者如何从回购中删除它.我的存储库中不需要两个历史记录.
我怎么摆脱它?
重现自己:
mkdir -p project-root/path/to/module
cd project-root/path/to/module
mkdir dir1 dir2 dir3
for dir in * ; do touch $dir/source-file-$dir.py ; done
git init
git add .
git commit -m 'Initial commit'
Run Code Online (Sandbox Code Playgroud)
现在我们有原始海报的问题.让我们使用上面链接的答案将git repo的根目录移动到project-root:
git filter-branch --tree-filter 'mkdir -p path/to/module ; git mv dir1 dir2 dir3 path/to/module' HEAD
rm -rf path
cd ../../../ # Now PWD is project-root
mv path/to/module/.git .
git reset --hard
Run Code Online (Sandbox Code Playgroud)
现在,看看我目前的问题:
gitk …Run Code Online (Sandbox Code Playgroud) 我尝试通过运行以下命令从远程仓库中删除文件:
git filter-branch --index-filter 'git rm --cached --ignore-unmatch Rakefile' HEAD
Run Code Online (Sandbox Code Playgroud)
但是Git抱怨说
无法创建新备份.以前的备份已存在于refs/original/
Force中使用-f
rm 覆盖备份:无法删除/.git-rewrite/backup-refs:权限被拒绝
rm:无法删除目录/.git-rewrite:目录不为空
这是在我已经删除了Windows上的.git-rewrite目录之后.
我该如何删除该文件?这是一个29Mb的文件,坐在我的仓库,所以我非常需要删除该文件.
我试图删除提交git rebase -i,但显然因为提交触及了很多不同的文件,Git抱怨冲突,我流产是安全的.
git filter-branch --env-filter '
export GIT_AUTHOR_EMAIL="foo@example.com"
export GIT_AUTHOR_NAME="foo"' -- commita..commitb
Run Code Online (Sandbox Code Playgroud)
结果是 Which ref do you want to rewrite?
因此,似乎filter-branch不允许您使用范围表示法使用两个任意引用之间的范围.
如果不可能采用这种方法,那么在一系列连续提交(分支历史中某处)上运行过滤器的最直接方法是什么.
有一个 git repo,其中包含不正确的贡献者及其贡献。Repo 很少有来自不同电子邮件和别名的提交,我们已添加.mailmap以解决此问题。
Shortlog 会相应地识别.mailmap和分组贡献,但它不会反映在 GitHub 上。GitHub 是否考虑.mailmap文件,或者我们应该等待 GitHub 重新运行图表。
git shortlog -sne
Run Code Online (Sandbox Code Playgroud)
注意:我们已经等了24小时
我正在使用一个在GitHub上使用私有存储库的命令.这是合同工作,一旦完成,我将无法访问此存储库.
我经常在那里投入,因此我的"你的贡献"(GitHub的"时间线"或"拉请求摘要,问题打开和提交")看起来相当不错.我希望它看起来一样.
但是,当作业完成并且我将无法访问此存储库(管理员限制我访问此存储库)时,我几乎可以确定我的"时间轴"将立即变得更加灰色,因为此存储库已从我可以贡献的存储库列表.
不是这样,我该如何避免这种情况?
更新:我想避免它的原因是我希望潜在的员工能够通过查看我的时间表来了解我的工作方式.
我有各种私有的GitHub 存储库并使用Sublime Merge来管理我的提交。
我想更改所有以前的提交作者详细信息:
来自姓名:This,电子邮件:this@domain.com
收件人:姓名:那个,电子邮件:那个@domain.com
因此,我遵循了 GitHub 上的这些说明,并将代码修改为以下内容:
#!/bin/sh
git filter-branch -f --env-filter '
CORRECT_NAME="That"
CORRECT_EMAIL="that@domain.com"
export GIT_AUTHOR_NAME="$CORRECT_NAME"
export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
' --tag-name-filter cat -- --branches --tags
Run Code Online (Sandbox Code Playgroud)
在其中一个存储库中,这是有效的,在我git push --force --tags origin 'refs/heads/*'从指令中使用 Sublime Merge 之前,它显示了潜在的更改,并且在运行推送后,所有提交现在都更新为所需的详细信息。
一切都很好,所以我想,直到我在我的其他几个存储库中尝试了这个,并且 sublime 中没有显示任何变化并且推送没有任何作用。我不知道为什么会有不同。其他存储库的相似之处在于它们都具有相同的原始提交者。
为什么这对其他存储库不起作用,我该如何修复以允许我进行更改?
当我输入git log生成的提交列表时,在我的用户名后面括号<>中显示我的密码,如下所示:
commit 5ff14f929e2244f388a41b6f711e7b9b58c57cb2
Author: herman <MyPassw0rd>
Date: Wed Aug 29 10:00:39 2018 +0200
initial commit
Run Code Online (Sandbox Code Playgroud)
为什么会这样做,我该如何解决?