我最近遇到过几次提交时开始发生的失败的测试用例,所以为了调查我在他们第一次开始失败时检查了提交。这是下面显示的'master of master'提交(gitg
;分支称为editable_phone_type
):
所以现在我的HEAD
处于该提交状态:
不同的文件中有一个我想查看的迁移:
(venv) Kurts-MacBook-Pro:lucy-web kurtpeek$ git diff --name-only HEAD editable_phone_type
lucy-web/dashboard/templates/families/index.html
lucy-web/dashboard/tests/test_families.py
lucy-web/lucy_web/migrations/0103_merge_20180216_1050.py
lucy-web/lucy_web/test_factories/family_factory.py
但是,如果我尝试git checkout editable_phone_type -- <the migration file>
,我会收到pathspec
错误:
(venv) Kurts-MacBook-Pro:lucy-web kurtpeek$ git checkout editable_phone_type -- lucy-web/lucy_web/migrations/0103_merge_20180216_1050.py
error: pathspec 'lucy-web/lucy_web/migrations/0103_merge_20180216_1050.py' did not match any file(s) known to git.
从同一分支上的未来提交中检出文件的正确方法是什么?
更新
使用git diff --name-status
代替--name-only
表示迁移文件的状态为A
(已添加):
(venv) Kurts-MacBook-Pro:lucy-web kurtpeek$ git diff --name-status HEAD editable_phone_type
M lucy-web/dashboard/templates/families/index.html
M lucy-web/dashboard/tests/test_families.py
A lucy-web/lucy_web/migrations/0103_merge_20180216_1050.py
M lucy-web/lucy_web/test_factories/family_factory.py
这是否意味着无法检查出来?
更新2
我刚注意到git diff --name-status
(或--name-only
)提供的路径包含我所在的目录lucy-web
。我无意中复制了粘贴整个路径。如果我改为从子目录lucy_web
开始复制粘贴它可以工作:
(venv) Kurts-MacBook-Pro:lucy-web kurtpeek$ git checkout editable_phone_type -- lucy_web/migrations/0103_merge_20180216_1050.py
(venv) Kurts-MacBook-Pro:lucy-web kurtpeek$
答案 0 :(得分:2)
content/
这是检查提交内容,提交提交和路径的正确方法。我很确定你的路径名中有一个拼写错误,案例差异或连字符混合或其他东西。该路径确实不存在。
尝试使用content/
或其他内容来查看内容。
......啊。给git checkout editable_phone_type -- \
lucy-web/lucy_web/migrations/0103_merge_20180216_1050.py
而不是git ls-tree -r editable_phone_type | grep -i merge.2018
,我认为它不是一个类型,因为文件只是简单删除。
答案 1 :(得分:2)
您指定的结帐语法是正确的,无论是将来的提交,过去的提交还是来自完全独立的分支的提交都无关紧要。只要你提供“&lt; tree-ish&gt;” (一个告诉git要查看哪个内容树的标识符)和一个标识“&lt; tree-ish&gt;”中文件的路径,它应该没问题。
所以最可能的事情是,{{1>}分支顶端的提交树中存在 dosen't 的路径。虽然在这种情况下错误消息可能会产生误导(因为很难看出当前提交中的文件如何“git”不知道“),但是在这种情况下你会得到错误
您的diff输出似乎表明这是一个存在于HEAD提交或分支提交中的文件,或两者都存在(但具有不同的内容)。所以最可能的情况是它出现在editable_phone_type
但不出现在分支上。您可以通过更改diff命令来确认,如
HEAD
如果git在命名文件的行的开头打印git diff --name-status HEAD editable_phone_type
,则确认它在D
提交中不存在。
在这种情况下,当然,您只需从工作树中删除该文件即可“查看editable_phone_type
版本”。