详情

首页手游攻略 Git丢弃对一个文件的改动的做法完整指南

Git丢弃对一个文件的改动的做法完整指南

佚名 2026-09-01 13:20:02

平时做技术实践时,很多问题不是概念不会,而是细节没串起来。拿“Git丢弃对一个文件的改动的做法”来说,它看着像小点,放到项目里常会牵出环境、配置、兼容性和维护成本。下面按实际采用顺序,把思路、关键写法和容易踩坑的地方讲清楚,便于大家直接对照操作。

目录
  • 背景
  • 要点
    • 仅丢弃尚未暂存的改动
      • 注意事项
    • 丢弃 已暂存 的改动 + 尚未暂存 的改动
      • 注意事项
  • 正文
    • 示例
      • 准备工作
    • 情形一:仅丢弃尚未暂存的改动
      • 第一种方式:基于git restoretext{git restore}git restore命令
      • 第二种方式:基于git checkouttext{git checkout}git checkout命令
    • 情形二:丢弃 已暂存 与 尚未暂存 的改动
      • 第一种方式:基于git restoretext{git restore}git restore命令
      • 第二种方式:基于git checkouttext{git checkout}git checkout命令
  • 参考资料
    • Git Cheat Sheet
      • git restore 命令的文档
        • git checkout 命令的文档

        背景

        结合项目来看,我们进行日常开发时,有时候需丢弃对一个文件的改动。为了便于描述,我们假设这个文件是 f.txttext{f.txt}f.txt。会有两种情况 ⬇

        • 仅丢弃 f.txttext{f.txt}f.txt 尚未暂存 的改动
        • 丢弃 f.txttext{f.txt}f.txt 已暂存 的改动 + 尚未暂存 的改动

        本文会对这两种情况分别进行介绍

        要点

        仅丢弃尚未暂存的改动

        执行以下两个命令中的 任何一个 都能够丢弃 尚未暂存 的改动

        git restore <file>
        ## 或者
        git checkout <file>

        注意事项

        • 执行命令时,需将 <file> 替换为您想指定的文件(比如 f.txttext{f.txt}f.txt
        • 若您是第一次采用它们,请不要用重要的项目来进行试验,以防误操作(尚未暂存 的改动被丢弃之后就找不回来了)

        丢弃 已暂存 的改动 + 尚未暂存 的改动

        执行以下两个命令中的 任何一个 都能够丢弃 已暂存 的改动 + 尚未暂存 的改动

        git restore --staged --worktree <file>
        ## 或者
        git checkout HEAD <file>

        注意事项

        • 执行命令时,需将 <file> 替换为您想指定的文件(比如 f.txttext{f.txt}f.txt
        • 若您是第一次采用它们,请不要用重要的项目来进行试验,以防误操作(已暂存/尚未暂存 的改动被丢弃之后就找不回来了)

        正文

        示例

        准备工作

        请将以下代码保存为 main.sh (具体的名称同时不重要)

        ## Prepare a temp dir for our test
        mkdir temp
        cd temp

        ## Prepare for the initial commit
        git init
        echo "Content committed" >> f.txt
        git add f.txt
        git commit -m "initial commit"

        ## Stage some content in f.txt
        echo "Staged content in f.txt" >> f.txt
        git add f.txt

        ## Add some content to be staged in f.txt
        echo "Content to be staged ..." >> f.txt

        借助执行下方的命令就能够运行 main.sh

        bash main.sh

        运行完 main.sh 之后,当前目录中会多出一个 temp 目录。在当前目录执行 tree temp 命令后,应该能够看到如下所示的内容

        temp
        └── f.txt

        1 directory, 1 file

        落到代码里,借助执行如下所示命令,能够切换到 temp 目录中 ⬇

        cd temp

        temp 目录中,我们执行如下所示命令就能够看到 f.txttext{f.txt}f.txt 的状态

        git status

        执行该命令后,能够看到 f.txttext{f.txt}f.txt 中既有 已暂存 的改动(如下所示图绿色框所示),也有 尚未暂存 的改动(如下所示图红色框所示)

        各个状态的 f.txttext{f.txt}f.txt 的内容列举如下所示

        内容
        committext{commit}commitf.txttext{f.txt}f.txtContent committed
        已暂存的 f.txttext{f.txt}f.txtContent committed
        Staged content in f.txt
        当前的 f.txttext{f.txt}f.txtContent committed
        Staged content in f.txt
        Content to be staged ...

        如果我们想让 f.txttext{f.txt}f.txt 变回下图红框里的这个样子,那么只需丢弃 尚未暂存 的改动

        如果我们想让 f.txttext{f.txt}f.txt 变回下图绿框里的这个样子,那么需丢弃 已暂存 的改动 + 尚未暂存 的改动

        我们分别来看

        情形一:仅丢弃尚未暂存的改动

        请注意:尚未暂存 的改动被丢弃之后就找不回来了

        第一种方式:基于git restoretext{git restore}git restore命令

        我们能够用 git restoretext{git restore}git restore 命令来丢弃 f.txttext{f.txt}f.txt 中尚未暂存的改动

        git restore f.txt

        执行该命令后,我们再用 git statustext{git status}git status 命令和 cat f.txttext{cat f.txt}cat f.txt 命令验证一下

        从红色框的内容能够看出,f.txttext{f.txt}f.txt 的变化符合预期。

        第二种方式:基于git checkouttext{git checkout}git checkout命令

        我们也能够用 git checkouttext{git checkout}git checkout 命令来丢弃 f.txttext{f.txt}f.txt 中尚未暂存的改动

        git checkout f.txt

        执行该命令后,能够再用 git statustext{git status}git status 命令和 cat f.txttext{cat f.txt}cat f.txt 命令验证一下

        从红色框的内容能够看出,f.txttext{f.txt}f.txt 的变化符合预期。

        情形二:丢弃 已暂存 与 尚未暂存 的改动

        请注意:已暂存/尚未暂存 的改动被丢弃之后就找不回来了

        第一种方式:基于git restoretext{git restore}git restore命令

        我们能够用 git restoretext{git restore}git restore 命令来丢弃 f.txttext{f.txt}f.txt已暂存 的改动 + 尚未暂存 的改动

        git restore --staged --worktree f.txt

        执行该命令后,我们再用 git statustext{git status}git status 命令和 cat f.txttext{cat f.txt}cat f.txt 命令验证一下 ⬇

        从红色框的内容能够看出,f.txttext{f.txt}f.txt 的变化符合预期。

        第二种方式:基于git checkouttext{git checkout}git checkout命令

        我们也能够用 git checkouttext{git checkout}git checkout 命令来丢弃 f.txttext{f.txt}f.txt已暂存 的改动 + 尚未暂存 的改动

        git checkout HEAD f.txt

        执行该命令后,我们再用 git statustext{git status}git status 命令和 cat f.txttext{cat f.txt}cat f.txt 命令验证一下 ⬇

        从红色框的内容能够看出,f.txttext{f.txt}f.txt 的变化符合预期。

        参考资料

        Git Cheat Sheet

        下图中的内容与本文有关

        git restore 命令的文档

        下图红色框中的内容和本文有关

        git checkout 命令的文档

        下图红色框中的内容和本文有关

        落到代码里,以上就是Git丢弃对一个文件的改动的方法详解的详细内容,更多关于Git丢弃文件改动的资料请关注脚本之家其它相关文章!

        您可能感兴趣的文章:

        • Git查看已删除文件历史记录的方法
        • IDEA中git采用实现文件修改后有颜色提示的设置
        • idea git设置Local Changes窗口过程(代码/文件变更显示)
        • idea提交git版本由于中文文件名卡死不动
        • 强制git pull覆盖本地文件的方法

        相关资讯
        点击查看更多
        游戏推荐
        推荐专题
        热门阅读
        推荐下载