ฉันจะบังคับให้คอมไพล์เช็คเอาต์สาขาหลักและลบการส่งคืนการขนส่งหลังจากที่ฉันทำให้ไฟล์ปกติโดยใช้แอตทริบิวต์ "ข้อความ" ได้อย่างไร


115

เอาล่ะฉันเพิ่มไฟล์.gitattributesด้วยเส้นแบบนี้

*.css text
*.js text
etc...

จากนั้นฉันทำตามคำแนะนำที่http://git-scm.com/docs/gitattributes#_checking-out_and_checking-in

$ rm .git/index     # Remove the index to force Git to
$ git reset         # re-scan the working directory
$ git status        # Show files that will be normalized
$ git add -u
$ git add .gitattributes
$ git commit -m "Introduce end-of-line normalization"

แต่ตอนนี้สำเนาการทำงานของฉันยังคงมีการคืนรถ! ฉันมีไฟล์ที่ไม่ได้ติดตามซึ่งฉันต้องการจะเก็บไว้ ฉันจะเช็คเอาต์สาขาหลักอีกครั้งด้วยไฟล์ที่ทำให้เป็นมาตรฐานได้อย่างไร

ฉันรู้ว่าไฟล์ถูกทำให้เป็นมาตรฐานในที่เก็บเพราะเมื่อฉันโคลน repo ฉันมีไฟล์ทั้งหมดที่ไม่มีการคืนค่าขนส่ง

คำตอบ:


283

อะฮะ! ชำระเงินค่าคอมมิตก่อนหน้าจากนั้นชำระเงินหลัก

git checkout HEAD^
git checkout -f master

5
ขอขอบคุณสำหรับวิธีแก้ปัญหานี้ แต่ปัญหาที่เห็นได้ชัดเจนในคอมไพล์ที่ "checkout -f" ไม่ได้บังคับให้ชำระเงินซ้ำ อีก woraround คือการลบไฟล์สำเนาที่ใช้งานได้ทั้งหมดก่อน (เช่นทุกอย่างยกเว้น. git dir)
pfalcon

ใช่ขอบคุณสำหรับสิ่งนั้น! ได้ยินแบบนั้นฉันเดาว่าเราสามารถลบไฟล์ที่น่าสนใจและทำการชำระเงินได้ สำหรับฉันมีเพียงไฟล์เดียวที่ฉันพยายามแก้ไข แต่แน่นอนว่ามันอาจจะเป็นไฟล์ทั้งหมดหลายร้อยหรือหลายพันไฟล์
Jason

สิ่งนี้ล้มเหลวใน git 1.8.3 (mac) ด้วย: error: pathspec 'HEAD ^' ไม่ตรงกับไฟล์ใด ๆ ที่ git รู้จัก
dval

@dval ดูการแก้ไขโพสต์นี้แล้วคุณจะเห็นวิธีอื่นในการทำเช่นนี้ ฉันใช้ Mac ด้วยและสิ่งนี้ก็ใช้ได้ผลสำหรับฉัน ฉันขอแนะนำให้คุณอัปเกรดคอมไพล์ของคุณเป็น 2+ และคุณสามารถใช้ Homebrew เพื่อทำสิ่งนี้ด้วยวิธีที่ปลอดภัยในการบำรุงรักษา
Jason

2
นี่ใช้ไม่ได้จริงๆ GIT จะอัปเดตไฟล์ที่เปลี่ยนแปลงระหว่างคอมมิตทั้งสองเท่านั้น (มีข้อยกเว้นบางประการ) หากที่เก็บเป็นของใหม่เช่น เพียงสองคอมมิตและครั้งแรกว่างเปล่าจากนั้นโซลูชันนี้จะใช้งานได้ มิฉะนั้นคุณจะต้องบังคับลบไฟล์ทั้งหมดตามที่อธิบายไว้ในคำตอบของ mechsin
jstine

17

ในขณะที่คนอื่น ๆ ชี้ให้เห็นว่าเราสามารถลบไฟล์ทั้งหมดใน repo แล้วตรวจสอบได้ ฉันชอบวิธีนี้มากกว่าและสามารถทำได้ด้วยรหัสด้านล่าง

git ls-files -z | xargs -0 rm
git checkout -- .

หรือหนึ่งบรรทัด

git ls-files -z | xargs -0 rm ; git checkout -- .

ฉันใช้มันตลอดเวลาและยังไม่พบข้อเสียเลย!

สำหรับคำอธิบายเพิ่มเติมบางส่วนต่อ-zท้ายอักขระ null ที่ส่วนท้ายของเอาต์พุตแต่ละรายการโดยls-filesและการ-0บอกxargsให้คั่นเอาต์พุตที่ได้รับโดยอักขระ null เหล่านั้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.