如何取消git添加--所有操作后面都有多个提交
我之前无意中使用了如何取消git添加--所有操作后面都有多个提交,git,github,git-add,Git,Github,Git Add,我之前无意中使用了git add--all,然后进行了几次提交,它试图添加几个应该忽略的大文件 现在,在任何提交时,它都会显示“这超过了GitHub的100.00 MB文件大小限制”。我尝试了git--reset,但它显示您的分支比“origin/master”提前了2次提交。如何让git恢复正常?非常感谢。如果您已经提交,一个选项是删除您的文件夹并再次克隆它。新的更改将丢失!只有在您独自处理此回购且没有太大变化的情况下,才能执行此操作。您可以通过运行git reset HEAD~2--hard
git add--all
,然后进行了几次提交,它试图添加几个应该忽略的大文件
现在,在任何提交时,它都会显示“这超过了GitHub的100.00 MB文件大小限制”。我尝试了git--reset,但它显示您的分支比“origin/master”提前了2次提交。如何让git恢复正常?非常感谢。如果您已经提交,一个选项是删除您的文件夹并再次克隆它。新的更改将丢失!只有在您独自处理此回购且没有太大变化的情况下,才能执行此操作。您可以通过运行
git reset HEAD~2--hard
返回2次提交。如果您尚未提交,请运行:
吉特储藏室-u
TL;博士:
请参阅或上的各种答案,跳到最后一节“最终示例”
解释
你问题中的问题是你没有正确描述你的情况。您不仅添加了各种文件,还提交了它们。这意味着它们现在永久存储在您的存储库中
永久这个词在Git中有点奇怪。的确,提交是固定不变的,并且无论您做什么,都会在存储库中保留很长一段时间。默认情况下,它们将永远留在那里,成为任何人所做的每一次承诺的历史的一部分。Git从不删除任何提交:每个新提交都保留其上一次提交(称为其父提交)的标识,新提交到旧提交的反向链是存储在存储库中的历史记录
提交本身实际上是由hash id存储的,Git向您展示的那些丑陋的东西(有时缩写),比如a9b307c
等等。这些散列ID是每个提交的“真实名称”。它们看起来是随机的,基本上不可能被人们记住,所以我们要做的是让Git在某个特定的提交上附加一个名称,比如master
。我们称之为分支的顶端。该提交本身具有上一个分支提示的哈希ID
考虑一下这张只有三次提交的存储库图,所有提交都在master
上。我将为每个提交使用一个字母的名称,而不是哈希ID:
A <--B <--C <--master
CommitD
获取一个新的、唯一的哈希,该哈希基于D
中的所有内容(包括C
的哈希ID,以及您的姓名、电子邮件地址和当前时间)。但Git Git中的分支名称的秘密是,现在将新提交的哈希ID写入分支名称中,这样名称master
现在指向提交D
:
A <--B <--C <--D <--master
CommitD
仍然存在(这是一种永久性的!),但从名称master
无法访问它,因为Git从master
名称的Commit hash ID开始,并向后工作。这意味着Git不会“看到”提交D
:它不再位于分支master
上
1您可以一次推送多个分支名称。这过去是git push的默认操作,事实上,尽管这很容易出错,但现在的默认操作是只推当前的分支名称 在Git中,有时仔细区分名称(如
master
和develope
)和我称之为“DAGlets”(提交图的一部分,如上文所示)是很重要的。提交图是一个D定向a循环G图或DAG。git fetch
和git push
都采用分支名称或任何其他类型的名称。他们在互联网电话的另一端调用另一个Git,并与之交谈:他们给对方一些这样的名字,然后将它们转换为适当的哈希ID。然后,它们根据散列ID和我前面提到的父链接决定发送或接收哪些提交(以及其他Git对象)。因为散列ID完全基于每个提交的内容,如果您的Git和他们的Git具有相同的提交,那么这两个提交具有相同的散列ID
关于git重置的了解 在Git中移动分支指针的主要方法是使用
Git reset
。不幸的是,git reset
是一个复杂的命令
Git还有另外一对重要的特性:当您使用Git commit
进行提交时,您可以从一些东西进行提交。“某物”本身实际上是Git的索引。索引主要是构建下一个提交的位置
当您运行git add
时,git会从您的工作树(您工作的地方)中获取文件,这些文件的格式是您可以实际使用的,并将其复制到索引中。运行git add--all
时,git获取所有工作树文件2并将它们添加到索引中
此时,它们在索引中,但未提交,因此它们不是永久性的。您可以git reset
将它们从索引中重新设置出来。这是git reset的工作之一:重新设置索引
但这些文件也在您的工作树中。工作树版本也没有提交,因此它们不是永久的。您也可以git reset
它们,这是git reset
的另一项工作
当然,git reset
可以移动一个分支名称,这是我们在这个特殊情况下需要的,因为您确实提交了文件,所以现在它们作为新提交的一部分永久存储。移动分支名称是git reset的三项主要工作中的第三项。3这三项工作的重要性顺序如下:
git reset
始终移动(重新设置)分支名称李>
git reset
有时会重置索引;及git reset
偶尔会重置工作树--soft
(仅执行作业1)、--mixed
(执行作业1和作业2)和--hard
来控制它们
A <--B <--C <--D <--master
A--B--C <-- master
\
D
...--o--o--o <-- origin/master
\
X--o--o--o--Y <-- master (HEAD)
git branch save-my-mistake
...--o--o--o <-- origin/master
\
X--o--o--o--Y <-- master (HEAD), save-my-mistake
git reset --hard origin/master
...--o--o--o <-- master (HEAD), origin/master
\
X--o--o--o--Y <-- save-my-mistake