如何在推送提交后删除文件?

12 浏览
0 Comments

如何在推送提交后删除文件?

我“不小心”将一个提交推送到GitHub上。\n是否有可能删除这个提交?\n我想将我的GitHub仓库恢复到这个提交之前的状态。

0
0 Comments

如何在推送提交后删除文件?

问题的出现原因:在使用git push命令将提交推送到远程仓库后,发现需要删除其中一个文件。但是,git push命令并不提供直接删除文件的功能。

解决方法:可以通过以下方式解决该问题:

1. 使用git push -f origin HEAD^:master命令来撤销刚刚的推送操作。这个命令会移动分支指针,将其指向上一个提交,从而达到撤销的效果。需要注意的是,这只是移动了分支指针,而远程仓库中的提交仍然存在。

2. 如果使用的是GitHub应用程序,可以在“历史记录”页面打开需要撤销的提交,并点击“撤销提交”按钮。或者可以选择之前的提交并点击“还原到此提交”按钮。这两个操作都能够撤销指定提交以及之后的所有更改。

3. 可以使用git reset --hard HEAD~1命令来删除本地仓库中的最后一个提交。这个命令会重置HEAD指针并删除相关的提交,需要注意的是,HEAD后面的^符号可以替换为~符号,例如HEAD~3代表删除最后三个提交。

4. 如果出现“Everything up-to-date”的错误提示,可能是本地仓库不是最新的,可以尝试使用git push -f origin HEAD\^:mastergit push -f origin HEAD~:master命令来强制推送指定的提交。

需要注意的是,这些解决方法并不适用于所有情况,如果本地仓库和远程仓库存在其他差异,可能会导致更多的提交丢失。因此,在使用这些命令之前,建议先备份重要的提交或咨询相关的版本控制工具专家。

0
0 Comments

如何在提交后删除文件?

首先,在本地存储库上删除提交。您可以使用git rebase -i来做到这一点。例如,如果这是您的最后一次提交,您可以使用git rebase -i HEAD~2并删除弹出的编辑窗口中的第二行。

然后,通过使用git push origin +branchName --force强制推送到GitHub。

请参阅Git Magic第5章:历史的教训 - 以及其他内容 获取更多信息(例如,如果您想删除旧的提交)。

哦,并且如果您的工作树是脏的,您必须先执行git stash,然后执行git stash apply

不需要对本地树进行任何修改来满足用户的请求。

请注意,删除本地提交将完全损坏它,而不仅仅是“取消提交”。我认为无法恢复它。

请注意,这仍然会在reflog中保留提交。如果您在其中有敏感数据,可能必须完全删除存储库。

我很困惑。为什么不能使用git reset --soft HEAD^取消提交,然后执行git push origin +master?为什么我们在这种情况下使用git rebase -i HEAD^^

因为我3.5年前不熟悉reset --soft

完成。我刚刚使用了git reset --soft方法,效果很好。git rebase是一种吓人的黑魔法。

大家要小心。请参阅下面的subutux的评论。即使在强制推送到GitHub之后,GH仍然缓存您的提交。来自help.github.com/articles/remove-sensitive-data:"危险:一旦提交已被推送,您应该将数据视为已被泄露。如果您提交了密码,请更改!如果您提交了密钥,请生成新密钥。"

这真的是删除提交还是恢复更改?

对不起,"+"中的"+"是什么意思?

哦,它意味着“强制推送”,对吗?

您的“删除第二行”评论已过时或需要澄清。

嗨,我尝试了这个方法,但它告诉我“Everything up-to-date”,并且不起作用。有什么想法吗?

谢谢,它对我有用,但是“删除第二行”对我来说似乎不正确。我有A-B-C,我最终删除了B-C而不仅仅是C :(。

为什么您在branchname之前放置+

这是关于“git reset --soft HEAD^”的一个好参考:stackoverflow.com/questions/24568936/…

另外,“HEAD^”等同于“HEAD~1”。参见:salferrarello.com/git-head-tilde-vs-head-caret

所以我按照您的解决方案执行,结果被覆盖并推送到了错误的仓库。所以我丢失了我想要的提交?有没有办法再次检索它?

非常感谢!如果您的远程分支受到强制推送的保护,请更改其设置!

0