【问题标题】:What happens to a modified file when using "git checkout"?使用“git checkout”时修改后的文件会发生什么?
【发布时间】:2019-12-21 07:23:41
【问题描述】:

我只是在一个项目中尝试了一些东西,并想删除一些我正在使用但不再需要的修改过的文件。

我不小心输入了git checkout file 而不是git checkout -- file。所以基本上我只是检查了这个修改过的文件,我不知道修改过的文件去了哪里。

我尝试使用git update-index --fresh 只是想看看这个修改后的文件可能去了哪里,但它似乎最终被删除了?

    modified:   test/ssc_test/cmod_tcsdirect_steam_test.cpp
    modified:   test/ssc_test/cmod_tcsfresnel_molten_salt_test.cpp
    modified:   test/ssc_test/cmod_tcsmolten_salt_test.cpp

这些是我试图删除但忘记添加 -- 以删除其中一个已编辑文件的文件。

签出此文件后,它没有删除它,而是给了我一条消息,Updated 1 path from the index,并且在使用 git status 时,它不再与其他修改的文件一起显示。

我对到底发生了什么一无所知。它是被删除或隐藏在索引中的某个地方,还是其他什么地方?

【问题讨论】:

  • 你克隆了其他分支吗?
  • git checkout X,对于前面没有-- 的任何X,首先尝试将X 视为分支名称。如果可行,您只需签出该分支(git status 会告诉您您现在是on branch X)。如果这不起作用,Git 会尝试将X 视为提交哈希ID:git rev-parse X^{commit} 是否成功?如果是这样,您检查了该提交,git status 会说“分离的 HEAD”。如果不是,最后的手段是像运行git checkout -- X 一样:尝试将X 作为文件名。所以你可能做了和git checkout -- file一样的事情。
  • 请注意,git status 不会列出文件,如果它现在在索引中并且与@987654340 中的副本相同 @commit 与工作树中的副本相同。这就是git checkout -- X 使文件X 退出git status 列表的时间和原因:Git 将工作树X 替换为X 的索引版本,并且如果X 的索引版本匹配HEAD 版本的X,现在所有三个副本都匹配。
  • 你为什么一直在谈论“删除”?结帐不会删除任何内容。

标签: git git-bash git-checkout


【解决方案1】:

Git 会将文件设置为工作头/index

测试和说明:

mkdir test
cd test
git init
touch testfile
git add --all
git commit -m "Commit"
echo hi > testfile
cat testfile # hi
git checkout testfile
# Testfile is now empty

【讨论】:

    【解决方案2】:

    我不小心输入了“git checkout file”而不是“git checkout --file”

    这些命令做同样的事情,除非出于某种原因file 的实际名称可能与checkout 的非路径参数混淆。

    或者换个说法——-- 唯一要做的就是将路径与其他选项分开,以防不明确

    【讨论】:

    • 我也粗心了:)
    【解决方案3】:

    为了避免分支和文件之间的任何歧义,您可以使用新的git restore command。见git restore
    它在 Git 2.23 中可用,目前仍处于试验阶段。

    git restore -- afile
    

    它将从您想要的任何来源恢复工作树文件
    默认情况下,HEAD,但你可以指定你想要的any treeish

    使用或不使用-- 不会改变任何事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-19
      • 1970-01-01
      • 2019-02-02
      • 2021-10-17
      • 2016-12-17
      • 1970-01-01
      • 2018-07-07
      相关资源
      最近更新 更多