git 如何彻底删除已经提交到远程仓库的文件?而不是覆盖删除?git 如何删除已经提交到本地的文件?
覆盖删除:
提交了某个不需要的文件,并push到了远程分支,此时在本地删除该文件,然后再提交一次。
这样的会导致远程仓库的体积不会变小,文件在某一次commit中还可以回溯到。
1、查看文件日志记录:
git log -- <file>
2、如果只是提交到本地,还没有push到远程仓库:
git checkout -- <file>
3、 删除本地文件及Git记录
git rm <file>
4、从历史记录中彻底清除,例如前两次提交到远程分支了:
git reset HEAD^^^ data/mission.db
git commit --amend
git pull
git push
Git 在项目开发中常用的 50 种高频操作场景,覆盖日常开发、协作和高级用法的核心需求:
一、基础操作
初始化仓库
git init
克隆远程仓库
git clone https://github.com/user/repo.git
查看当前状态
git status
添加文件到暂存区
git add file.txt # 添加单个文件 git add . # 添加所有修改 git add *.js # 通配符添加
提交修改
git commit -m "提交说明"
修改最后一次提交
git commit --amend # 修改提交信息或追加文件
二、分支管理
查看所有分支
git branch -a
创建新分支
git branch feature-login
切换分支
git checkout main git checkout -b feature-payment # 创建并切换
合并分支
git checkout main git merge feature-login # 普通合并 git merge --no-ff feature-login # 保留分支历史
删除分支
git branch -d feature-old # 安全删除 git branch -D feature-broken # 强制删除未合并分支
解决合并冲突
手动编辑冲突文件后:git add resolved-file.txt git commit -m "解决冲突"
变基(Rebase)
git checkout feature git rebase main # 将 feature 分支变基到 main
交互式变基
git rebase -i HEAD~3 # 修改最近 3 次提交
三、远程协作
关联远程仓库
git remote add origin https://github.com/user/repo.git
查看远程仓库
git remote -v
拉取远程更新
git pull origin main # 拉取并合并 git fetch origin # 仅获取不合并
推送本地提交
git push origin main
删除远程分支
git push origin --delete feature-old
强制推送(慎用)
git push origin main --force
跟踪远程分支
git checkout --track origin/dev
四、撤销与回退
撤销工作区修改
git checkout -- file.txt
撤销暂存区文件
git reset HEAD file.txt
回退到某次提交
git reset --hard a1b2c3d # 丢弃后续所有修改 git reset --soft a1b2c3d # 保留修改到暂存区
回退单个文件到某版本
git checkout a1b2c3d -- file.txt
撤销某次提交
git revert a1b2c3d # 生成反向提交
五、日志与对比
查看提交历史
git log git log --oneline # 简洁模式 git log -p # 显示差异 git log --graph # 图形化分支
查看文件修改历史
git blame file.txt # 逐行查看修改者 git log -p file.txt # 文件修改记录
对比工作区与暂存区
git diff
对比暂存区与最新提交
git diff --cached
对比两次提交
git diff commit1 commit2
六、标签管理
创建标签
git tag v1.0.0 # 轻量标签 git tag -a v1.0.0 -m "Release" # 附注标签
推送标签到远程
git push origin --tags
删除标签
git tag -d v1.0.0 git push origin :refs/tags/v1.0.0 # 删除远程标签
七、忽略文件
配置
.gitignore
# 忽略日志文件 *.log # 忽略目录 /node_modules/
强制添加被忽略的文件
git add -f secret.txt
八、储藏与清理
临时储藏修改
git stash git stash save "暂存说明"
恢复储藏的修改
git stash pop # 恢复并删除储藏 git stash apply # 恢复但不删除
清理未跟踪文件
git clean -fd # 强制删除未跟踪文件和目录
九、高级操作
子模块管理
git submodule add https://github.com/user/lib.git git submodule update --init --recursive
二分法调试
git bisect start git bisect bad # 标记当前为错误版本 git bisect good a1b2c3d # 标记已知正常版本
重写提交信息
git rebase -i HEAD~3 # 修改最近 3 次提交信息
拆分提交
在交互式变基中使用edit
标记提交,然后:git reset HEAD^ # 拆分提交内容 git add file1.txt git commit -m "提交部分修改" git add file2.txt git commit -m "剩余修改" git rebase --continue
生成补丁文件
git format-patch HEAD~2 # 生成最近 2 次提交的补丁
应用补丁
git apply patch-file.patch
十、协作与工作流
Fork 仓库协作
# 添加上游仓库 git remote add upstream https://github.com/original/repo.git # 同步上游更新 git fetch upstream git merge upstream/main
Pull Request 流程
git checkout -b feature # 开发后推送到自己的远程分支 git push origin feature # 在 GitHub/GitLab 创建 PR
同步他人分支
git fetch origin git checkout -b colleague-feature origin/colleague-feature
十一、优化与调试
减少仓库体积
git gc --auto # 清理无用对象 git repack -ad # 重新打包对象
查看文件权限变化
git config core.fileMode false # 忽略文件权限变化