.gitignore และ“ ไฟล์แผนผังการทำงานที่ไม่ได้ติดตามจะถูกเขียนทับโดยเช็คเอาต์”


827

ดังนั้นฉันจึงเพิ่มโฟลเดอร์ในไฟล์. gitignore ของฉัน

เมื่อฉันทำgit statusมันก็บอกฉัน

# On branch latest
nothing to commit (working directory clean)

อย่างไรก็ตามเมื่อฉันพยายามเปลี่ยนสาขาฉันได้รับสิ่งต่อไปนี้:

My-MacBook-Pro:webapp marcamillion$ git checkout develop
error: The following untracked working tree files would be overwritten by checkout:
    public/system/images/9/thumb/red-stripe.jpg
    public/system/images/9/original/red-stripe.jpg
    public/system/images/8/thumb/red-stripe-red.jpg
    public/system/images/8/original/red-stripe-red.jpg
    public/system/images/8/original/00-louis_c.k.-chewed_up-cover-2008.jpg
    public/system/images/7/thumb/red-stripe-dark.jpg
    public/system/images/7/original/red-stripe-dark.jpg
    public/system/images/7/original/DSC07833.JPG
    public/system/images/6/thumb/red-stripe-bw.jpg
    public/system/images/6/original/website-logo.png
    public/system/images/6/original/red-stripe-bw.jpg
    public/system/images/5/thumb/Guy_Waving_Jamaican_Flag.jpg
    public/system/images/5/original/logocompv-colored-squares-100px.png
    public/system/images/5/original/Guy_Waving_Jamaican_Flag.jpg
    public/system/images/4/thumb/DSC_0001.JPG
    public/system/images/4/original/logo.png
    public/system/images/4/original/DSC_0001.JPG
    public/system/images/4/original/2-up.jpg
    public/system/images/3/thumb/logo2.gif
    public/system/images/3/original/logo2.gif
    public/system/images/3/original/Guy_Waving_Jamaican_Flag.jpg
    public/system/images/3/original/11002000962.jpg
    public/system/images/2/thumb/Profile Pic.jpg
    public/system/images/2/original/Profile Pic.jpg
    public/system/images/2/original/02 Login Screen.jpg
    public/system/images/1/original/Argentina-2010-World-Cup.jpg
Please move or remove them before you can switch branches.
Aborting

นี่คือลักษณะของไฟล์. gitignore ของฉัน:

.bundle
.DS_Store
db/*.sqlite3
log/*.log
tmp/**/*
public/system/images/*
public/system/avatars/*

ฉันจะทำให้มันทำงานได้อย่างไรเพื่อให้ฉันสามารถสลับสาขาโดยไม่ต้องลบไฟล์เหล่านั้นได้?

หากฉันทำการเปลี่ยนแปลงจะมีผลกับไฟล์เหล่านั้นหรือไม่ กล่าวอีกนัยหนึ่งถ้าฉันกลับมาที่สาขานี้หลังจากนั้นทุกอย่างจะสมบูรณ์แบบตามความมุ่งมั่นล่าสุดของฉันหรือไม่

ฉันไม่ต้องการสูญเสียไฟล์เหล่านั้นฉันไม่ต้องการให้พวกเขาติดตาม


10
ถ้าคุณไม่สนใจเกี่ยวกับไฟล์เหล่านี้: คอมไพล์เช็คเอาท์ -f <สาขา> ในกรณีของฉันไฟล์ที่ถูกสร้างขึ้นในการสร้างกระบวนการดังนั้นฉัน coudln't ดูแลน้อย
Hobbamok

บางครั้งเกิดขึ้นหากคุณ 'ชำระเงินคอมไพล์' (ไม่มีชื่อสาขา) ในการแก้ไขให้ทำ 'git checkout branchname'
crafter

แยกต่างหาก แต่คำถามที่เกี่ยวข้องอย่างยิ่ง: เหตุใดข้อผิดพลาดนี้จึงเกิดขึ้นทั้งหมด ทำไม git จึงไม่สามารถสลับระหว่างกิ่งไม้ได้?
ahnbizcad

@ahnbizcad เพราะถ้าคุณกำลังทำงานกับไฟล์ใหม่และมีคนในสาขาอื่นเกิดขึ้นที่จะส่งไฟล์ที่มีชื่อเดียวกันคุณจะโกรธถ้าคอมไพล์ทิ้งเวอร์ชั่นของคุณเมื่อคุณเปลี่ยนสาขา นั่นเป็นเหตุผลที่แฟล็ก -f อยู่ที่นั่น
Matthew Sharp

คำตอบ:


263

ดูเหมือนว่าคุณต้องการละเว้นไฟล์ แต่พวกเขาได้รับการยอมรับแล้ว .gitignore ไม่มีผลกับไฟล์ที่มีอยู่แล้วใน repo git rm --cachedเพื่อให้พวกเขาต้องถูกลบออกด้วย --cachedจะป้องกันไม่ให้มันจากการมีผลกระทบใด ๆ บนสำเนาการทำงานของคุณและมันก็จะทำเครื่องหมายว่าลบออกในครั้งต่อไปที่จะกระทำ หลังจากไฟล์ถูกลบออกจาก repo แล้ว. gitignore จะป้องกันการเพิ่มอีกครั้ง

แต่คุณมีปัญหาอื่นกับ. gitignore ของคุณคุณใช้งานไวด์การ์ดมากเกินไปและทำให้มันตรงกับมันน้อยกว่าที่คุณคาดหวัง ให้เปลี่ยน. gitignore แทนและลองสิ่งนี้แทน

.bundle
.DS_Store
db/*.sqlite3
log/*.log
tmp/
public/system/images/
public/system/avatars/

2
ขอบคุณ .... ฉันลบไฟล์ทั้งหมดออกจากสาขาปัจจุบันและสำรองข้อมูล จากนั้นสลับสาขาและใส่กลับเข้าไป ที่ได้ผล นอกจากนี้ขอขอบคุณสำหรับเคล็ดลับเกี่ยวกับ.
gignignore

@marcamillion: คุณหมายความว่าอย่างไร "ที่ได้ผล" หากไฟล์ถูกติดตามในสาขาที่คุณเปลี่ยนไปคุณจะเขียนทับไฟล์เหล่านั้นด้วยเวอร์ชันของคุณซึ่งอาจแตกต่างออกไป ...
Cascabel

1
ฉันมีปัญหากับโฟลเดอร์ / build ที่ไม่จำเป็นต้องถูกติดตาม ดังนั้นฉันจึงลบโฟลเดอร์ในเครื่องส่งไฟล์. gitignore ของฉันจากนั้นเช็คเอาท์สาขาอื่น ในที่สุดมันก็ใช้ได้กับฉัน
Mike S.

16
ฉันคิดว่าส่วนแรกสำหรับการย้อนกลับของข้อความผิดพลาดนี้โดยเฉพาะ ข้อผิดพลาดนี้ระบุว่าขณะนี้ผู้ใช้อยู่ในสาขาที่ไม่มีไฟล์ JPG ที่ติดตามและผู้ใช้พยายามย้ายไปยังไฟล์ที่เคยทำ ดังนั้นการทำเช่นgit rm --cachedนี้จะไม่สร้างความแตกต่างไฟล์เหล่านั้นไม่มีอยู่ในสาขาปัจจุบัน สำหรับข้อผิดพลาดนี้ฉันคิดว่าผู้ใช้ต้องปฏิบัติตามคำตอบของ @Greg Hewgill - "ย้ายพวกเขาออกจากสำเนาการทำงานสลับสาขาและย้ายพวกเขากลับมา"
studgeek

4
วิธีการหนึ่งที่จะไปเกี่ยวกับการแก้your files would be overwrittenด้วยfatal: pathspec 'test/node_modules' did not match any filesเมื่อฉันgit rm -r --cache test/node_modules? ฉันดึงไม่ได้เนื่องจากข้อความที่เขียนทับและไม่สามารถลบออกได้เพราะคอมไพล์ไม่พบพวกเขา (มี)
HMR

1047

คำเตือน: มันจะลบไฟล์ที่ไม่ได้ติดตามดังนั้นจึงไม่ใช่คำตอบที่ดีสำหรับคำถามที่ถูกโพสต์

ฉันตีข้อความนี้เช่นกัน ในกรณีของฉันฉันไม่ต้องการเก็บไฟล์ดังนั้นสิ่งนี้จึงใช้ได้สำหรับฉัน:

git 2.11 และใหม่กว่า

git clean  -d  -f .

git ที่เก่ากว่า

git clean  -d  -f ""

หากคุณต้องการลบไฟล์ที่ถูกละเว้นโดย git ให้รันคำสั่งต่อไปนี้

ระวัง !!! น่าจะเป็นสิ่งนี้มากที่สุดที่จะทำลายโครงการของคุณใช้เฉพาะเมื่อคุณรู้ว่า 100% สิ่งที่คุณทำ

git 2.11 และใหม่กว่า

git clean  -d  -fx .

git ที่เก่ากว่า

git clean  -d  -fx ""

http://www.kernel.org/pub/software/scm/git/docs/git-clean.html

  • -x หมายความว่าไฟล์ที่ถูกละเว้นจะถูกลบด้วยเช่นเดียวกับไฟล์ที่ไม่รู้จักกับ git

  • -d หมายถึงลบไดเรกทอรีที่ไม่ได้ติดตามนอกจากไฟล์ที่ไม่ได้ติดตาม

  • -f จำเป็นต้องบังคับให้เรียกใช้


7
ขอบคุณหลังจากทำความสะอาดฉันก็สามารถลด
Alexander Beletsky

139
ระวังเมื่อใช้คอมไพล์ทำความสะอาด!
Noel

249
เพื่อหลีกเลี่ยงหน้าแรกให้เรียกใช้ด้วยตัวเลือกแบบแห้งเพื่อดูว่ามันจะทำอะไร: git clean -dfxnหรือgit clean -dfx --dry-run
เดนนิส

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

25
-xตัวเลือกเจ็บฉัน
Wener

589

คำเตือน: จะลบไฟล์ในเครื่องที่ไม่ได้ทำดัชนี

แค่บังคับมัน: git checkout -f another-branch


78
คำเตือน: จะลบไฟล์ในเครื่องที่ไม่ได้ทำดัชนี
givanse

คอมไพล์สะอาดไม่ทำงานสำหรับฉัน แต่แรงเป็นสิ่งที่ฉันต้องการ มันติดอยู่ที่กิ่งนั้นและฉันต้องการมันเพื่อเปลี่ยนกิ่งไม้
Simon The Cat

7
ฉันไม่ต้องการไฟล์ที่ไม่ได้จัดทำดัชนี! +1 สำหรับคุณ
ryansstack

ฉันได้รับข้อผิดพลาดนี้ ,,, :(error: pathspec 'mybranch' did not match any file(s) known to git.
Budi Mulyo

2
นี่คือคำตอบที่แท้จริง
metamonkey

146

หากคุณใช้งานบน OS X อาจเป็นเพราะชื่อไฟล์มีตัวอักษรบางตัวเปลี่ยนไป ลองตั้งค่าตัวเลือกการกำหนดค่าต่อไปนี้:

git config core.ignorecase true

13
มันทำงานบน Windows ได้เช่นกันดูเหมือนว่าสถานการณ์นี้จะเกิดขึ้นตั้งแต่แรกเนื่องจากการเปลี่ยนแปลงกรณีที่ GIT ไม่สามารถระบุได้
SagiLow

4
นี่เป็นปัญหาที่ฉันมีเส้นทางไฟล์แตกต่างกันไปตามตัวอักษรตัวเล็ก - Windows ใช้วิธีนี้เหมือนกัน แต่ GIT ไม่ได้เป็นตัวปัญหา
Daniel Sokolowski

1
ปัญหาของฉันเกิดขึ้นในการชำระเงินสาขาอื่นใน Windows 10 และใช้ได้เฉพาะฉันนี้ขอบคุณ
Weijie Sun

! น่ากลัว วิธีนี้แก้ไขปัญหาของฉันเมื่อฉันย้ายระหว่างแท็ก
William Añez

1
มันยังทำงานได้ถ้าคุณพยายามgit rebaseเช่นกัน ขอบคุณ
user3890355

42

Git กำลังบอกคุณว่าต้องการสร้างไฟล์ (ชื่อpublic/system/images/9/...ฯลฯ ) แต่คุณมีไฟล์ที่มีอยู่แล้วในไดเรกทอรีนั้นซึ่งไม่ได้ติดตามโดย Git บางทีมีคนอื่นเพิ่มไฟล์เหล่านั้นในที่เก็บ Git และนี่เป็นครั้งแรกที่คุณเปลี่ยนไปที่สาขาหรือไม่

อาจมีเหตุผลว่าทำไมไฟล์เหล่านั้นในdevelopสาขาของคุณแต่ไม่ใช่ในสาขาปัจจุบันของคุณ คุณอาจต้องถามผู้ร่วมงานของคุณว่าทำไมถึงเป็นเช่นนั้น

ฉันจะทำให้มันทำงานได้อย่างไรเพื่อที่ฉันจะได้สลับสาขาโดยไม่ต้องลบไฟล์เหล่านั้น?

คุณไม่สามารถทำได้โดยไม่ทำให้ไฟล์หายไป คุณสามารถเปลี่ยนชื่อpublicไปmy_publicหรือบางสิ่งบางอย่างสำหรับตอนนี้

ถ้าฉันกลับมาที่สาขานี้หลังจากนั้นทุกอย่างจะสมบูรณ์แบบขึ้นอยู่กับความมุ่งมั่นล่าสุดของฉัน?

หากคุณยอมรับการเปลี่ยนแปลง Git จะไม่สูญเสียพวกเขา หากคุณไม่ยอมรับการเปลี่ยนแปลง Git จะพยายามอย่างหนักที่จะไม่เขียนทับงานที่คุณทำ นั่นคือสิ่งที่ Git เตือนคุณเกี่ยวกับในตัวอย่างแรกที่นี่ (เมื่อคุณพยายามเปลี่ยนสาขา)


ขอบคุณสำหรับคำอธิบาย ฉันสำรองไฟล์สลับสาขาและรวมเข้าด้วยกันจากนั้นแทนที่ไฟล์ในโฟลเดอร์สาธารณะ ที่ได้ผล
marcamillion

1
ในขณะที่ฉันแสดงความคิดเห็นกับคำตอบของ @ Arrowmaster นี่คือคำตอบที่ถูกต้องสำหรับข้อความแสดงข้อผิดพลาด มันอาจไม่ใช่คำตอบที่ถูกต้องสำหรับผู้ตั้งคำถามนี้โดยเฉพาะเนื่องจากเขามีปัญหาจริงที่ดูเหมือนจะเป็น gitignore
studgeek

37

สิ่งนี้ใช้ได้สำหรับฉัน

 1. git fetch --all
 2. git reset --hard origin/{branch_name}

5
โปรดเพิ่มคำอธิบายเกี่ยวกับโซลูชันของคุณ ดูstackoverflow.com/help/how-to-answer
user7294900

นี่คือสิ่งที่ฉันต้องใช้ สำเนาของรีโมตแบบโลคัลของคุณมีไฟล์ที่ไม่ได้ติดตามทั้งหมดจริง ๆ คุณกำลังตรวจสอบเพื่อเรียกคืนไฟล์ที่ไม่ได้ติดตามซึ่ง แต่เดิมถูกร้องเรียน ตอนนี้คุณสามารถเปลี่ยนไปใช้สาขาอื่นได้แล้ว
ahnbizcad

2
ด้วยเหตุผลบางอย่างนี่เป็นทางออกเดียวสำหรับฉัน ขอบคุณเพื่อน
Kiwad

แก้ไขปัญหาของฉัน ขอบคุณ
Devashis Kant

ขอบคุณมากง่ายมาก! git reset - ซอฟท์แวร์กำเนิด / พัฒนา ฉันเกลียดการแก้ไขข้อขัดแย้งผสานเหล่านี้อย่างไร คำสั่งนี้ดีและเรียบง่าย
nine9five

22

มีคำสั่งสำหรับภารกิจละเอียดอ่อนนี้ (การลบไฟล์ที่ไม่ได้ติดตามอย่างถาวร)

git clean -i

จากนั้นgit pullจะทำ


13

สำหรับผู้ที่ต้องการสิ่งที่น้อยไกลถึงกว่าคำตอบที่สกอตต์เชฟเฟอร์ฯ ,

git clean -f

มีแนวโน้มที่จะทำงาน ฉันขอแนะนำให้ทำงาน

git clean --dry-run

เป็นครั้งแรก คำสั่งนั้นจะส่งออกรายการไฟล์ที่ Git จะลบหากคุณเรียกใช้git clean -fและอาจช่วยให้คุณเจ็บปวดในการลบสิ่งที่คุณไม่ต้องการ

ดูคำตอบนี้กอง Oveflowหรือเอกสารgit cleanสำหรับข้อมูลเพิ่มเติมเกี่ยวกับ


12

น่าเสียดายใช่git rm --cachedหรือgit clean -d -fx ""ไม่ก็ทำเพื่อฉัน

วิธีแก้ปัญหาของฉันจบลงด้วยการผลักดันให้สาขาของฉันอยู่ห่างไกลจากการโคลน repo ใหม่จากนั้นทำการผสานของฉันใน repo ใหม่ คนอื่นที่เข้าถึง repo ต้องทำเช่นเดียวกัน

คุณธรรมของเรื่องราว: ใช้.gitignoreไฟล์จากการลงทะเบียนเรียน


10

หากคุณต้องการแก้ไขคำถามนี้อย่างรวดเร็วคุณสามารถใช้คำสั่งนี้:

git checkout -f dev

สิ่งนี้ช่วยฉันได้เมื่อปัญหาของฉันไม่เกี่ยวข้องกับ.gitignoreafaik
Nakilon

ข้อผิดพลาด: pathspec 'dev' ไม่ตรงกับไฟล์ใด ๆ ที่ git รู้จัก
Black

@Black 'dev' เป็นชื่อสาขาใส่สาขาของคุณแทน
Vinit Solanki

8

ฉันมีปัญหาเดียวกันเมื่อเช็คเอ้าท์สาขาตามข้อผูกพันก่อนหน้านี้ Git ปฏิเสธที่จะชำระเงินเนื่องจากไฟล์ที่ไม่ได้ติดตาม

ฉันพบวิธีแก้ไขแล้วและหวังว่าจะช่วยคุณได้เช่นกัน

การเพิ่มไดเรกทอรีที่ได้รับผลกระทบไปยัง.gitignoreและการออกไดเรกทอรี$ git rm -r --cachedนั้นไม่เพียงพอ

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

  1. ตั้งค่าไฟล์ที่ไม่ได้ติดตาม: แก้ไข.gitignoreและนำไปใช้$ git rm -r --cachedกับไฟล์และไดเรกทอรีที่คุณต้องการให้คอมไพล์ละเว้น เพิ่มยังไฟล์.gitignoreตัวเองไปและไม่ลืมที่จะแก้ไขปัญหา.gitignore $ git rm -r --cached .gitignoreสิ่งนี้จะช่วยให้มั่นใจได้ว่าพฤติกรรมการเพิกเฉยของคอมไพล์จะเหมือนเดิมในคอมมิชชันก่อนหน้า

  2. ยอมรับการเปลี่ยนแปลงที่คุณเพิ่งทำ:

    $ git add -A
    $ git commit

  3. บันทึกบันทึกปัจจุบันมิฉะนั้นคุณอาจพบปัญหากลับมาเป็นรุ่นปัจจุบัน

    $ git log > ../git.log

  4. ฮาร์ดรีเซ็ตเป็นคอมมิชชัน K

    $ git reset --hard version_k

  5. สร้างสาขาขึ้นอยู่กับกระทำ K

    $ git branch commit_k_branch

  6. ชำระเงินในสาขานั้น

    $ git checkout commit_k_branch

  7. ทำสิ่งที่คุณและกระทำมัน

  8. ชำระเงินกลับสู่ต้นแบบอีกครั้ง

    $ git checkout master

  9. รีเซ็ตเป็นเวอร์ชั่นปัจจุบันอีกครั้ง

    $ git reset current_version หรือ $ git reset ORIG_HEAD

  10. ตอนนี้คุณสามารถรีเซ็ต HEAD ได้ยาก

    git reset --hard HEAD

บันทึก! อย่าข้ามขั้นตอนถัดไปจนถึงสุดท้าย (เช่นเช่น$ git reset --hard ORIG_HEAD ) มิฉะนั้นไฟล์ที่ไม่ได้ติดตามการคอมไพล์ที่ถูกร้องเรียนด้านบนจะหายไป

ฉันยังทำให้แน่ใจว่าไฟล์คอมไพล์ที่บ่นเกี่ยวกับไม่ถูกลบ ฉันคัดลอกพวกเขาไปยังไฟล์ข้อความและออกคำสั่ง$ for i in $(cat ../test.txt); do ls -ahl $i; done

หากคุณชำระเงินไปยังสาขาที่กล่าวถึงข้างต้นอีกครั้งอย่าลืมที่จะออก$ git statusเพื่อให้แน่ใจว่าไม่มีการเปลี่ยนแปลงที่ไม่พึงประสงค์ปรากฏขึ้น


8

สิ่งนี้เกิดขึ้นกับฉันในระบบ Windows 8โดยใช้ Git จากพรอมต์คำสั่ง ทีมที่เหลือของฉันใช้TFSและฉันใช้git-tfของ Microsoft เพื่อผลัก / ดึงระหว่าง TFS และที่เก็บ Git ในพื้นที่ของฉัน

ปัญหาที่เกิดขึ้นเนื่องจากบางไฟล์ที่ได้รับการเปลี่ยนชื่อเดียวที่จะเปลี่ยนกรณีของพวกเขา สิ่งที่ดูเหมือนจะเกิดขึ้นคือ:

  • ไฟล์ถูกตรวจสอบด้วยการรวมกันในชื่อของพวกเขา
  • ในการคอมมิชชันต่อมาชื่อไฟล์ถูกเปลี่ยนเป็นตัวพิมพ์เล็กทั้งหมด
  • git-tf เริ่มมีไฟล์ในกรณีผสม
  • เมื่อไฟล์ถูกเปลี่ยนชื่อเป็นตัวพิมพ์เล็ก git-tf ไม่ได้รับไฟล์เพราะสำหรับ Windows 8 ชื่อไฟล์เหล่านั้นจะเทียบเท่ากัน
  • เนื่องจาก Git คำนึงถึงขนาดตัวพิมพ์มันจึงบ่นว่าฉันมีไฟล์แบบตัวพิมพ์เล็กซึ่งไม่ได้อยู่ในการควบคุมแหล่งที่มา แต่การใช้git statusฉันไม่เห็นการเปลี่ยนแปลงใด ๆ เนื่องจากในคำสั่ง Windows ให้พรอมต์ชื่อไฟล์เหล่านั้นที่เทียบเท่า

ทางออกที่ง่ายที่สุดสำหรับฉันคือ:

  • git checkoutรุ่นก่อนหน้าของโครงการที่ดีก่อนที่ไฟล์เหล่านั้นเคยถูกเพิ่ม
  • จากนั้นgit checkoutเป็นเวอร์ชันล่าสุดของโครงการพร้อมปลอกไฟล์ที่ถูกต้อง

+1 ฉันสามารถใช้บันทึก git ในสาขาและสาขาปัจจุบันเพื่อทำการ rebase เพื่อดูว่าเมื่อใดที่คอมมิชชันเกิดการเปลี่ยนแปลงเคส แล้วฉัน hacked รอบ ...
ปัญญาชน

4

ทั้งสองฟังก์ชั่น (git rm - แคช, git checkout -f อีกสาขา) ไม่ทำงานสำหรับฉัน

แต่ฉันลบไฟล์ (ในคราส) ตามที่ Git บอกให้คุณทำ โปรดย้ายหรือลบออกก่อนที่คุณจะสามารถเปลี่ยนสาขาได้

แล้วฉันจะเพิ่ม / กระทำมัน

จากนั้นฉันก็ดึงแล้วก็ใช้งานได้!


4

ในกรณีของฉันมีปัญหากับ submodules masterถูกรวมเข้ากับสาขาอื่นซึ่งเพิ่ม submodule ใหม่ให้กับโครงการ สาขาที่ฉันพยายามเช็คเอาต์ไม่มีก็คือเหตุผลที่คอมไพล์บ่นเกี่ยวกับไฟล์ที่ไม่ได้ติดตามและไม่มีวิธีแก้ไขปัญหาอื่นที่แนะนำให้ฉัน ฉันบังคับให้เช็คเอาต์ไปยังสาขาใหม่ของฉันและดึงต้นแบบ

  • git checkout -f my_branch
  • git pull origin master
  • git submodule update --init


3

ฉันกำลังเผชิญกับปัญหาที่คล้ายกันและฉันพยายามแก้ปัญหาทั้งหมดที่โพสต์ข้างต้น แต่มันไม่ทำงาน

ประเด็นสำคัญคือการเกิดขึ้นเมื่อฉันเปลี่ยนชื่อของฉันonMusicUpdateListener.javaไปOnMusicUpdateListener.javaในdevelopสาขา

ตอนนี้masterมีonMusicUpdateListener.java และdevelopมีไฟล์เดียวกันกับOnMusicUpdateListener.java

ตอนนี้เมื่อใดก็ตามที่ฉันเปลี่ยนไปใช้ปริญญาโทมันทำให้ฉันมีข้อผิดพลาด

The following untracked working tree files would be overwritten by checkout

abortedและจากนั้นก็

เพื่อแก้ปัญหานี้ผมเข้มแข็งchecked out masterสาขาแล้วเปลี่ยนชื่อของฉันonMusicUpdateListener.javaไปOnMusicUpdateListener.java, committedมันแล้วmergedกับdevelopสาขา

จากนั้นฉันก็อัพเดตdevelopสาขาของฉันโดยmergingมันเป็นmasterและตอนนี้ทุกอย่างกลับสู่ปกติและแก้ไขปัญหาได้แล้ว


ฉันพบปัญหาที่คล้ายกันมาก่อน เพื่อความเข้าใจของฉันปัญหาเรื่องความไวของตัวพิมพ์เล็กน่าจะเป็นปัญหาบน windows เท่านั้น ฉันเดาว่าคุณกำลังพัฒนาบน windows?
Ji_in_coding

2

นี่อาจเป็นปัญหาการอนุญาต

เปลี่ยนความเป็นเจ้าของ

sudo chown -v -R usr-name:group-name folder-name

ฉันยังมีปัญหาเดียวกับที่ได้รับรางวัล ฉันเพิ่ม. gignignore ไปยังโฟลเดอร์ที่ได้รับการติดตามแล้ว ฉันลบไฟล์แล้วก็สามารถทำการตรวจสอบคอมไพล์ได้
cbloss793

2

2 ไฟล์ที่มีชื่อเหมือนกัน แต่กรณีอื่นอาจมีปัญหา

คุณสามารถลบได้ในไฟล์เหล่านี้หรือเปลี่ยนชื่อ Ex:

Pdf.html.twig (The GOOD one)

pdf.html.twig (The one I deleted)

2

ย้ายไฟล์แทนที่จะลบ

วิธีหนึ่งในการหลีกเลี่ยงการลบไฟล์คือการย้ายไฟล์เหล่านั้นแทน ตัวอย่างเช่น:

cd "`git rev-parse --show-toplevel`"
git checkout 2>&1 | while read f; do [ ! -e "$f" ] || mv "$f" "$f".bak; done

1

หากคุณได้เปลี่ยนชื่อไฟล์ในเครื่องแล้วทำ a pullมันจะแสดงข้อความข้อผิดพลาดนั้น


จะแก้ไขข้อผิดพลาดนี้ได้อย่างไร? ข้อความนี้ยังปรากฏขึ้นเมื่อสลับสาขาหลังจากเปลี่ยนเคสในชื่อไฟล์ (MyFile => myfile)
Bernhard Döbler

1

มันง่ายที่จะแก้ไข git บอกว่าคุณมีไฟล์เหมือนกันในทั้งสองสาขาดังนั้นคุณต้องลบไฟล์ที่ต้องการจากสาขาหลักแล้วคุณจะสามารถผสาน:

คอมไพล์ "สาขาของคุณ"

ฉันหวังว่าจะได้ผลสำหรับคุณฉันเพิ่งแก้ไขข้อผิดพลาดของฉัน ข้อผิดพลาดของฉันคือ:

ข้อผิดพลาด: ไฟล์ต้นไม้ทำงานที่ไม่ได้ติดตามต่อไปนี้จะถูกเขียนทับโดยการผสาน: .vs / slnx.sqlite กรุณาย้ายหรือลบออกก่อนที่จะทำการผสาน ยกเลิก

ตอนนี้มันทำงาน! ในกรณีของฉัน. vs / slnx.sqlite สร้างโดย visual studio ฉันต้องปิดก่อนที่จะลบ


0

ในกรณีของฉันฉันเห็นข้อผิดพลาดนี้เพราะฉันใช้ CMS โอเพ่นซอร์สยอดนิยมและไดเรกทอรีที่ทำให้เกิดปัญหาคือไดเรกทอรีอัปโหลดที่ CMS เขียนถึง

ดังนั้นสิ่งที่กล่าวคือมีไฟล์ที่คุณไม่มี แต่ที่คุณไม่สามารถรับได้จากเวอร์ชัน

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



0

ฉันเพิ่งไปที่ระบบไฟล์และลบไฟล์โดยตรงจากนั้นดำเนินการต่อด้วยการชำระเงิน git และใช้งานได้

ฉันเคยมีปัญหาเกิดขึ้นหลายครั้งและอาจเกี่ยวข้องกับนักพัฒนาที่ทำการลบผลักเพิ่มอีกดันหรือบางสิ่งนั้น


0

คำตอบส่วนใหญ่พิจารณาลบหรือลบไฟล์ซึ่งเป็นวิธีที่ง่าย แต่บางครั้งคุณไม่ต้องการกำจัดไฟล์ในเครื่อง แต่ผสานกับกลยุทธ์ดังนั้น git จึงมีทางออกสำหรับเรื่องนี้เช่นกัน

git merge --strategy=ours master 

0

เพียงแค่ลบไฟล์หรือเปลี่ยนชื่อพวกเขา

เช่น

$ git pull
Enter passphrase for key '/c/Users/PC983/.ssh/id_rsa':
error: Your local changes to the following files would be overwritten by merge:
        ajax/productPrice.php
Please commit your changes or stash them before you merge.
error: The following untracked working tree files would be overwritten by merge:
        ajax/product.php
Please move or remove them before you merge.
Aborting
Updating a04cbe7a..6aa8ead5

ฉันต้องเปลี่ยนชื่อ / ลบajax / product.phpและajax / produtPrice.phpอาแจ็กซ์

ไม่ต้องกังวลดึง git จะนำพวกเขากลับมา ฉันขอแนะนำให้คุณเปลี่ยนชื่อพวกเขาแทนการลบเพราะคุณอาจสูญเสียการเปลี่ยนแปลงบางอย่าง

หากวิธีนี้ไม่ได้ผลคุณต้องลบทั้งสาขาและสร้างใหม่อีกครั้งแล้วทำ git pull origin remotebranch


0

เพื่อบันทึกไฟล์ที่ถูกแก้ไขและเพื่อใช้เนื้อหาที่ถูกดัดแปลงในภายหลัง ฉันพบข้อผิดพลาดนี้ขณะที่ฉันลองตรวจสอบสาขาและเมื่อพยายามรีบูต ลองซ่อน Git

git stash


0

ตรวจสอบว่าชื่อโฟลเดอร์ใดที่มี '/' หรือสัญลักษณ์พิเศษใด ๆ แล้วเปลี่ยนชื่อโฟลเดอร์นั้น จากนั้นคุณเพียงโคลนที่เก็บไปยังตำแหน่งอื่น


0

วิธีแก้ไขปัญหาอย่างง่ายอาจเป็น: เพียงตรวจสอบให้แน่ใจว่าคุณอยู่ในไดเรกทอรีการทำงานที่ถูกต้อง GitBashเพียงให้แน่ใจว่าคุณอยู่ในไดเรกทอรีการทำงานที่ถูกต้องใน ข้อความนั้นเกิดขึ้นเกือบทุกครั้งหากผู้ใช้พยายามที่จะผสานไดเรกทอรีสูงเกินไปในลำดับชั้นของโฟลเดอร์ของเขา

ตัวอย่าง:

/workspace/git/myBashSourceFolder/myProjectSourcefolder

สถานการณ์จำลอง: ผู้ใช้ repo ที่โคลนในgit-folderเขาสร้างโครงการ Java ใหม่ใน Eclipse นำเข้า repo ที่โคลน Eclipse ตั้งค่า myProjectSourceFolder เป็นซอร์สโฟลเดอร์ในโปรเจ็กต์ท้องถิ่นของเขา ดังนั้นผู้ใช้ป้อนมันในคอมไพล์ทุบตีและผลักดึงและส่งมอบโครงการของเขาจากที่นั่น ดังนั้นจึงซิงค์ git myProjectSourceFolder- แต่ไม่มีการบันทึกในประวัติของเขาสำหรับ myBashSourceFolder ดังนั้น push / pull / merge จาก myBashSourceFolder จะสร้างเอาต์พุตที่กำหนดหากผู้ใช้พยายามซิงค์จากที่นั่นในครั้งต่อไปแทนที่จะเป็นโฟลเดอร์ที่เขาทำงานมาก่อน

วิธีแก้ไข:ป้อนโฟลเดอร์ที่ถูกต้องแล้วลองดึงอีกครั้ง เกือบทุกครั้งที่พบวิธีแก้ปัญหานี้ใช้ได้ดี :)

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