Git丢弃对一个文件的改动的方法详解

作者:

文章目录
  • 当我们进行日常开发时,有时候需要丢弃对一个文件的改动。为了便于描述,我们假设这个文件是 f.txttext{f.txt}f.txt。会有两种情况 ⬇️ 仅丢弃 f.txttext{f.txt}f.txt 尚未暂存 的改动 丢弃 f.txttext{f.txt}f.txt 已暂存 的改动 + 尚未暂存 的改动 本文会对这两种情况分别进行介绍
  • 目录
    • 背景
    • 要点
      • 仅丢弃尚未暂存的改动
        • 注意事项
      • 丢弃 已暂存 的改动 + 尚未暂存 的改动
        • 注意事项
    • 正文
      • 示例
        • 准备工作
      • 情形一:仅丢弃尚未暂存的改动
        • 第一种方式:基于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.txt Content committed
          已暂存的 f.txttext{f.txt}f.txt Content committed
          Staged content in f.txt
          当前的 f.txttext{f.txt}f.txt Content 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 命令来丢弃 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 命令来丢弃 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 命令来丢弃 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 命令来丢弃 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丢弃对一个文件的改动的方法详解的详细内容,更多关于Git丢弃文件改动的资料请关注风君子博客其它相关文章!

          您可能感兴趣的文章:

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

          站内搜索