git checkout HEAD - filename和git checkout - filename之间的区别

时间:2014-03-25 16:50:35

标签: git git-checkout git-stash merge-conflict-resolution

让我们从一个情况开始。

  1. 我存储了一些更改(5个文件)git stash
  2. 更改一些文件
  3. 提交更改git commit -m "Commit message"
  4. 从藏匿git stash apply
  5. 获取更改

    由于提交,我在2个文件中收到合并冲突。我不再希望这两个文件发生变化所以我试图恢复这些变化。

    我做了git checkout -- background.js

    失败并出现错误

      

    错误:路径' src / background / background.js'是未合并的

    但后来我读了this SO post并尝试了

    git checkout HEAD -- background.js
    

    它成功运作。它发生在我身上的两个文件。我想了解不同之处

    git checkout -- filegit checkout HEAD -- file

1 个答案:

答案 0 :(得分:4)

通常情况并无太大差异。关键是你要解决冲突。从手册页http://csurs.csr.uky.edu/cgi-bin/man/man2html?1+git-checkout

  

git checkout [--patch] [] [ - ] ...

     

...

     

由于之前的合并失败,索引可能包含未合并的条目。   默认情况下,如果您尝试从中查看此类条目   索引,结账操作将失败,什么都不会   检查过了。使用-f将忽略这些未合并的条目。内容   从合并的特定方面可以检出索引   使用--ours或 - 他们的。使用-m,对工作树进行了更改   可以丢弃文件以重新创建原始冲突合并   结果

当它失败时,你以这种方式使用checkout。因此,通过设计,由于未合并的更改(不解决冲突),结帐将失败。添加HEAD告诉git使用哪个“分支”,实际上会检出文件。

HEAD指的是您在repo中的特定SHA。所以你告诉git从哪里拉取文件的方式与你对不同分支的方式相同。