Деякий час тому я робив це, щоб ігнорувати зміни у файлі, відстежуваному git:
git update-index --skip-worktree <file>
Тепер я фактично хочу внести зміни до цього файлу до джерела. Як скасувати ефекти від skip-worktree
?
Деякий час тому я робив це, щоб ігнорувати зміни у файлі, відстежуваному git:
git update-index --skip-worktree <file>
Тепер я фактично хочу внести зміни до цього файлу до джерела. Як скасувати ефекти від skip-worktree
?
Відповіді:
Ага! Я просто хочу:
git update-index --no-skip-worktree <file>
Відповідно до http://www.kernel.org/pub/software/scm/git/docs/git-update-index.html , використовуйте
git ls-files -v
побачити файли «припустити незмінними» та «пропустити робоче дерево», позначені спеціальною літерою. Файли "пропустити робоче дерево" позначені знаком S
.
Редагувати : Як згадував @amacleod , зробити псевдонім для перегляду всіх прихованих файлів - це приємний трюк, щоб вам не потрібно було його пам’ятати. Я використовую alias hidden="git ls-files -v | grep '^S'"
у своєму .bash_profile. Це чудово працює!
git ls-files -v | grep '^S'
для перерахування лише файлів, які я "приховав" за допомогою пропускного робочого дерева. Сподівався зробити псевдонім "прихованим" для цієї команди, але введення псевдонаправлення в псевдонім, схоже, не спрацювало.
!
. Як цей [alias] ignored = !git ls-files -v | grep "^S"
Тестований, працює.
grep
. Я думаю, це залежить від вашої оболонки. Git Bash все-таки приходить grep
, я думаю.
'
не працював, але "
робив, тобтоgit ls-files -v | grep "^S"
Якщо ви хочете скасувати всі файли, які було застосовано, пропустити робоче дерево, ви можете скористатись такою командою:
git ls-files -v | grep -i ^S | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-skip-worktree
git ls-files -v
буде надрукувати всі файли з їх статусомgrep -i ^S
буде фільтрувати файли та вибирати лише пропустити робоче дерево (S) або пропустити робоче дерево та припустити, що вони не змінюються, -і означає ігнорувати регістрcut -c 3-
видалить статус і залишить лише контури, перерізаючи з третього символу до кінцяtr '\012' '\000'
замінить символ кінця рядка (\ 012) на нульовий символ (\ 000)xargs -0 git update-index --no-skip-worktree
передасть усі шляхи, розділені нульовим символом, git update-index --no-skip-worktree
до скасуванняНа основі @ GuidC0DE відповіді, ось версія для Powershell (я використовую posh-git )
git update-index --no-skip-worktree $(git ls-files -v | sls -pattern "^S"| %{$_.Line.Substring(2)})
Для довідки також протилежна команда приховати файли:
git update-index --skip-worktree $(git ls-files --modified)
Для тих, хто використовує черепаху Git:
TortoiseGit > Check for modifications
Show ignore local changes flagged files
. Ви повинні побачити файл, який ви проігнорували (або всі файли, які ви проігнорували, якщо ви правою кнопкою миші натиснули папку)Unflag as skip-worktree and assume-unchanged
Для всіх вас, хто любить псевдоніми Баша, ось мій набір керувати ними всім (на основі C0DEF52)
alias gitskip='git update-index --skip-worktree ' #path to file(s)
alias gitlistskiped='git ls-files -v | grep ^S'
alias gitunskip='git update-index --no-skip-worktree ' #path to file(s)
alias gitunskipall='git ls-files -v | grep -i ^S | cut -c 3- | tr ''\\012'' ''\\000'' | xargs -0 git update-index --no-skip-worktree'
Ця відповідь спрямована на менш технічних людей, які використовують Windows.
Якщо ви не пам'ятаєте / не знаєте, на які файли ви натиснули "пропустити робоче дерево", тоді використовуйте:
git ls-files -v //This will list all files, you are looking for the ones with an S at the beginning of the line.
git ls-files -v | grep "S " //Use this to show only the lines of interest. Those are the files that have "skip-worktree".
Щоб вирішити свою проблему:
Ви можете перейти до файлів -> клацнути правою кнопкою миші -> відновити до попередньої версії -> натиснути вкладку "git" вгорі -> зніміть прапорець "пропустити робоче дерево" -> натисніть "Застосувати" внизу.
Якщо файлів занадто багато, щоб виправити вручну, тоді вам потрібно буде звернутися до інших відповідей.