如何从最新提交中删除文件?
当前回答
这是我从比特桶回购中删除文件的工作,我最初将文件推送到分支。
git checkout origin/develop <path-to-file>
git add <path-to-file>
git commit -m "Message"
git push
其他回答
使用gitGUI可以简化从先前提交中删除文件的过程。
假设这不是一个共享分支,并且您不介意重写历史,那么运行:
git gui citool --amend
您可以取消检查错误提交的文件,然后单击“提交”。
该文件将从提交中删除,但将保留在磁盘上。因此,如果在错误添加文件后取消选中该文件,它将显示在未跟踪文件列表中(如果在错误修改文件后取消检查该文件,则会显示在未提交的更改列表中)。
现在,苹果已经将所有MacOS用户更新为zsh,正确的答案不再有效。
git reset --soft HEAD^
zsh: no matches found: HEAD^
您可以通过单引号防止shell将^视为特殊字符。
git reset --soft 'HEAD^'
或者,您可以在shell中禁用此行为。通过更新~/.zshrc
unsetopt nomatch
事实上,我认为一种更快更简单的方法是使用git rebase交互模式。
git rebase -i head~1
(或头~4,你想走多远)
然后,使用“edit”代替“pick”。我没有意识到“编辑”有多强大。
https://www.youtube.com/watch?v=2dQosJaLN18
希望你会发现它有帮助。
正如接受的答案所示,您可以通过重置整个提交来实现这一点。但这是一种相当严厉的做法。要做到这一点,一个更干净的方法是保留提交,只需从中删除更改的文件。
git reset HEAD^ -- path/to/file
git commit --amend --no-edit
git reset会将文件恢复为上次提交时的状态,并将其存储在索引中。工作目录中的文件未被触动。然后,gitcommit将提交并将索引压缩到当前提交中。
这基本上会获取上一次提交中的文件版本,并将其添加到当前提交中。这不会导致任何净更改,因此文件有效地从提交中删除。
Here is the step to remove files from Git Commit.
>git reset --soft HEAD^1(either commitid ) -- now files moved to the staging area.
>git rm --cached filename(it will removed the file from staging area)
>git commit -m 'meaningfull message'(Now commit the required files)
推荐文章
- 为什么我需要显式地推一个新分支?
- 如何撤消最后的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之间的区别