ฉันจะเพิกเฉยต่อข้อผิดพลาดเกี่ยวกับ 'การดึง git' เกี่ยวกับการเปลี่ยนแปลงในท้องถิ่นของฉันที่จะถูกเขียนทับโดยการรวม


568

ฉันจะละเว้นข้อความแสดงข้อผิดพลาดต่อไปนี้บน Git pull ได้อย่างไร

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

ถ้าฉันต้องการเขียนทับพวกเขา?

ฉันลองทำสิ่งต่าง ๆ เช่นgit pull -fแต่ไม่ได้ผล

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


ที่เกี่ยวข้อง แต่ไม่ซ้ำกัน: stackoverflow.com/questions/52704/…
Daniel Hilgarth

7
@BrianKnoblauch เห็นด้วยทั้งหมด! นอกจากนี้ยังไม่ 'รวม' มากนักหากเป็น 'เขียนทับ' ใช่ไหม ฉันคิดถึง SVN ทุกวัน ...
user1944491

2
git config core.fileMode falseประหยัดเวลาของฉัน
Nolwennig


ถ้าฉันไม่ต้องการเขียนทับพวกเขาล่ะ?
Philip Rego

คำตอบ:


439

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

git stash push --include-untracked

หากคุณไม่ต้องการพวกเขาอีกต่อไปคุณสามารถวางที่ซ่อน:

git stash drop

หากคุณไม่ต้องการที่จะซ่อนการเปลี่ยนแปลงที่คุณจัดฉากแล้ว - เช่นกับgit add- --keep-indexแล้วเพิ่มตัวเลือก อย่างไรก็ตามโปรดทราบว่าสิ่งนี้จะยังคงป้องกันไม่ให้เกิดการรวมกันหากการเปลี่ยนแปลงที่จัดฉากเหล่านั้นชนกับสิ่งที่อยู่เหนือน้ำ


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

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

  2. ใช้git checkout path/to/file/to/revertสำหรับการเปลี่ยนแปลงที่คุณต้องการจะเขียนทับ git reset HEAD path/to/file/to/revertตรวจสอบให้แน่ใจว่าไฟล์ไม่ได้จัดฉากผ่าน


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

1
@ user1132363: มันใช้งานได้สำหรับฉัน โปรดทดสอบก่อนด้วยไฟล์เดียว นอกจากนี้คุณต้องแน่ใจว่าไฟล์ที่คุณต้องการเขียนทับไม่ได้ถูกจัดฉาก
Daniel Hilgarth

3
git checkout HEAD^ path/to/file/to/revertเคล็ดลับคือการใช้งาน การใช้HEAD ^สร้างความแตกต่าง
แม่

2
@ user1132363: นั่นเป็นการตรวจสอบเวอร์ชั่นก่อนหน้าและไม่ใช่อันที่เช็คอินอยู่ในตอนนี้ฉันไม่เชื่อว่านี่เป็นวิธีที่ถูกต้อง
Daniel Hilgarth

1
ฉันต้องจากไป " save --keep-index"
Peter Mortensen

318

เอาล่ะด้วยความช่วยเหลือของคำตอบอีกสองคำตอบฉันได้วิธีแก้ปัญหาโดยตรง:

git checkout HEAD^ file/to/overwrite
git pull

7
สิ่งนี้ใช้ได้สำหรับฉัน คุณช่วยขยายคำตอบนี้ได้ไหม สิ่งนี้กำลังทำอะไรอยู่?
AC Patrice

3
มันกำลังลดการเปลี่ยนแปลงในท้องถิ่นกลับสู่การอ้างอิง HEAD ซึ่งอาจเป็นการกระทำครั้งสุดท้ายในสาขาหลัก
k3a

32
ทำไมต้อง HEAD ^ แทนที่จะเป็น HEAD
Yura

19
HEAD ^ ย่อมาจาก HEAD ^ 1 ซึ่งโดยพื้นฐานแล้วหมายถึงสิ่งที่กระทำก่อน HEAD คุณสามารถทำ HEAD ^ 2 สำหรับการกระทำก่อนหน้านั้นได้ สำหรับข้อมูลเพิ่มเติมโปรดดูgit-scm.com/book/en/v2/...และ stackoverflow.com/questions/1955985/...
davidneedham

4
โปรดอธิบายสิ่งนี้ในคำตอบ
endolith

242

สิ่งนี้ใช้ได้ผลกับฉันในการแทนที่การเปลี่ยนแปลงในระบบทั้งหมดและไม่จำเป็นต้องมีข้อมูลประจำตัว:

git reset --hard
git pull

4
ดังนั้นจำเป็นต้องทำงานกับการจัดอันดับของพวกเขายุ่งยากในการหาคำตอบที่ได้รับการจัดอันดับสูงจนถึงตอนนี้
เบเนดิกต์เค.

3
@BenedictK ฉันเชื่อว่าระบบการจัดอันดับสะท้อนให้เห็นอย่างเหมาะสม "สิ่งที่คนส่วนใหญ่เห็นว่ามีประโยชน์มากที่สุด" พวกเขากำลังจัดอันดับด้วยคะแนนโหวต ผู้คนจำนวนมากชอบโซลูชั่นอื่น ๆ นี่เป็นทางออกที่ดี แต่ผู้คนจำนวนมากพบคำตอบอื่น ๆ ที่เป็นประโยชน์มากกว่า
Kittsil

ทำงานได้ดีสำหรับฉัน
Ender

ง่ายสุด =) ขอบคุณ ^^
lestat_kim

รถถังใช้งานได้ดีสำหรับฉัน
อิกอร์

76

นี่เป็นวิธีแก้ปัญหาที่เปลี่ยนการจัดฉากเป็นระยะ:

git reset file/to/overwrite
git checkout file/to/overwrite

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

1
แก้ไขปัญหาของฉัน
Lo N.c N.

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

65

คุณสามารถยอมรับการเปลี่ยนแปลงก่อนที่จะทำการผสานหรือซ่อน:

  1. git stash save
  2. git merge origin/master
  3. git stash pop

10
ประเด็นคือคุณไม่ควรทำเช่นนี้ เพียงใช้เนื้อหาส่วนหัวในปัจจุบันและ ..... รวมไว้ใน! มันง่ายจริงๆ Git VCS อื่น ๆ ทำ ... แต่ไม่เลย ไลนัสต้องทำให้มันน่ารำคาญที่จะใช้
Jon

@ จอนทางออกนี้สำหรับ Ubuntu ฉันไม่พบอะไรที่ดีไปกว่านี้แล้ว
Suneel Kumar

น่าเสียดายที่--autostashตัวเลือกนี้ใช้ได้กับ--rebaseตัวเลือกเท่านั้น(
Eugen Konkov

นั่นจะแนะนำปัญหามากมายมันไม่คุ้มค่า ใช้เวลาโหลดอย่างน้อย 5 นาที แนะนำข้อผิดพลาด "Unlink of file" ด้วย downvote
Philip Rego

51

หากคุณต้องการยกเลิกการเปลี่ยนแปลงในเครื่องของคุณในไฟล์เดียวคุณสามารถทำสิ่งต่อไปนี้:

git checkout -- <file>

จากนั้นคุณสามารถเขียนทับไฟล์ [s] ด้วยเวอร์ชันล่าสุดได้:

git pull

@pabloasc นี่เป็นการทำลายการเปลี่ยนแปลงในเครื่องของคุณในไฟล์นั้น
Suneel Kumar

6
ใช่มัน: "ถ้าฉันต้องการเขียนทับพวกเขา"
David

1
คำถามเดิมไม่สามารถทำได้คำตอบนี้สามารถให้คนฝันร้ายที่สามารถคัดลอกคำสั่งวางสุ่มสี่สุ่มห้า
Suneel Kumar

ในกรณีที่คุณจัดแสดงคอมมิชชันแล้วอันดับแรกคุณต้องยกเลิกการคอมมิชชันผ่านทางgit reset HEAD~และทำgit checkout
dopexxx

git checkout -- <file>ล้มเหลวด้วยerror: pathspec '<file>' did not match any file(s) known to git.
A__

18

หากที่เก็บของคุณมีไฟล์ไม่กี่ไฟล์ที่ถูกลบออกจากmaster:

  1. git checkout master
  2. git fetch origin
  3. git reset --hard origin/master
  4. git checkout -b newbranch

12

บางครั้งไม่มีงานเหล่านี้ น่ารำคาญเนื่องจากสิ่งที่ LF ฉันคิดว่าสิ่งที่จะทำงานคือการลบไฟล์แล้วดึง ไม่ใช่ที่ฉันแนะนำวิธีแก้ปัญหานี้ แต่ถ้าไฟล์ไม่มีอยู่ git จะไม่แจ้งให้คุณทราบว่าการเปลี่ยนแปลงของคุณ (ซึ่งอาจไม่ใช่การเปลี่ยนแปลง) จะถูกแทนที่และจะช่วยให้คุณดำเนินการต่อ

ใช้ความเสี่ยงของคุณเอง


เมื่อคุณติดขัดเนื่องจากการจบสายวิธีนี้เป็นวิธีช่วยชีวิต
Dan Pisarski

มันไม่ทำงานสำหรับฉัน ไฟล์ไม่มีอยู่ในเครื่องและฉันยังคงได้รับข้อผิดพลาด
PRMan

11

git stash save --keep-index ไม่ได้ผลสำหรับฉัน

คำสั่งด้านล่างทำงานตามที่คาดไว้

git reset --hard
git pull

มันจะแทนที่การเปลี่ยนแปลงในท้องถิ่นทั้งหมดหากคุณไม่ต้องการ


10

คำตอบมากมายที่นี่ที่ฉันเกลียดการเพิ่มอีก แต่ทั้งหมดข้างต้นเป็น clunkier กว่าที่พวกเขาต้อง ฉันต้องทำสิ่งนี้ตลอดเวลาเพราะดูเหมือนว่า Git จะสับสนและบอกว่าฉันได้แก้ไขไฟล์ที่ไม่ได้เปลี่ยน (ไม่สามารถย้อนกลับได้เพราะพวกเขาไม่เปลี่ยน แต่ฉันไม่สามารถดึงได้เพราะพวกเขาเปลี่ยนไปแล้ว) ง่ายและ เร็วที่สุดที่ฉันได้พบคือ:

git stash
git stash drop
git pull

ทำงานเหมือนมีเสน่ห์
Blaze

! ที่น่าตื่นตาตื่นใจ วิธีแก้ปัญหาที่ง่ายและทำงานได้
naïveRSA

ยอดเยี่ยมมากขอบคุณ
Hamza

8

ใน Git เมื่อเร็ว ๆ นี้คุณสามารถเพิ่ม-r/ --rebaseเปิดpullคำสั่งเพื่อรีบูตสาขาปัจจุบันของคุณที่ด้านบนของสาขาอัปสตรีมหลังจากดึงข้อมูล คำเตือนควรหายไป แต่มีความเสี่ยงที่คุณจะได้รับความขัดแย้งบางอย่างที่คุณต้องแก้ไข


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

git checkout origin/master -f
git checkout master -f

จากนั้นดึงอีกครั้งตามปกติ:

git pull origin master

การใช้วิธีนี้สามารถช่วยคุณประหยัดเวลาในการ stashing ( git stash) และปัญหาการอนุญาตที่อาจเกิดขึ้นการรีเซ็ตไฟล์ ( git reset HEAD --hard) การลบไฟล์ ( git clean -fd) ฯลฯ นอกจากนี้ยังง่ายต่อการจดจำ


8

ปัญหานี้เกิดขึ้นเนื่องจากคุณทำการเปลี่ยนแปลงภายในไฟล์ / s และไฟล์ / s เดียวกันนั้นมีอยู่พร้อมกับการเปลี่ยนแปลงในที่เก็บ Git ดังนั้นก่อนที่จะดึง / ดันคุณจะต้องมีการเปลี่ยนแปลงในที่เก็บ:

หากต้องการเขียนทับการเปลี่ยนแปลงในท้องถิ่นของไฟล์เดียว:

git reset file/to/overwrite
git checkout file/to/overwrite

หากต้องการเขียนทับการเปลี่ยนแปลงทั้งหมด (การเปลี่ยนแปลงในไฟล์ทั้งหมด):

git stash
git pull
git stash pop

ปัญหานี้อาจเกิดจากคุณอยู่ในสาขาที่ไม่ได้รวมกับสาขาหลัก


5

git reset --hard && git clean -df

ข้อควรระวัง : สิ่งนี้จะรีเซ็ตและลบไฟล์ที่ไม่ได้ติดตามใด ๆ


27
หนึ่งไม่ได้ใช้ขวานเพื่อลบทันทีจากหน้าผากของเพื่อน
HonoredMule

3
อย่าใช้สิ่งนี้โดยไม่ได้รับรู้ว่าไฟล์บางไฟล์จะถูกลบ
andromeda


4

วิธีที่ดีที่สุดในการแก้ปัญหานี้คือ:

git checkout -- <path/file_name>

หลังจากนั้นคุณสามารถเขียนทับไฟล์โดย:

git pull origin master

ฉันมีปัญหาที่กล่าวถึงเพราะฉันอัปเดตดัชนีให้ถือว่าไฟล์นั้นไม่เปลี่ยนแปลง มันยังไม่ยอมให้ฉันทำแบบนั้น ฉันใช้git checkout -- path/*เพียงครั้งเดียวและมันทำให้ฉันสามารถทำการดึงได้
Stephen O'Flynn

4

สิ่งนี้ได้ผลสำหรับฉันที่จะละทิ้งการเปลี่ยนแปลงบนเซิร์ฟเวอร์ระยะไกลที่ใช้งานจริงและดึงออกจากตัวควบคุมแหล่งที่มา GitHub:

git reset --hard
git pull origin master

4

นี่คือกลยุทธ์ของฉันในการแก้ปัญหา

คำชี้แจงปัญหา

เราจำเป็นต้องทำการเปลี่ยนแปลงมากกว่า 10 ไฟล์ เราลองPULL (git pull origin master)แล้ว แต่ Git ตะโกน:

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

เราพยายามเรียกใช้commitแล้วpullแต่ก็ไม่ได้ผลเช่นกัน

สารละลาย

เราอยู่ในช่วงสกปรกจริงๆเพราะไฟล์อยู่ใน "Staging Area" หรือ "Index Area" และบางส่วนอยู่ใน "Head Area" หรือ "ไดเรกทอรี Git ท้องถิ่น" และเราต้องการดึงการเปลี่ยนแปลงจากเซิร์ฟเวอร์

ตรวจสอบลิงค์นี้สำหรับข้อมูลเกี่ยวกับขั้นตอนต่าง ๆ ของ Git อย่างชัดเจน: GIT Stages

เราทำตามขั้นตอนต่อไปนี้

  • git stash (สิ่งนี้ทำให้ไดเรกทอรีการทำงานของเราสะอาดการเปลี่ยนแปลงของคุณจะถูกเก็บไว้ในกองโดย Git)
  • git pull origin master (ดึงการเปลี่ยนแปลงจากเซิร์ฟเวอร์)
  • git stash apply (ใช้การเปลี่ยนแปลงทั้งหมดจากสแต็ก)
  • git commit -m 'message' (ยอมรับการเปลี่ยนแปลง)
  • git push origin master (ผลักการเปลี่ยนแปลงไปยังเซิร์ฟเวอร์)
  • git stash drop (วางสแต็ก)

มาช่วยกันทำความเข้าใจว่าทำไมคุณถึงต้องการหยุดพัก

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

จากหนังสือProGITรุ่นที่ 2:

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


3

หากคุณต้องการเขียนทับการเปลี่ยนแปลงที่เฉพาะเจาะจงคุณต้องมีวิธีที่จะบอกสิ่งที่คุณต้องการที่จะลืม

คุณอาจจะลองคัดเลือก stashing การเปลี่ยนแปลงที่คุณต้องการที่จะละทิ้งใช้แล้ววางซ่อนด้วยgit stash --patch git stash dropจากนั้นคุณสามารถดึงการเปลี่ยนแปลงระยะไกลและรวมการเปลี่ยนแปลงตามปกติ


3

TL; DR;

git pull --rebase --autostash
  -r, --rebase[=false|true|merges|preserve|interactive]
       When true, rebase the current branch on top of the upstream branch after
       fetching. If there is a remote-tracking branch corresponding to the upstream

  --autostash, --no-autostash
       Before starting rebase, stash local modifications away if
       needed, and apply the stash entry when done

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

git pull --rebase --autostashทีละขั้นตอนคืออะไร:

1. your local changes saved by `--autostash`
2. your local commits saved by `--rebase`
3. commits from upstream applied to your branch
4. your local commits are restored on top of upstream
5. your local changes are restored to working directory

กรณีของฉัน (อาจเป็นของคุณด้วย):

ฉันมีการเปลี่ยนแปลงในท้องถิ่น (การเปลี่ยนแปลงในไดเรกทอรีการทำงาน):

ป้อนคำอธิบายรูปภาพที่นี่

เมื่อฉันพยายามดึงการเปลี่ยนแปลงระยะไกลฉันได้รับข้อผิดพลาด:

ป้อนคำอธิบายรูปภาพที่นี่

การเปลี่ยนแปลงนี้ไม่ได้ตัดกับการเปลี่ยนแปลงในเครื่อง:

ป้อนคำอธิบายรูปภาพที่นี่

ดังนั้นเมื่อฉันpull --rebase --autostashบันทึกการเปลี่ยนแปลงในท้องถิ่นและนำไปใช้โดยไม่มีปัญหาใด ๆโดยอัตโนมัติ

ป้อนคำอธิบายรูปภาพที่นี่

ตอนนี้การเปลี่ยนแปลงในท้องถิ่นของฉันลดลงเล็กน้อย: ป้อนคำอธิบายรูปภาพที่นี่


2

ฉันมีกรณีพิเศษนี้ฉันมีไฟล์ที่มี - สมมติว่าไม่เปลี่ยนแปลง มันยากที่จะค้นหาเนื่องจากgit statusคำสั่งไม่แสดงการเปลี่ยนแปลงใด ๆ


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

1
ไม่ฉันต้องละทิ้งสิ่งที่ "ไม่มีการเปลี่ยนแปลง" ทั้งหมด

2

ถ้าคุณต้องการที่จะเปลี่ยนแปลงการผลิตบนเซิร์ฟเวอร์เพียงรวมเข้ากับรายการการกำหนดค่าใหม่ วิธีการประมวลผลมีดังนี้:

git stash
git pull
git stash pop

บางทีคุณอาจไม่ได้ทำการดำเนินการทั้งหมด คุณสามารถรู้ว่าคุณสามารถทำอะไรต่อไป


จากนั้นคุณสามารถใช้ Git diff - w + ชื่อของไฟล์เพื่อยืนยันการรวมโค้ดโดยอัตโนมัติ
YanQing

1

ฉันไม่สนใจไฟล์ใน repo ของฉันและเมื่อฉันได้git pull upstream masterรับข้อผิดพลาดต่อไปนี้:

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

เพื่อแก้ไขมันฉันทำต่อไปนี้

git update-index --no-assume-unchanged myfile.js

ฉันทำแล้วได้git statusรับข้อความนี้

ในสาขาหลักสาขาของคุณอยู่หลัง 'ต้นกำเนิด / หลัก' 4 คอมมิทและสามารถส่งต่อได้อย่างรวดเร็ว (ใช้ "git pull" เพื่ออัปเดตสาขาในประเทศของคุณ)

การเปลี่ยนแปลงที่ไม่ได้จัดเตรียมไว้สำหรับการส่งมอบ: (ใช้ "git add ... " เพื่ออัปเดตสิ่งที่จะส่ง) (ใช้ "การชำระเงิน git - ... " เพื่อยกเลิกการเปลี่ยนแปลงในไดเรกทอรีการทำงาน)

modified: myfile.js

ไม่มีการเพิ่มการเปลี่ยนแปลงที่จะกระทำ (ใช้ "git เพิ่ม" และ / หรือ "git กระทำ -a")

แล้วฉันจะไม่ตามมาด้วยgit checkout myfile.js git pull upstream masterเวลานี้การดำเนินการดึง git สำเร็จ


1

ฉันพบสิ่งนี้เมื่อดึงจากต้นแบบ

วิธีที่ฉันจัดการมันโดยใช้ Visual Studio;

  1. ก่อนอื่นฉันเลิกทำการเลิกทำการคอมมิต
  2. จากนั้นฉันก็ทำกระบวนการดึง Git

หวังว่านี่จะช่วยได้!



1

ฉันใหม่ในคอมไพล์และไม่แน่ใจว่าทางออกของฉันเป็นความคิดที่ดี

ฉันทดสอบคำตอบทั้งหมดแล้วและไม่มีใครทำงานให้ฉันได้!

แต่ฉันพบวิธีแก้ไขปัญหาอื่น:

1. Backup both of local and repository versions of the file.
2. Delete the file from repository.
3. git add .
4. git commit
5. git push

หวังว่านี่จะช่วยได้


1

ข้อผิดพลาด "การเปลี่ยนแปลงในท้องถิ่นของคุณไปยังไฟล์ต่อไปนี้จะถูกเขียนทับโดยการรวม" เกิดขึ้นเนื่องจากคุณมีการเปลี่ยนแปลงบางอย่างใน repo ท้องถิ่นที่ยังไม่ได้รับการยอมรับดังนั้นก่อนที่จะดึงจาก repo ระยะไกลเพียงแค่ยอมรับการเปลี่ยนแปลงใน repo ท้องถิ่น

ให้บอกว่า repo ระยะไกลของคุณมีสาขา xyz บางส่วนและคุณต้องการให้ repo xyz จากระยะไกลสาขาที่จะรวมเข้า (คัดลอกไป) สาขา repo ท้องถิ่น xyz แล้ว

{
git checkout xyz                  //check out to the respective branch in local repo
git commit -m "commiting message" //commit changes if any, in local repo branch xyz
git pull                          //it pulls remote xyz branch into local xyz branch
}

0

หากข้อผิดพลาดนี้เป็นเพราะการสิ้นสุดบรรทัด

git add
git checkout mybranch

จะทำงาน. ฉันไม่แน่ใจจริงๆว่าทำไมมันถึงได้ผล



0

ข้อความนี้ยังสามารถเกิดขึ้นได้หากgit-lfsใช้และตัวชี้ไฟล์ถูกเขียนทับโดยไฟล์จริง

จากนั้นคุณใช้:

git stash
git lfs migrate import
git pull

ผลผลิตเต็มจากกรณีของฉัน

λ git stash
Saved working directory and index state WIP on master: 5d4ad47 Merge branch 'feature/...' into 'master'
Encountered 1 file(s) that should have been pointers, but weren't:
        public/apple-touch-icon.png

λ git pull
Updating 5a4ad44..b25f79d
error: Your local changes to the following files would be overwritten by merge:
        public/apple-touch-icon.png
Please commit your changes or stash them before you merge.
Aborting

λ git lfs migrate import
migrate: Fetching remote refs: ..., done
migrate: Sorting commits: ..., done
migrate: Rewriting commits: 100% (0/0), done
migrate: Updating refs: ..., done
migrate: checkout: ..., done


λ git pull
Updating 5d4ad47..a25c79a
Fast-forward
 public/apple-touch-icon.png | Bin 2092 -> 130 bytes
 public/favicon.ico          | Bin 6518 -> 1150 bytes
 2 files changed, 0 insertions(+), 0 deletions(-)

ดูhttps://github.com/git-lfs/git-lfs/issues/2839


0

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

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