คำตอบสั้น ๆ
ตราบใดที่คุณทำการผสานอย่างรวดเร็วจากนั้นคุณก็สามารถใช้
git fetch <remote> <sourceBranch>:<destinationBranch>
ตัวอย่าง:
# Merge local branch foo into local branch master,
# without having to checkout master first.
# Here `.` means to use the local repository as the "remote":
git fetch . foo:master
# Merge remote branch origin/foo into local branch foo,
# without having to checkout foo first:
git fetch origin foo:foo
ในขณะที่คำตอบของแอมเบอร์จะทำงานในกรณีที่ส่งต่ออย่างรวดเร็วด้วยการใช้git fetch
วิธีนี้แทนที่จะปลอดภัยกว่าการบังคับให้ย้ายการอ้างอิงสาขาเพียงเล็กน้อยเนื่องจากgit fetch
จะป้องกันการไม่ส่งต่อโดยไม่ตั้งใจโดยอัตโนมัติตราบใดที่คุณไม่ได้ใช้งานโดยอัตโนมัติ+
ใน refspec
คำตอบยาว ๆ
คุณไม่สามารถรวมสาขา B เข้ากับสาขา A โดยไม่ต้องเช็คเอาท์ A ก่อนหากว่าจะส่งผลให้เกิดการรวมกันที่ไม่ใช่แบบส่งต่ออย่างรวดเร็ว นี่เป็นเพราะจำเป็นต้องใช้สำเนาการทำงานเพื่อแก้ไขข้อขัดแย้งที่อาจเกิดขึ้น
อย่างไรก็ตามในกรณีของการผสานการกรอไปข้างหน้านี่เป็นไปได้เพราะการผสานดังกล่าวจะไม่ส่งผลให้เกิดข้อขัดแย้งตามคำจำกัดความ ในการทำเช่นนี้โดยไม่ต้องเช็คสาขาก่อนคุณสามารถgit fetch
กับ refspec
นี่คือตัวอย่างของการอัปเดตmaster
(ไม่อนุญาตการเปลี่ยนแปลงที่ไม่ใช่การกรอไปข้างหน้า) หากคุณมีสาขาอื่นfeature
เช็คเอาต์:
git fetch upstream master:master
กรณีการใช้งานนี้เป็นเรื่องธรรมดามากที่คุณอาจต้องการสร้างนามแฝงในไฟล์กำหนดค่า git ของคุณเช่นนี้
[alias]
sync = !sh -c 'git checkout --quiet HEAD; git fetch upstream master:master; git checkout --quiet -'
นามแฝงนี้ทำอะไรได้บ้างดังต่อไปนี้:
git checkout HEAD
: สิ่งนี้ทำให้สำเนาการทำงานของคุณเข้าสู่สถานะแยกหัว สิ่งนี้มีประโยชน์หากคุณต้องการอัปเดตmaster
ในขณะที่คุณเช็คเอาต์ ฉันคิดว่ามันจำเป็นที่จะต้องทำด้วยเพราะไม่เช่นนั้นการอ้างอิงสาขาmaster
จะไม่ย้าย แต่ฉันจำไม่ได้ว่าเป็นสิ่งที่ถูกต้องหรือไม่
git fetch upstream master:master
: สิ่งนี้จะส่งต่อไปmaster
ยังท้องถิ่นของคุณไปยังสถานที่เดียวกันอย่างupstream/master
รวดเร็ว
git checkout -
ตรวจสอบสาขาที่เช็คเอาท์ก่อนหน้าของคุณ (เป็นสิ่งที่-
ทำในกรณีนี้)
ไวยากรณ์ของgit fetch
การผสานอย่างรวดเร็ว (ไม่ใช่ -)
หากคุณต้องการให้fetch
คำสั่งล้มเหลวหากการอัปเดตไม่ใช่การส่งต่ออย่างรวดเร็วคุณเพียงแค่ใช้ refspec ของแบบฟอร์ม
git fetch <remote> <remoteBranch>:<localBranch>
หากคุณต้องการอนุญาตการอัปเดตที่ไม่ใช่การส่งต่อคุณต้องเพิ่ม a +
ที่ด้านหน้าของ refspec:
git fetch <remote> +<remoteBranch>:<localBranch>
โปรดทราบว่าคุณสามารถส่งผ่าน repo ท้องถิ่นของคุณเป็นพารามิเตอร์ "ระยะไกล" โดยใช้.
:
git fetch . <sourceBranch>:<destinationBranch>
เอกสารประกอบ
จากgit fetch
เอกสารที่อธิบายเกี่ยวกับไวยากรณ์นี้ (การเน้นของฉัน):
<refspec>
รูปแบบของ<refspec>
พารามิเตอร์เป็นบวกตัวเลือก+
ตามด้วยเตะแหล่งที่มา<src>
, ตามด้วยเครื่องหมายตามด้วยเตะปลายทาง:
<dst>
ได้รับเตะแมตช์ระยะไกลที่<src>
เป็นความจริงและถ้า<dst>
ไม่ได้เป็นสตริงที่ว่างเปล่า, <src>
ได้รับเตะท้องถิ่นที่ตรงกับมันเป็นอย่างรวดเร็วส่งต่อโดยใช้ หากใช้เครื่องหมายบวก+
เป็นทางเลือกการอ้างอิงในท้องถิ่นจะได้รับการอัปเดตแม้ว่าจะไม่ส่งผลให้มีการอัปเดตอย่างรวดเร็ว
ดูสิ่งนี้ด้วย
ชำระเงิน Git และผสานโดยไม่ต้องสัมผัสต้นไม้ทำงาน
ผสานโดยไม่ต้องเปลี่ยนไดเรกทอรีทำงาน