Git Проблема с PathSpec на Git Stash

Когда я запускаю новую версию 2.13.0.windows.1 своей новой команды stash -p -- {pathspec} как

git stash -p -- AB.Dir1/Dir2/DestinationHierarchyCreator.cs

он сообщает об ошибке

error: pathspec 'AB.Dir1/Dir2/DestinationHierarchyCreator.cs' не соответствует ни одному файлу, известному git.

Но когда я делаю a git status, где я фактически копировал файл, он сообщает

Your branch is up-to-date with 'origin/project/develop'.
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

modified:  AB.Dir1/Dir2/DestinationHierarchyCreator.cs

Если я перейду в каталог, в котором находятся файлы, и выполните git stash -p -- DestinationHierarchyCreator.cs Сбой с той же ошибкой.

Если я запустил команду git stash -p -- *.cs, то я могу сохранить фрагменты в stash.


Точно ли мое представление о параметре git stash -p, или моя обработка указателя path некорректна для отдельных файлов или чего-то еще?

Ответы

Ответ 1

Просто столкнулся с той же проблемой. Похоже, что git stash pathspecs должен относиться к корню репозитория (сверху) - не к текущему рабочему директорию.

Так как git status ( "в отличие от многих других Git команд" ) показывает пути " относительно текущего каталога, если вы работаете в подкаталоге", это кажется склонным к путанице.

Итак, если ваш текущий рабочий каталог, скажем, ~/dev/git_project_root/subdir, вам нужно будет использовать:

git stash -p -- subdir/AB.Dir1/Dir2/DestinationHierarchyCreator.cs

(Подстановочный знак git stash -p -- *.cs работал, потому что он соответствовал всем модифицированным файлам *.cs ниже вашего корня - и, вероятно, у вас был только этот.)

Ответ 2

Я просто попробовал это в Windows: он работает в обычной папке без .

C:\Users\vonc\data\git\git>git st
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   Documentation/blame-options.txt

C:\Users\vonc\data\git\git>git stash -- Documentation\blame-options.txt
Saved working directory and index state WIP on master: b14f27f91 Tenth batch for 2.13

Даже в сеансе bash и с -p он все еще работает

[email protected] MINGW64 ~/data/git/git (master)
$ git stash -p -- Documentation/blame-options.txt
diff --git a/Documentation/blame-options.txt b/Documentation/blame-options.txt
index dc41957af..96a5b1b4a 100644
--- a/Documentation/blame-options.txt
+++ b/Documentation/blame-options.txt
@@ -1,7 +1,7 @@
 -b::
        Show blank SHA-1 for boundary commits.  This can also
        be controlled via the `blame.blankboundary` config option.
-
+sss
 --root::
        Do not treat root commits as boundaries.  This can also be
        controlled via the `blame.showRoot` config option.
Stash this hunk [y,n,q,a,d,/,e,?]? y

Saved working directory and index state WIP on master: b14f27f91 Tenth batch for 2.13

В папке с '.':

[email protected] MINGW64 ~/data/git/git (master)
$ git stash -p -- a.b/c
error: pathspec 'a.b/c' did not match any file(s) known to git.
Did you forget to 'git add'?

Таким образом, это может быть возможной проблемой.