git签出头--filename和git签出--filename之间的差异

git签出头--filename和git签出--filename之间的差异,git,git-checkout,git-stash,merge-conflict-resolution,Git,Git Checkout,Git Stash,Merge Conflict Resolution,让我们从一个情况开始 我隐藏了一些更改(5个文件)git-stash 更改一些文件 提交更改git Commit-m“提交消息” 从stash获取更改git stash apply 由于提交,我在2个文件中收到合并冲突。我不再需要这两个文件中的更改,所以我尝试还原这些更改 我做了git签出--background.js 它因错误而失败 错误:路径“src/background/background.js”未合并 但后来我阅读并尝试了 git checkout HEAD -- background

让我们从一个情况开始

  • 我隐藏了一些更改(5个文件)
    git-stash
  • 更改一些文件
  • 提交更改
    git Commit-m“提交消息”
  • 从stash获取更改
    git stash apply
  • 由于提交,我在2个文件中收到合并冲突。我不再需要这两个文件中的更改,所以我尝试还原这些更改

    我做了git签出--background.js

    它因错误而失败

    错误:路径“src/background/background.js”未合并

    但后来我阅读并尝试了

    git checkout HEAD -- background.js
    
    它成功地工作了。这两份文件都是我干的。我想了解两者之间的区别


    git checkout--file
    git checkout HEAD--file

    通常没有太大区别。关键是你有冲突要解决。从手册页

    git签出[--patch][[--]

    由于上一次合并失败,索引可能包含未合并的项。 默认情况下,如果您尝试从 索引时,签出操作将失败,并且不会执行任何操作 退房了。使用-f将忽略这些未合并的条目。内容 从合并的特定方面可以通过以下方式从索引中检出 用我们的或者他们的。使用-m,对工作树进行更改 可以丢弃文件以重新创建原始冲突合并 结果

    当它失败时,您正以这种方式使用
    checkout
    。因此,按照设计,签出将由于未合并的更改(而不是解决冲突)而失败。添加
    HEAD
    会告诉git使用哪个“分支”,从而实际签出文件


    HEAD是指您在回购协议中所处的特定SHA。因此,您告诉git从何处提取文件的方式与从其他分支提取文件的方式相同。

    +1非常感谢您的详细解释。我真的很感激。@blunderboy,简而言之:
    git checkout--
    从索引中签出称为
    的内容,而
    git checkout HEAD--
    从ref
    HEAD
    解析的特定提交中签出(在90%的情况下,它是当前签出分支的提示提交)@kostix我想你应该加上它作为答案。简单、直截了当、切中要害。请在你的答案中写1-2行关于git索引的内容,使其更加完整。我喜欢它。@blunderboy,不,我对接受的答案很满意,因为扩展第一个表单为什么不适合你也很重要。因此,我只想添加一个TL;DR样式页脚;-)干得好,Schleis。@kostix我不会改变公认的答案;-)我只是想要TL;DR story将为更广泛的读者(未来的读者)提供更多的可视性…无论如何,它很好:)非常感谢您的有用评论