업데이트 : Git 2.23 (2019 년 8 월)
git restore
에는 이것을 수행하는 새로운 명령 이 있습니다. 허용 된 답변을 참조하십시오 .업데이트 : 이것은 Git 1.8.3에서보다 직관적으로 작동 합니다. 내 대답을 참조하십시오 .
다음 유스 케이스를 상상해보십시오 .Git 작업 트리의 특정 하위 디렉토리에서 모든 변경 사항을 제거하고 다른 모든 하위 디렉토리는 그대로 유지하려고합니다.
할 수는
git checkout .
있지만 git checkout입니다. 스파 스 체크 아웃에서 제외 된 디렉토리 추가이
git reset --hard
있지만 하위 디렉토리에 대해서는 그렇게 할 수 없습니다.> git reset --hard . fatal: Cannot do hard reset with paths.
를 사용하여 현재 상태를 역 패치 할 수
git diff subdir | patch -p1 -R
있지만 이것은 이상한 방법입니다.
이 작업에 적합한 Git 명령은 무엇입니까?
아래 스크립트는 문제를 보여줍니다. How to make files
주석 아래에 적절한 명령을 삽입하십시오. 현재 명령은 a/c/ac
스파 스 체크 아웃에서 제외되어야 하는 파일 을 복원합니다 . 내가주의 하지 않는 명시 적으로 복원 할 a/a
하고 a/b
, 난 단지 "알고" a
아래 모든 것을 복원 할. 편집 : 그리고 나는 또한 "알지 못 b
하거나 " 와 같은 레벨에 다른 디렉토리가 있습니다 a
.
#!/bin/sh
rm -rf repo; git init repo; cd repo
for f in a b; do
for g in a b c; do
mkdir -p $f/$g
touch $f/$g/$f$g
git add $f/$g
git commit -m "added $f/$g"
done
done
git config core.sparsecheckout true
echo a/a > .git/info/sparse-checkout
echo a/b >> .git/info/sparse-checkout
echo b/a >> .git/info/sparse-checkout
git read-tree -m -u HEAD
echo "After read-tree:"
find * -type f
rm a/a/aa
rm a/b/ab
echo >> b/a/ba
echo "After modifying:"
find * -type f
git status
# How to make files a/* reappear without changing b and without recreating a/c?
git checkout -- a
echo "After checkout:"
git status
find * -type f
git checkout -- /path/to/subdir/
?
git stash
경로 인수를 받아들이지 않습니다 ...
git stash && git stash drop
?