我有一个庞大的github存储库,它严重失控。我有大约100 MB的源文件(应该被推送)和~10 TB的数据(不应该被推送)。
我已经完成了
git add .
git commit -m 'Resync'
但后来我注意到许多不应该被推送的文件已被添加到提交中。我将这些文件添加到我的.gitignore
文件中,但现在当我再次执行上述行时,似乎除了新的.gitignore
文件之外没有添加任何内容。
我想我应该这样做
git rm -r --cached .
但我害怕去年失去了所有的工作。我应该做些什么?
答案 0 :(得分:1)
如果你尚未推送提交。您可以通过const googleApiClient = require('@google/maps').createClient({
key: CONFIG.googleApis.key
});
const poll = zipcode => {
return new Promise((resolve, reject) => {
googleApiClient.geocode({
address: zipcode
}, function(err, response) {
resolve(response.json.results); // This is line 22
});
});
};
module.exports = {poll}
撤消它。这将撤消提交,您可以正确添加文件。
答案 1 :(得分:1)
因为你有本地提交的东西,并担心失去工作,所以首先为“坏”提交创建一个标记。如果一切都得到纠正,你可以删除标签,但同时你可以随时回到原来的位置。
git tag bad_commit
# try some things, but oops, the work tree ends up corrupted
git checkout bad_commit
# carry on
那只是一个安全网;你无论如何都不会为你的当地国家付出代价。但是,针对你忘记思考的奇怪情况的预防措施永远不会伤害。
为此:您还可能希望确保提交包含有关您本地状态的所有内容。
git status --ignored
应报告“无需提交,工作树清理”,并且不将任何文件列为“已忽略”。
这是违反直觉的,因为你在gitignore中有文件。正如您所发现的,git的忽略规则仅适用于未跟踪的文件,因此它不会忽略它已经知道的文件(即使它们与gitignore模式匹配)。
如果可以将这些文件添加到repo中然后在后续提交中删除,那么你可以
git rm --cached files.that.should.have.been.ignored
由于--cached
关键字,不会影响您的工作树副本。这些文件将在当前的暂存区域中进行未跟踪(用于下一次提交),因此忽略规则将过滤掉它们。
或者如果你想要清理它“就像它从未发生过”,只要你没有推送错误的提交,就可以使用git reset
git reset --mixed HEAD^
(假设错误提交是最新的提交)。注意我建议混合重置,因为这将使您的工作树单独使用。从这里开始,您将重新展示应该提交的内容(包括.gitignore
文件)并从那里开始。实际上,因为没有进行任何更改并且.gitignore
存在
git add .
这次应该工作(虽然使用git status
进行仔细检查是一个好主意。)
另一种选择是执行 soft 重置而不是混合重置,在这种情况下,您之前的暂存工作将保持有效/准备再次提交。在这种情况下,您必须git rm --cached
不想要提交的文件。 (并且您仍然需要确保忽略文件已暂存。)