Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.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_Git Rebase - Fatal编程技术网

Git 我能完全放弃承诺吗?

Git 我能完全放弃承诺吗?,git,git-rebase,Git,Git Rebase,我想彻底放弃某项承诺 我做了这个实验: 首次回购 bash-3.2$git init 已在/Users/*****/test/.Git中初始化空Git存储库/ 创建一个文件 bash-3.2$touch自述 bash-3.2$ls 自述 提交此创建 bash-3.2$git-add。 bash-3.2$git提交-m“首次提交” [主(根提交)b9f8e60]第一次提交 1个文件已更改,0个插入(+),0个删除(-) 创建模式100644自述文件 编辑该文件(发生了一些错误) bash-3

我想彻底放弃某项承诺

我做了这个实验:

首次回购

bash-3.2$git init
已在/Users/*****/test/.Git中初始化空Git存储库/
创建一个文件

bash-3.2$touch自述
bash-3.2$ls
自述
提交此创建

bash-3.2$git-add。
bash-3.2$git提交-m“首次提交”
[主(根提交)b9f8e60]第一次提交
1个文件已更改,0个插入(+),0个删除(-)
创建模式100644自述文件
编辑该文件(发生了一些错误)

bash-3.2$emg>readme
bash-3.2$cat自述
错误消息
漫不经心地进行修改

bash-3.2$git-add。
bash-3.2$git提交-m“粗心提交”
[master 1eec681]粗心的承诺
1个文件已更改,1个插入(+)
检查日志

bash-3.2$git日志--oneline
将给予

1eec681粗心提交
b9f8e60首次提交
现在,我意识到了这个错误,并想纠正它

bash-3.2$git-rebase-i头^
将提示

选择1eec681提交
#将b9f8e60..1eec681重新设置到b9f8e60上(1命令)
#
#命令:
#p,pick=使用提交
#r,reword=使用提交,但编辑提交消息
#e,edit=使用提交,但停止修改
#s,squash=使用提交,但合并到以前的提交中
#f,fixup=类似于“squash”,但丢弃此提交的日志消息
#x,exec=使用shell运行命令(行的其余部分)
#d,drop=remove-commit
#
#这些线路可以重新订购;它们是从上到下执行的。
#
#如果在此处删除一行,则提交将丢失。
#
#但是,如果您删除了所有内容,则重新基础将中止。
#
#请注意,空提交将被注释掉
pick
更改为
drop
,然后将
:wq
更改为保存,然后它将输出

已成功重新设置基准并更新了参考文件/头文件/主文件。
检查日志

bash-3.2$git日志--oneline
b9f8e60首次提交
改正错误

bash-3.2$echo CorrectMsg>readme
bash-3.2$cat自述
更正消息
承诺

bash-3.2$git-add。
bash-3.2$git提交-m“更正”
[母版f224289]更正
1个文件已更改,1个插入(+)
日志

bash-3.2$git日志--oneline
f224289校正
b9f8e60首次提交
drop似乎成功了,但如果我执行此操作:

bash-3.2$git重置——硬1eec681
HEAD现在位于1eec681
bash-3.2$git日志--一行
1eec681粗心的承诺
b9f8e60首次提交
砰,历史仍在回购协议的某个地方,它并没有真正被抹去


我可以完全删除此历史记录吗?

它最终会被删除,但如果确实需要删除提交,则可以手动运行


您需要使用
--aggressive
--prune=all
运行它,以确保删除悬空提交。

git是惰性的,所有这些提交都保留在周围,您可以使用

git reflog
这将显示您所做的所有历史更改(移动分支、提交、重设基础等)


它们确实会被垃圾收集器清理,但老实说,这个功能比讨厌的东西更有用。对于它将使用的少量空间,我并不担心。

键入git reflog以显示各种提交消息和头号。
键入git reset--hard HEAD{HEAD Number在这里}。标题编号是您希望项目恢复到的位置。警告:一旦恢复,您就不能返回到那个时间点。

FWIW,在这种情况下,您应该使用
git commit--amend
而不是那个重基舞蹈。我将此标记为重复,因为重复的答案正确(您必须先终止或删除reflog条目,然后像Andreas Wederbrand的回答那样使用
git gc
;或者您可以克隆存储库并删除原始条目,这一点更为激烈).但是,我对exussum的答案投了赞成票,因为它通常是最适用的。但是提交仍然会存在。只要我知道错误提交的原因,我就可以返回到错误提交。我想完全删除该提交。遵循此链接。这可能会帮到你。我尝试了
git gc--aggressive--prune=all
,但我仍然可以回到迷雾中阿肯用它的沙承诺