วิธีแก้ไขข้อผิดพลาด“ ไม่ใช่สิ่งที่เราสามารถผสาน” ของคอมไพล์ได้


291

ฉันเพิ่งพบปัญหาเมื่อรวมสาขาเป็นหลักในคอมไพล์ git ls-remoteครั้งแรกผมได้ชื่อสาขาโดยใช้ เรียกสาขานั้นว่า "branch-name" จากนั้นฉันก็รันgit merge branch-nameคำสั่งและรับผลลัพธ์ต่อไปนี้:

fatal: branch-name - not something we can merge

ฉันจะแก้ไขข้อผิดพลาดนี้ได้อย่างไร

คำตอบ:


357

ดังที่แสดงใน"สิ่งที่เราไม่สามารถผสาน" เกิดขึ้นได้อย่างไร ข้อผิดพลาดนี้อาจเกิดขึ้นจากการพิมพ์ผิดในชื่อสาขาเพราะคุณพยายามดึงสาขาที่ไม่มีอยู่

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

git checkout branch-name
git checkout master
git merge branch-name

สิ่งนี้ควรใช้งานได้ แต่ถ้าคุณได้รับข้อความแจ้งข้อผิดพลาด

error: pathspec 'remote-name/branch-name' did not match any file(s) known to git.

คุณต้องดึงรีโมต (อาจจะ แต่ไม่จำเป็นต้องเป็น "ต้นกำเนิด") ก่อนที่จะตรวจสอบสาขา:

git fetch remote-name

3
สิ่งนี้เกิดขึ้นกับฉันหลังจากเพิ่มรีโมตใหม่ - ฉันต้องทำgit fetchก่อนก่อนที่จะรวมสาขารีโมตเข้าด้วยกัน
เจสัน

ดึงและชำระเงินจากสาขาจากระยะไกล git fetch && git checkout BranchName
Juni Brosas

2
สิ่งนี้เกิดขึ้นกับฉันเมื่อฉันถูกทำผิดโครงการ (เช่นมันเป็น repo อื่นที่ไม่มีสาขาที่ฉันต้องการผสาน)
JoelFan

1
หากคุณพยายามซิงค์ทางแยกที่บรรทัดคำสั่ง ( help.github.com/articles/syncing-a-fork ) ข้อผิดพลาดนี้อาจเป็นเพราะคุณพลาดขั้นตอนที่ 0 อะไร ไม่มีขั้นตอน 0 อยู่ในรายการ? ใช่นั่นเป็นเหตุผลว่าทำไมจึงพลาดง่าย "ก่อนที่คุณจะสามารถซิงค์ส้อมของคุณด้วยที่เก็บอัปสตรีมคุณต้องกำหนดค่ารีโมตที่ชี้ไปยังที่เก็บอัปสตรีมใน Git" <- นั่นคือขั้นตอนที่ 0 หากคุณข้ามขั้นตอนนั้นคุณจะได้รับข้อผิดพลาดด้านบนซึ่งอาจทำให้คุณอยู่ใน Google และนำคุณมาที่นี่ :-)
Steve Bonds

1
Git requires local knowledge of both branches in order to merge those branches
Gangadhar JANNU

97

มันเป็นข้อเสนอแนะที่โง่ แต่ให้แน่ใจว่าไม่มีการพิมพ์ผิดในชื่อสาขา!


4
ไม่ให้โง่เป็น "พิมพ์ผิด" สามารถลดความจริงที่ว่าสาขาที่ไม่ได้รับความจริงเลย (และจึงไม่รู้จักทั้งในประเทศ) .. Git ทำสิ่งที่แตกต่างกว่า CVS หรือ SVN ..
klang

2
ปัญหาอาจเกิดขึ้นหากชื่อสาขามีอักขระเช่นเครื่องหมายจุลภาค (,) หรือ apostrophes (')
AxeEffect

ตรวจสอบให้แน่ใจว่าคุณอยู่ใน repo ที่ถูกต้องหรือหน้าต่างเทอร์มินัล / แท็บโดยเฉพาะถ้าคุณทำงานกับ repos หลาย ๆ ตัวพร้อมกัน
totymedli

71

เมื่อดึงจากระยะไกลอัปสตรีมgit fetch --allไม่หลอกลวงสำหรับฉัน:

git remote add upstream [url to the original repo]
git checkout [branch to be updated]
git fetch --all
git merge upstream/[branch to be updated]

ในกรณีอื่น ๆ ฉันพบข้อผิดพลาด "ไม่ใช่บางสิ่งที่เราสามารถผสานได้" ก็จะเกิดขึ้นเช่นกันหากไม่มีสาขาระยะไกล (ต้นทาง, อัปสตรีม) นี้อาจดูเหมือนชัดเจน แต่คุณอาจพบว่าตัวเองทำgit merge origin/developใน repo masterที่มีเพียง


5
ฉันไม่รู้จริง ๆ ว่าทำไมคำตอบนี้ไม่ได้รวบรวมคะแนนเสียงมากเท่าที่กล่าวข้างต้น 'git fetch -all' เป็นคำสั่งที่มักจะพลาดในการรันก่อนที่จะรวมสาขาจากระยะไกลและแก้ปัญหาให้ฉัน
Dayanand Gowda

2
เนื่องจากการดึงข้อมูลไม่ได้ดึงโดยอัตโนมัติและคุณต้องทำด้วยตนเอง ดังนั้นการดึงข้อมูลคู่ - ทั้งหมด & ดึง - ทั้งหมดจะทำเคล็ดลับ
danielpopa

ขอบคุณ! git remote add upstreamเป็นสิ่งที่สำคัญฉันถูกหายไปที่แก้ไขได้สำหรับฉัน ฉันคิดว่าข้อผิดพลาดทั่วไปคือสมมติว่าทางแยกรู้โดยอัตโนมัติว่ามันอยู่ที่ไหน
เบรนต์

23

ฉันมีปัญหานี้เช่นกัน สาขาดูเหมือนว่า 'ชื่อผู้ใช้ / มาสเตอร์' ซึ่งดูเหมือนจะสับสนคอมไพล์เนื่องจากดูเหมือนว่าที่อยู่ระยะไกลที่ฉันกำหนดไว้ สำหรับฉันใช้สิ่งนี้

git merge origin/username/master

ทำงานได้อย่างสมบูรณ์ดี


4
ฉันต้องใส่origin/ชื่อของสาขาระยะไกลด้วย
AsGoodAsItGets

คุณจะต้องทำสิ่งนี้ถ้าชื่อสาขามีเครื่องหมายทับ/อยู่ข้างใน
CTS_AE

21

วิธีการด้านล่างใช้ได้กับฉันทุกครั้ง

git checkout master
git pull
git checkout branch-name-to-be-merged
git pull
git checkout branch-name
git pull
git merge branch-name-to-be-merged

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

11

อาจเกิดขึ้นเนื่องจากสาขานั้นไม่ได้อยู่ในพื้นที่ของคุณ ก่อนรวมการใช้

git fetch origin

8

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

$ git merge fix-load

สำหรับสิ่งนี้ได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้:

ผสาน: แก้ไขโหลด - ไม่ใช่สิ่งที่เราสามารถผสานได้

ฉันมองไปข้างบนโซลูชันทั้งหมด แต่ไม่ทำงานเลย

ในที่สุดฉันก็รู้ว่าสาเหตุของปัญหาเป็นความผิดพลาดในการสะกดชื่อสาขาของฉัน (อันที่จริงชื่อสาขาผสานคือfix-loads)


4
สำหรับฉันการเพิ่มต้นกำเนิดทำงานได้ ยกตัวอย่างของคุณgit merge origin/fix-loadsทำงาน
Ram Patra

7

คุณได้รับข้อผิดพลาดนี้เนื่องจากไม่มีสาขาที่คุณต้องการรวมในที่เก็บในเครื่องของคุณ

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

git checkout branch_name_to_merge

หลังจากนี้ให้พยายามรวมเข้ากับสาขาหลักโดยใช้คำสั่งต่อไปนี้:

git merge branch_name_to_merge

2
สิ่งนี้สามารถเกิดขึ้นได้หากคุณไม่ใส่ใจกับชื่อสาขาของคุณ (เช่นสะกดผิด) :)
Matt Borja

สิ่งนี้ใช้ได้สำหรับฉัน เมื่อฉันทำงานใน Atom ด้วยแท็บ Git และฉันสลับสาขากับดรอปดาวน์บางครั้งฉันต้องไปที่บรรทัดคำสั่งและcheckoutสาขา
nzaleski

7

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

git checkout branch-name
git pull
git checkout new-branch-name
git merge branch-name

ฉันจะจู้จี้จุกจิกและพูดว่าฉันไม่คิดว่าข้อความแสดงข้อผิดพลาดแสดงให้เห็นอะไรเช่น :-) ข้างต้น
Brian Agnew

3

ฉันได้รับข้อผิดพลาดนี้เมื่อฉันทำgit merge BRANCH_NAME "some commit message"- ฉันลืมที่จะเพิ่มแฟล็ก -m สำหรับข้อความยืนยันดังนั้นจึงคิดว่าชื่อสาขารวมความคิดเห็น


3

ในความคิดของฉันฉันไม่ได้ทำแผนที่สาขาท้องถิ่นของฉันด้วย repo ระยะไกล ฉันลงไปด้านล่างและใช้งานได้ดี

git checkout master
git remote add origin https://github.com/yourrepo/project.git
git push -u origin master
git pull
git merge myBranch1FromMain

2

หากสตริงที่มีการอ้างอิงถูกสร้างขึ้นโดยคำสั่ง Git อื่น (หรือคำสั่งเชลล์อื่น ๆ สำหรับเรื่องนั้น) ตรวจสอบให้แน่ใจว่าไม่มีการรับคืนในตอนท้าย คุณจะต้องตัดมันก่อนที่จะส่งสตริงไปที่ "git merge"

โปรดทราบว่ามันค่อนข้างชัดเจนเมื่อเกิดเหตุการณ์นี้เนื่องจากข้อความแสดงข้อผิดพลาดใน 2 บรรทัด

merge: 26d8e04b29925ea5b59cb50501ab5a14dd35f0f9
 - not something we can merge

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

2

เราได้รับข้อผิดพลาดนี้เนื่องจากเรามีเครื่องหมายจุลภาค (,) ในชื่อสาขา เราลบสาขาท้องถิ่นแล้วตรวจสอบอีกครั้งภายใต้ชื่อใหม่โดยไม่มีเครื่องหมายจุลภาค เราสามารถรวมเข้าด้วยกันได้สำเร็จ


ขีดเส้นใต้ก็มีปัญหาเช่นกัน +1
Anders Lindén

1
ฉันใช้เครื่องหมายขีดล่างบ่อยครั้งในชื่อสาขา @ AndersLindén
nzaleski

และวงเล็บก็มีปัญหาเช่นกัน ... + 1
Pablo Ezequiel

1

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


หรือขีดเส้นใต้ +1
Anders Lindén

1

ฉันขอแนะนำให้ตรวจสอบว่าคุณสามารถสลับไปที่สาขาที่คุณพยายามผสาน

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

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


0

สำหรับฉันปัญหาเกิดขึ้นเมื่อฉันลองทำสิ่งนี้:

git merge -s ours --no-commit --allow-unrelated-histories <remote name>/develop

ดังนั้นจริง ๆ แล้วฉันควรจะเขียนmasterแทนdevelopเพราะนายเป็นชื่อสาขาของต้นไม้ย่อยไม่ใช่สาขาที่แท้จริงของฉัน


0

อาจฟังดูแปลก แต่อย่าลืมตั้งค่าอีเมลและชื่อคอมไพล์ของคุณ:

git config --global user.email "MY@EMAIL.COM"
git config --global user.name "FIRST_NAME LAST_NAME"

0

สำหรับฉันปัญหาคือ 'เครื่องหมายอัญประกาศคู่' ในข้อความผสาน ดังนั้นเมื่อฉันลบเครื่องหมายคู่ออกทั้งหมดทำงานได้อย่างมหัศจรรย์ ฉันหวังว่าจะช่วยใครบางคน (ขออภัยสำหรับภาษาอังกฤษที่ไม่ดีของฉัน)


0

ฉันมีแผนผังการทำงานกับต้นแบบและสาขาอื่นเช็คเอาท์ในโฟลเดอร์งานที่แตกต่างกันสองโฟลเดอร์

PS C:\rhipheusADO\Build> git worktree list
C:/rhipheusADO/Build         7d32e6e [vyas-cr-core]
C:/rhipheusADO/Build-master  91d418c [master]

PS C:\rhipheusADO\Build> cd ..\Build-master\

PS C:\rhipheusADO\Build-master> git merge 7d32e6e #Or any other intermediary commits
Updating 91d418c..7d32e6e
Fast-forward
 Pipeline/CR-MultiPool/azure-pipelines-auc.yml | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

PS C:\rhipheusADO\Build-master> git ls-remote
From https://myorg.visualstudio.com/HelloWorldApp/_git/Build
53060bac18f9d4e7c619e5170c436e6049b63f25        HEAD
7d32e6ec76d5a5271caebc2555d5a3a84b703954        refs/heads/vyas-cr-core 

PS C:\rhipheusADO\Build-master> git merge 7d32e6ec76d5a5271caebc2555d5a3a84b703954
Already up-to-date

PS C:\rhipheusADO\Build>  git push
Total 0 (delta 0), reused 0 (delta 0)
To https://myorg.visualstudio.com/HelloWorldApp/_git/Build
   91d418c..7d32e6e  master -> master

หากคุณต้องการรวมการกระทำล่าสุด:

git merge origin/vyas-cr-core 
git push

และเหมือนกับสิ่งที่ฉันทำมาตลอด:

git checkout master # This is needed if you're not using worktrees
git pull origin vyas-cr-core
git push

0

สาขาที่คุณกำลังพยายามจะผสานอาจไม่สามารถระบุได้โดยคุณ git ในปัจจุบันเพื่อดำเนินการ git branch และดูว่าสาขาที่คุณต้องการรวมอยู่นั้นไม่ใช่หรือไม่ถ้าไม่ดำเนินการ git pull และตอนนี้ถ้าคุณทำgit branchสาขาจะมองเห็นได้ในขณะนี้ และตอนนี้คุณแสดงgit merge <BranchName>

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