8

我的问题:cygwin git 在使用 https:// URL 时似乎没有正确提示输入凭据,所以我在 URL 中使用了用户名和密码。不幸的是,当我执行“get pull”时,它会自动提交一条带有完整 URL 的消息,包括密码。直到我推送了更改之后,我才注意到这一点。

如何编辑旧的提交消息以消除 URL 中的密码?

我的共享 git 存储库在我自己的服务器上。如有必要,我可以对回购进行手术。

关于如何更改我的配置(即不要使用 Cygwin,不要使用 https)的说明是不必要的——我正在尝试处理已经完成的事情。

是的,我可以并且会刻录密码,但我仍然想修复它。

4

3 回答 3

4

要从 git 存储库及其历史记录中完全删除文件,请使用这些命令。

# Check out the remote repo
git clone git://host/path/repo.git
cd repo

# Clobber the file in your checkout
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch file-to-purge.txt' --prune empty --tag-name-filter cat -- --all

# Make sure you don't accidentally commit the file again
echo file-to-purge.txt >> .gitignore
git add .gitignore
git commit -m "Prevent accidentally committing this again" .gitignore

# Push the edited repo. This will break other people's clones, if any.
git push origin master --force

有关更多信息,GitHub 上的删除敏感数据指南将为您提供帮助。

于 2011-12-06T02:09:49.853 回答
1

在 git-hub 上删除敏感数据的链接很有用。但是,我发现了一个使用起来非常直接的工具:Eric Raymond reposurgeon

这个工具让我可以轻松地导入我的 repo,列出带有问题的提交,编辑它们(我单独这样做)并写出我的 repo 的 git fast-import 流。我将该流导入到一个新的 repo 中并 rsync 将其放置到位。

缺点是我的旧回购完全死了——我改变了历史。根据文档,使用“git filter-branch”也是如此。

于 2011-12-10T16:42:37.007 回答
0

如果您可以编辑服务器,则可以将分支头重置为前一个 (HEAD^)。

  • 首先,获取要“还原”到的 HEAD^ 哈希。
  • 转到(git 裸存储库在服务器中的目录)/refs/heads,更改为用户 git(或任何 git 服务),运行“echo (hash) > (branch name)”进行重置。

就这样。顺便说一句,在执行上述操作之前,您无法更改拉取的回购

于 2011-12-06T02:34:54.240 回答