我创建了项目的第一个提交,但忘了忽略node_modules。
我尝试this solution取消提交。但是,它返回了这个信息(抱歉,没有复制/粘贴功能的虚拟机):
如您在上面的屏幕快照中所见,它无法完成我所期望的。 (红线用于隔离命令并帮助阅读)
考虑到这是第一次提交,如何取消最新提交?
答案 0 :(得分:3)
您不需要删除提交。您可以删除节点模块,编辑.gitignore
并将更改修改为最后一次提交(在您的情况下也是第一次提交):
# changes
git commit --amend
git push -f
如果您坚持要删除提交,则可以运行
git update-ref -d HEAD
git push -f
答案 1 :(得分:1)
您的git reset
命令失败的原因是git reset
实际上没有删除提交。相反,它会将您从当前分支名称所标识的当前提交移动到同一分支上的上一个提交。但是只有一次提交!它没有先前的提交。因此,无处可去。
与Maroun said一样,您可以更新索引-在这种情况下,通过运行git rm --cached node_modules
从索引中删除所有node_modules
个文件,而将它们保留在工作树中,然后运行git commit --amend
。 --amend
所做的是修改提交操作。 代替将添加到当前分支中,而将当前提交推到另一端。
当您进行多个提交时,从图形上来说更有意义。例如,如果您有三个提交(在这里我们将分别称为A
,B
和C
使用三个不同的哈希ID),则可以这样绘制它们:
A--B--C <-- master
在创建git commit --amend
时,使用C
会将D
推开:
C [abandoned]
/
A--B--D <-- master
请注意,现有提交C
保留在您的存储库中。根本没有找到查找的明显方法:git log
将不会显示它,因为git log
现在以D
开头,现在是 last 在您的master
上提交,然后向后退回到B
,然后退回到A
。
但是,在这种情况下,没有先前的提交。您现有的一组提交将被绘制为:
A <-- master
当Git推开A
来插入B
时,您会得到:
A
B <-- master
同样,没有明显的方法来找到刚刚“替换”的提交。它仍然存在,并且默认情况下会至少保留30天,以防万一您决定要回去,但是对于大多数用途来说,它已经消失了。最终,您的Git会删除它,因为它没有任何人可以找到的名字。
但是,如果您已将提交A
发送给某些 other Git,例如使用git push origin master
,则 Git仍然具有副本提交A
。您必须让他们用新的和经过改进的A
替换其B
。为此,通常需要使用git push --force origin master
或git push --force-with-lease origin master
。
如果您还没有将提交A
发送到其他Git存储库,则没有必要。