ไม่นานมานี้ฉันทำสิ่งนี้เพื่อข้ามการเปลี่ยนแปลงของไฟล์ที่ติดตามโดย git:
git update-index --skip-worktree <file>
ตอนนี้ฉันต้องการยอมรับการเปลี่ยนแปลงในไฟล์นั้นกับซอร์ส ฉันจะยกเลิกผลกระทบของได้skip-worktree
อย่างไร
ไม่นานมานี้ฉันทำสิ่งนี้เพื่อข้ามการเปลี่ยนแปลงของไฟล์ที่ติดตามโดย git:
git update-index --skip-worktree <file>
ตอนนี้ฉันต้องการยอมรับการเปลี่ยนแปลงในไฟล์นั้นกับซอร์ส ฉันจะยกเลิกผลกระทบของได้skip-worktree
อย่างไร
คำตอบ:
Aha! ฉันแค่ต้องการ:
git update-index --no-skip-worktree <file>
ตามที่http://www.kernel.org/pub/software/scm/git/docs/git-update-index.htmlให้ใช้
git ls-files -v
เพื่อดูไฟล์ "ถือว่าไม่เปลี่ยนแปลง" และ "skip-worktree" ที่ทำเครื่องหมายด้วยตัวอักษรพิเศษ ไฟล์ "ข้าม-worktree" S
ถูกทำเครื่องหมายด้วย
แก้ไข : ดังที่@amacleodกล่าวไว้การสร้างนามแฝงเพื่อแสดงรายการไฟล์ที่ซ่อนอยู่ทั้งหมดเป็นเคล็ดลับที่ดีที่จะทำให้คุณไม่จำเป็นต้องจำมัน ฉันใช้alias hidden="git ls-files -v | grep '^S'"
ใน. bash_profile ของฉัน มันใช้งานได้ดี!
git ls-files -v | grep '^S'
เพื่อแสดงรายการเฉพาะไฟล์ที่ฉัน "ซ่อน" ด้วย skip-worktree หวังว่าจะทำให้นามแฝง "ซ่อน" สำหรับคำสั่งนั้น แต่การเปลี่ยนเส้นทางไปป์ในนามแฝงดูเหมือนจะไม่ทำงาน
!
การใช้งาน เช่นเดียวกับการ[alias] ignored = !git ls-files -v | grep "^S"
ทดสอบนี้ทำงาน
grep
ไม่ทราบว่าติดตั้งแล้ว ฉันเดาว่าขึ้นอยู่กับเปลือกของคุณ grep
ฉันคิดว่าGit Bash มาพร้อมกับ
'
ไม่ทำงาน แต่"
ทำเช่นนั้นgit ls-files -v | grep "^S"
หากคุณต้องการยกเลิกไฟล์ทั้งหมดที่ใช้ข้าม worktree คุณสามารถใช้คำสั่งต่อไปนี้:
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
จะกรองไฟล์และเลือกข้ามเฉพาะ worktree (S) หรือข้าม worktree และถือว่าไม่เปลี่ยนแปลง (s), -i หมายถึงไม่สนใจขนาดตัวพิมพ์cut -c 3-
จะลบสถานะและออกจากเส้นทางเท่านั้นโดยตัดจากอักขระ 3-rd ไปยังจุดสิ้นสุด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)
สำหรับผู้ใช้ Tortoise Git:
TortoiseGit > Check for modifications
Show ignore local changes flagged files
การตรวจสอบเท่านั้น คุณควรเห็นไฟล์ที่คุณเพิกเฉย (หรือไฟล์ทั้งหมดที่คุณเพิกเฉยหากคุณคลิกขวาที่โฟลเดอร์)Unflag as skip-worktree and assume-unchanged
สำหรับคุณทุกคนที่รักนามแฝง Bash นี่คือชุดของฉันที่จะปกครองพวกเขาทั้งหมด (ตาม 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
หากคุณจำไม่ได้ / รู้ว่าไฟล์ใดที่คุณคลิก "skip-worktree" ให้ใช้:
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" ที่ด้านบน -> ยกเลิกการเลือกช่องทำเครื่องหมาย "skip-worktree" -> คลิก "สมัคร" ที่ด้านล่าง
หากไฟล์มีจำนวนมากเกินกว่าจะแก้ไขด้วยมือคุณจะต้องอ้างอิงคำตอบอื่น ๆ