我在提交 A001
中偶然提交了一些文件。这些文件非常大(每个大约 100MB)。在注意到我的错误后,在下一次提交中,我使用 rm
命令删除了这些文件,并将这些更改提交到提交 A002
。我认为这解决了我的问题并继续开发。几次提交后,假设提交 A005
我已经尝试将所有内容推送到远程(大文件已被删除,但它们仍在提交 A001
中提交),推送失败并显示以下消息:< /p>
remote: error: GH001: Large files detected. You may want to try Git Large File Storage - https://git-lfs.github.com.
...
...
! [remote rejected] melodic-dev -> melodic-dev (pre-receive hook declined)
没关系,因为提交 A001
中仍然存在大文件。
我该怎么做:
A001
,取消暂存那些大文件并重新创建提交A001
,而没有删除那些大文件,同样提交A002
A003
-A005
,因为它们处于重新创建的 A001_edited-A002_edited
提交的尖端,没有那些大文件A001-A005
提交推送到远程分支我需要类似的东西:创建包含所有提交 NEW_BRANCH:A001-A005
的新分支。在那个分支中,我想从提交 A001
中删除一些文件,因此我有 NEW_BRANCH: A001_edited
提交,我想将 OLD_BRANCH:A001-A002-A003-A004-A005
与 NEW_BRANCH: A001_edited-A002_edited
合并,以便我有以下内容:OLD_BRANCH: A001_edited-A002_edited-A003-A004-A005
A001_edited = A001 不提交(还原 git add Large files
)那些大文件
A002_edited = A002 不删除(还原 git rm Large files
)那些大文件
在历史某个地方的连续两次提交中,我想删除一些暂存/未暂存文件并保持其他所有内容相同。
我尝试了一些东西,但没有成功。 我希望我已经足够澄清我的问题,如果没有让我知道:)
感谢您的时间和帮助。
答案 0 :(得分:1)
这可以通过一种称为变基的强大而可怕的方法来解决! :) 这是一种方法:
git rebase -i --root
。这将打开一个编辑器,列出从 A001 到最新提交的所有提交。git rm --cached bigfile1 bigfile2
以将它们从索引中删除,然后运行 git commit --amend
以修复提交 A001 以不包含它们。git rebase --continue
。这将在您更改的提交之上重新应用所有提交。 A002 现在应该只包含您所做的更改而不是删除文件。任何提交都不应再包含大文件。希望对您有用,如果您遇到任何问题,请告诉我!
答案 1 :(得分:1)
我已经按照 blinry 的建议使用了 rebase
,但没有使用 git rm --cached bigfile1 bigfile2
。
如果我还没有这样做,我会使用 git rm --cached bigfile1 bigfile2
A002
提交。
为了澄清,我无意中将一些大文件添加到 A001
和
在提交 A002
中删除了它们,这使我无法推送远程分支。我只是使用了交互式变基并将提交 A002
压缩到 A001
中:
如下:
pick A005
pick A004
pick A003
squash A002
pick A001
Squash
命令“合并”选择的提交与前一个提交,在这种情况下,它“合并”删除大文件,添加大文件和一些代码更改,这导致了想要的代码更改而没有大文件,并清理 git 历史记录 (Everything before A001
- A001_without_big_files
-A003
-A004
-A005
)
感谢您的帮助:)