Hoàn tác chỉ mục cập nhật git --skip-worktree


148

Trước đây tôi đã làm điều này để bỏ qua các thay đổi đối với tệp được theo dõi bởi git:

git update-index --skip-worktree <file>

Bây giờ tôi thực sự muốn cam kết thay đổi tập tin đó thành nguồn. Làm thế nào để tôi hoàn tác các tác động của skip-worktree?


11
Tôi cũng quan tâm làm thế nào để có được danh sách các tệp ở trạng thái 'Skip-worktree'?
troex

Câu trả lời:



35

Theo http://www.kernel.org/pub/software/scm/git/docs/git-update-index.html , sử dụng

git ls-files -v

để xem các tệp "giả sử không thay đổi" và "bỏ qua worktree" được đánh dấu bằng một chữ cái đặc biệt. Các tập tin "Skip-worktree" được đánh dấu bằng S.

Chỉnh sửa : Như @amacleod đã đề cập, tạo bí danh để liệt kê tất cả các tệp ẩn là một mẹo hay để bạn không cần phải nhớ nó. Tôi sử dụng alias hidden="git ls-files -v | grep '^S'"trong .bash_profile của tôi. Nó hoạt động rất tốt!


9
Khéo léo. Tôi có thể sử dụng git ls-files -v | grep '^S'để liệt kê chỉ các tệp mà tôi đã "ẩn" bằng Skip-worktree. Hy vọng làm cho một bí danh "ẩn" cho lệnh đó, nhưng đặt một chuyển hướng đường ống trong bí danh dường như không hoạt động.
amoryod

5
@amacleod dùng a !. Giống như [alias] ignored = !git ls-files -v | grep "^S"thử nghiệm này , hoạt động.
Steven Lu

@amacleod Đừng cho rằng bạn có thể đề xuất một lệnh thay thế cho Windows?
Steve Chambers

1
@SteveChambers, Cài đặt ngắn grep, tôi không biết. Phụ thuộc vào vỏ của bạn, tôi đoán. Git Bash không đi cùng grep, tôi nghĩ vậy.
amoryod

1
Rực rỡ, cảm ơn @amacleod - không phải là con đường của tôi. Điều duy nhất tôi cần thay đổi để điều này hoạt động trên Windows là kiểu trích dẫn - 'không hoạt động nhưng "đã làm, tức làgit ls-files -v | grep "^S"
Steve Chambers

17

Nếu bạn muốn hoàn tác tất cả các tệp đã được áp dụng, hãy bỏ qua worktree, bạn có thể sử dụng lệnh sau:

git ls-files -v | grep -i ^S | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-skip-worktree
  1. git ls-files -v sẽ in tất cả các tệp với trạng thái của chúng
  2. grep -i ^S sẽ lọc các tệp và chỉ chọn bỏ qua worktree (S) hoặc bỏ qua worktree và giả sử (các) không thay đổi, -i có nghĩa là bỏ qua phân biệt chữ hoa chữ thường
  3. cut -c 3- sẽ xóa trạng thái và chỉ để lại các đường dẫn, cắt từ ký tự 3 đến cuối
  4. tr '\012' '\000' sẽ thay thế ký tự cuối dòng (\ 012) thành ký tự 0 (\ 000)
  5. xargs -0 git update-index --no-skip-worktreesẽ vượt qua tất cả các đường dẫn được phân tách bằng ký tự 0 git update-index --no-skip-worktreeđể hoàn tác

1
Đây là câu trả lời hay nhất
Dev

Câu trả lời này là vàng nguyên chất!
yossico

7

Dựa trên câu trả lời @ GuidC0DE, đây là phiên bản dành cho Powershell (Tôi sử dụng posh-git )

git update-index --no-skip-worktree $(git ls-files -v | sls -pattern "^S"| %{$_.Line.Substring(2)})

Và để tham khảo cũng là lệnh ngược lại để ẩn các tập tin:

git update-index --skip-worktree $(git ls-files --modified)

3

Đối với những người sử dụng Rùa Git:

  1. Nhấp chuột phải vào thư mục hoặc vào tập tin cụ thể, sau đó chọn TortoiseGit > Check for modifications
  2. Chỉ kiểm tra Show ignore local changes flagged files. Bạn sẽ thấy tệp mà bạn bỏ qua (hoặc tất cả các tệp bạn đã bỏ qua, nếu bạn nhấp chuột phải vào thư mục)
  3. Nhấp chuột phải vào tập tin và chọn Unflag as skip-worktree and assume-unchanged

3

Đối với tất cả các bạn yêu thích bí danh Bash, đây là tập hợp của tôi để cai trị tất cả (dựa trên 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'

0

Câu trả lời này nhằm vào những người ít kỹ thuật sử dụng Windows.

Nếu bạn không nhớ / biết tập tin nào bạn đã nhấp vào "Skip-worktree" thì hãy sử dụng:

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".

Để khắc phục sự cố của bạn:

Bạn có thể truy cập các tệp -> nhấp chuột phải -> khôi phục lại phiên bản trước -> nhấp vào tab "git" ở trên cùng -> bỏ chọn hộp kiểm "Skip-worktree" -> nhấp vào "Áp dụng" ở dưới cùng.

Nếu các tệp quá nhiều để sửa bằng tay thì bạn sẽ cần tham khảo các câu trả lời khác.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.