我最近注意到我在git中的版本控制下有一个包含敏感信息的文件。现在,我已将此文件添加到.gitignore列表中,但是如何在不触摸其他内容的情况下从提交历史记录中删除所有提及的文件?即,我不想只删除我的.git目录。
我有一个 git repo,它有一个源文件,其中包含一些我希望删除的敏感内容(我不想删除该文件,只需修改其内容)。提交是在项目开发的早期(当时我们只有一个分支),但现在在其他 n 个分支中找到了它自己。
是否有任何 git-fu 我可以运行以在所有分支中清理它?交互式 rebase 一次只能对一个 Head 起作用。
我确实在 github 上找到了这个命令:
git filter-branch --force --index-filter \
'git rm --cached --ignore-unmatch DotNet/src/ExternalLibs/GemBox/' \
--prune-empty --tag-name-filter cat -- --all
Run Code Online (Sandbox Code Playgroud)
但它只适用于删除,而不是修改。
A-B-C-**STUPID**-D-E-F
\
\-G-H-I
\-J-K
Run Code Online (Sandbox Code Playgroud) git rebase git-rebase git-rewrite-history git-branch-sculpting
我们有以下历史
start master public
| | |
v v v
o---o-- ... --o---o---o
Run Code Online (Sandbox Code Playgroud)
不幸的是,我们在master包含一些敏感数据的分支中做了一些提交.我们在一个名为public的独立分支中进行了修改.现在我们想要"切断" public分支,以获得一个完整而干净的"状态",public但没有妥协的历史部分仍然包含在内master.换句话说,我们想要以下新历史:
start master
| |
v v
o---o-- ... --o---o
\
o <- public
Run Code Online (Sandbox Code Playgroud)
现在退房public将导致与原始情况相同的工作树,但没有合理的历史细节.然后我们将旧分支停止master:将其重命名为unsafe并从新master分支中精心设计一个新public分支.通过这种方式,我们保留了旧的历史,unsafe并且能够public毫无后顾之忧地将分支机构推向公众:
start unsafe
| |
v v
o---o-- ... --o---o
\
o---o-- ... --o <-- public
\ /
o-- .. --o-- ... --o <-- master
Run Code Online (Sandbox Code Playgroud)
有什么正确的git命令来实现这一目标?
PS:当然我们可以结账start,建立一个新的分支并在那里提交分支的整个工作树public.但必须有一种不同的,更加迷人的git方式!
我不小心将一个我没有权利的文件推送到一个可公开访问的仓库.
我可以做些什么来完全从repo中选择性地修改单个文件,以便它的数据完全消失?
有这样一个问题,虽然很老,但似乎没有帮助。我有回购。在 repo 中,我有一个大约 6MB 的 gif 文件。它发生了,所以我推送了这个 GIF 的不同版本,显然它们都存储在 .git 文件夹中,这使得 git 文件夹的大小约为 40MB。
从我尝试按照链接问题中的建议运行的项目文件夹中:
git repack -a -d --depth=250 --window=250
Run Code Online (Sandbox Code Playgroud)
但这并没有影响 .git 文件夹的大小(我是否必须推动才能看到缩小的大小?)。我可以做些什么来减少 .git 文件夹的大小?
同样尝试git gc似乎没有减少 .git 文件夹的大小。
如何__pycache__使用删除存储库中的所有子目录.gitignore?
我需要在我的存储库中移动当前和所有过去的文件修订版,然后用新文件替换它们.基本上,没有想到,我忘记了(并且不断忘记)删除数据库连接文件的mysql密码,并希望删除任何此类痕迹.
最简单的解决方法是更改mysql密码,从这一点开始,不要在文件中包含密码,但是,我只想清理修订历史记录.
在Tortoise SVN中有一个Repo-Browser,我们可以简单地删除所有文件并再次添加新文件.
我们怎样才能在GIT中做到这一点?
repo不在GITHub中托管,并且repo url没有任何接口
为什么?
我创建了一个本地仓库并推入远程主机,但之后意识到它位于错误的目录中,所以,本地很容易,只是
git init
git add .
git commit -m "New place commit;"
git remote add alias https://user@domain.com/reponame.git
git push alias master
Run Code Online (Sandbox Code Playgroud)
但我得到了错误
To https://user@domain.com/reponame.git
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'user@domain.com/reponame.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again. See the
'Note about fast-forwards' section of 'git push --help' for details.
Run Code Online (Sandbox Code Playgroud)
女巫很好,因为我正在推动一个新的回购...所以我只是想清除远程的那个以便能够推动这个新的...
我不小心提交了一个包含敏感数据的文件。我需要通过删除敏感数据来更新该文件,并确保旧版本不会出现在历史记录中。
我知道那些在本地克隆了 repo 的人仍然可以访问它。但是,一旦他们提取最新的数据,是否可以将其设置为看不到向前移动的敏感数据或无法在日志中看到它?
我的问题:
在设置存储库的早期,错误被导致将当时的所有图像写入存储库.这在gitignore文件中很快得到纠正,不再出现问题.
现在问题是我们有一个庞大的存储库,其中包含图像的历史记录.这在本地克隆存储库时会出现问题,因为它比提示中的干净克隆需要更长的时间.
我的问题:
有没有办法删除包含永远不需要的图像的历史部分?
如果我无法删除,我可以以任何方式压缩甚至清理历史记录吗?
git ×10
github ×2
branch ×1
delete-file ×1
git-rebase ×1
gitlab ×1
msysgit ×1
permanent ×1
rebase ×1
repository ×1
security ×1