如何从最新提交中删除文件?
当前回答
如果您想保留提交(可能您已经花了一些时间编写了详细的提交消息,不想丢失它),并且您只想从提交中删除文件,而不是完全从存储库中删除文件:
git checkout origin/<remote-branch> <filename>
git commit --amend
其他回答
现有的答案都是关于从上次提交中删除不需要的文件。
如果您想从旧提交(甚至推送)中删除不需要的文件,并且不想创建新提交,这是不必要的,因为执行以下操作:
使用查找您希望文件符合的提交;
git-log--图形--装饰--单行
使用签出提交
git checkout<commit_id><path_to_file>
如果要删除许多文件,可以多次执行此操作。
3.
gitcommit-am“删除不需要的文件”
4.
查找错误添加文件的提交的commit_id,让我们在这里说“35c23c2”
git rebase 35c23c2~1-i//注意:“~1”是必需的
此命令根据您的设置打开编辑器。默认值为vim。如果要更改全局git编辑器,请使用;
git-config--全局core.editor<editor_name>
5.
将最后一次提交(应该是“删除不需要的文件”)移动到错误提交的下一行(在我们的例子中是“35c23c2”),并将命令设置为fixup:
pick 35c23c2 the first commit
fixup 0d78b28 remove unwanted files
保存文件后你应该很好。
6.
要完成:
git push-f
如果不幸发生冲突,则必须手动解决。
如果您正在使用GitHub,但尚未提交,GitHub Desktop可以轻松解决此问题:
选择存储库->撤消最近提交取消选择错误添加的文件。您的上一条提交消息将已经出现在对话框中。按下提交按钮!
现在,苹果已经将所有MacOS用户更新为zsh,正确的答案不再有效。
git reset --soft HEAD^
zsh: no matches found: HEAD^
您可以通过单引号防止shell将^视为特殊字符。
git reset --soft 'HEAD^'
或者,您可以在shell中禁用此行为。通过更新~/.zshrc
unsetopt nomatch
从git 2.23开始,您可以简单地使用以下命令:
git restore --staged <file>
git checkout HEAD~ path/to/file
git commit --amend
推荐文章
- 为什么我需要显式地推一个新分支?
- 如何撤消最后的git添加?
- Rubymine:如何让Git忽略Rubymine创建的.idea文件
- Gitignore二进制文件,没有扩展名
- Git隐藏错误:Git隐藏弹出并最终与合并冲突
- 了解Git和GitHub的基础知识
- 没有。Git目录的Git克隆
- Git与Mercurial仓库的互操作性
- 忽略git中修改(但未提交)的文件?
- “git restore”命令是什么?“git restore”和“git reset”之间有什么区别?
- Git合并与强制覆盖
- Git拉另一个分支
- 在Bash命令提示符上添加git分支
- 如何更改Git日志日期格式
- git pull -rebase和git pull -ff-only之间的区别