同步一个非常过时的github存储库

时间:2017-05-22 17:15:16

标签: git

我有一个庞大的github存储库,它严重失控。我有大约100 MB的源文件(应该被推送)和~10 TB的数据(不应该被推送)。

我已经完成了

git add .
git commit -m 'Resync'

但后来我注意到许多不应该被推送的文件已被添加到提交中。我将这些文件添加到我的.gitignore文件中,但现在当我再次执行上述行时,似乎除了新的.gitignore文件之外没有添加任何内容。

我想我应该这样做

git rm -r --cached .

但我害怕去年失去了所有的工作。我应该做些什么?

2 个答案:

答案 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 想要提交的文件。 (并且您仍然需要确保忽略文件已暂存。)