2012-06-21 32 views
83

Một thời gian trước, tôi đã làm điều này để bỏ qua những thay đổi vào một tập tin theo dõi bởi git:Undo git update-index --skip-worktree

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

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

Xin cảm ơn, Kevin

+7

Tôi cũng quan tâm đến cách lấy danh sách các tệp trong trạng thái 'bỏ qua công việc'? – troex

+0

@troex https://stackoverflow.com/q/42363881/1615903 – 1615903

Trả lời

107

Aha! Tôi chỉ đơn giản muốn:

git update-index --no-skip-worktree <file> 
+0

Tôi yêu Aha! –

+0

lol nên được biết đến –

29

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

git ls-files -v

để xem "giả định không thay đổi" và "skip-worktree" file được đánh dấu bằng một lá thư đặc biệt. Các tệp "skip-worktree" được đánh dấu bằng S.

Chỉnh sửa: Vì @amacleod được đề 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 nhớ. Tôi sử dụng alias hidden="git ls-files -v | grep '^S'" trong .bash_profile của tôi. Nó hoạt động tuyệt vời!

+8

Gọn gàng. Tôi có thể sử dụng 'git ls-files -v | grep '^ S'' để liệt kê các tệp mà tôi đã "ẩn" với bỏ qua worktree. Hy vọng sẽ tạo bí danh "ẩn" cho lệnh đó, nhưng việc đặt chuyển hướng ống trong bí danh dường như không hoạt động. – amacleod

+4

@amacleod sử dụng '!'. Như thế này '[alias] ignored =! Git ls-files -v | grep "^ S" 'Đã kiểm tra, hoạt động. –

+0

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

11

Nếu bạn muốn phục hồi lại tất cả các file mà đã được áp dụng 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 file với tình trạng của họ
  2. grep -i ^S sẽ lọc tập tin và chọn chỉ bỏ qua worktree (S) hoặc bỏ qua worktree và giả định không thay đổi, có nghĩa là bỏ qua trường hợp nhạy cảm
  3. cut -c 3- sẽ loại bỏ trạng thái và chỉ để lại đường dẫn, cắt từ ký tự 3 đến cuối
  4. tr '\012' '\000' sẽ thay thế cuối của nhân vật dòng (\ 012) để zero ký tự (\ 000)
  5. xargs -0 git update-index --no-skip-worktree sẽ vượt qua tất cả các con đường phân cách bằng zero nhân vật để git update-index --no-skip-worktree để hoàn tác
+0

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

0

Dựa trên @ GuidC0DE câu trả lời, đây là một 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:

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