Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
删除本地提交而不更改Git中的工作目录_Git_Github - Fatal编程技术网

删除本地提交而不更改Git中的工作目录

删除本地提交而不更改Git中的工作目录,git,github,Git,Github,所以我最近做了一件傻事 git add -A 在我的工作目录中添加了一些我不想添加的大型数据文件(>1GB)。我犯了一个愚蠢的错误,当我试图推到Github时,Github抱怨我没有足够的空间,因此无法推(完全合理)。考虑到我在一些代码的中间,我用我的项目推进了,在原始的提交的顶部做了更多的提交,这些数据有大的数据文件。所以现在,我遇到了4个无法推送的本地提交,因为我在第一次提交中有那些大数据文件。有没有什么干净的方法可以解决这个问题而不改变我当前工作目录中的任何内容(自从第一次提交大文件以来

所以我最近做了一件傻事

git add -A
在我的工作目录中添加了一些我不想添加的大型数据文件(>1GB)。我犯了一个愚蠢的错误,当我试图推到Github时,Github抱怨我没有足够的空间,因此无法推(完全合理)。考虑到我在一些代码的中间,我用我的项目推进了,在原始的提交的顶部做了更多的提交,这些数据有大的数据文件。所以现在,我遇到了4个无法推送的本地提交,因为我在第一次提交中有那些大数据文件。有没有什么干净的方法可以解决这个问题而不改变我当前工作目录中的任何内容(自从第一次提交大文件以来,我对代码做了很多修改)


谢谢

首先隐藏/提交剩下的任何代码,然后重新设置要编辑的提交的基础(我使用的一种简单方法是从git日志中获取哈希值,并添加一个
~
来表示我需要父级)

您将获得一个交互式编辑器,将错误提交从
选择
更改为
编辑
,或仅
e
,然后保存并退出

重基将在错误提交时停止,现在您想删除大文件,但同时又不想删除它,因此可以将
--cached
添加到
git rm

git rm --cached /path/to/huge/file
这将从索引中删除它,但不会从本地系统中删除,然后我们希望将此更改保存到提交

git commit --amend # or just --am
现在提交不再包含这个大文件,所以我们告诉git继续重基

git rebase --continue
这将添加剩余的提交,现在您将发现大文件未被跟踪


如果你藏起来了,那么现在是时候把它解开了。

你有了完全相同的问题(写信),花了整整一天的时间才找到答案。在这里找到的

它不是一个硬重置,你失去工作目录的变化,它是一个软的。简单如馅饼(一旦你知道怎么做,1意味着返回1提交..)


Git分支在您推送/共享之前是完全可丢弃的。不要担心创建新的本地提交(它实际上是最安全的方法!)。只需离开大型提交的“下游”——一种方法是重新设置基址。对于重新设置基址,请参阅,因为您已经首先提交了当前工作目录,并且进行了所有更改,您可以返回到该目录。如果我不想从提交中删除添加的文件,但不想删除修改,是否有对答案的简单修改?也就是说,一次提交更改了几个文件,我想在提交中保留对某些文件的更改,但我想保留在工作目录中的其他更改,以便以后可以单独提交?您可以尝试使用
git reset HEAD-p
,这将生成反向差异或所有更改,使用
yes
no
来决定要保留哪些更改以及要删除哪些更改我最终在重新基址中的
edit
上设置了有问题的提交,然后,当重新基址在这些提交之后停止时,将它们取回并在两个单独的提交中提交更改(我想保留的和我想丢弃的)。然后,我继续重新基址,最后我做了另一个重新基址,这次只使用提交-我想删除的提交放在最后。最后,使用
git reset
,我删除了这些提交,而没有修改工作树。@ViktorDick抱歉,我误解了你,我以为你只是添加了更改,但没有提交。什么我通常在这种情况下做的是,你做一个重基,然后像你做的那样做一个
edit
,但不是重置整个提交,而是做一个git
reset HEAD~-p
,你会选择
yes
,只对你想要删除的更改进行修改,然后你做一个
git commit--amend
,然后你的提交会被修复,更改也会被修改您将删除未老化的更改,您可以
签出它们或
添加它们,这取决于您想要什么,然后
git-rebase--继续

git rebase --continue
git reset --soft HEAD~1