git push ไปยังสาขาเฉพาะ


106

แม้ว่าหลังจากอ่านคำถามนี้แล้ว: git-push-current-branchฉันยังคงมีปัญหาในการหาวิธีเขียนคำสั่ง git push ตามที่ระบุไว้ในลิงก์คำถามไม่ชัดเจนจากเอกสารประกอบ

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

ในสาขา amd_qlp_tester

สาขาของคุณอยู่ข้างหน้า 'origin / amd_qlp_tester' โดย 5 คอมมิต

ฯลฯ ...

ดังนั้นชื่อสาขาของฉันจึงเป็นamd_qlp_testerแต่ "แยก" ออกจากสาขาหลัก (ถ้าฉันมีคำผิดก็เป็นเพราะพื้นหลัง SVN ของฉัน) แต่ก็มีชื่อʻorigin / amd_qlp_testser 'ด้วย

แล้วฉันจะพูดคำสั่ง push ของฉันได้อย่างไร?

เป็นสิ่งต่อไปนี้หรือไม่:

git push origin/amd_qlp_tester
git push origin amd_qlp_tester
git push amd_qlp_tester
git push origin
git push

คำตอบ:


94

git push origin amd_qlp_testerจะทำงานให้คุณ หากคุณเพิ่งพิมพ์git pushรีโมตของสาขาปัจจุบันจะเป็นค่าเริ่มต้น

ไวยากรณ์ของการผลักดันลักษณะเช่นนี้ git push <remote> <branch>- หากคุณดูที่รีโมตใน.git/configไฟล์คุณจะเห็นรายการ[remote "origin"]ที่ระบุ url ของที่เก็บ ดังนั้นในส่วนแรกของคำสั่งคุณจะบอก Git ว่าจะหาที่เก็บสำหรับโปรเจ็กต์นี้ได้ที่ไหนจากนั้นคุณก็ระบุสาขา


ขอบคุณสำหรับสิ่งนั้น :) คุณสามารถอธิบายได้ไหมว่าทำไมคำเหล่านี้จึงเป็น "คำ" สองคำที่แยกจากกันเมื่อคำอธิบายสถานะ dit แสดงเป็นพา ธ นั่นคือทำไมจึงorigin amd_qlp_testserไม่ใช่origin/amd_qlp_tester
code_fodder

"ระยะไกล" เริ่มต้นจะขึ้นอยู่กับการกำหนดค่าของสาขาปัจจุบัน (ในกรณีนี้จะเป็นoriginเช่นนั้น) branch (es) เพื่อผลักค่าเริ่มต้น (ใน git เวอร์ชันปัจจุบัน) ไปที่:if unset ซึ่งหมายความว่าmatchingแต่จะมีการเปลี่ยนแปลงในอนาคต
torek

ฉันสับสนเล็กน้อยฉันใช้ v2.10 เมื่อฉันพิมพ์git pushพยายามที่จะผลักดันสาขาที่ติดตามทั้งหมดซึ่งตรงกันข้ามกับที่คุณพูด ("ระยะไกลของสาขาปัจจุบันคือค่าเริ่มต้น")
Roberto

Git 2.x ควรใช้simpleกลยุทธ์การผลักดันซึ่งหมายความว่าจะผลักดันเฉพาะสาขาปัจจุบัน blogs.atlassian.com/2014/06/happened-git-2-0-full-goodies
Petr Mensik

fatal: Couldn't find remote ref branch-name-here
doug65536

121

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

git push origin branchName

เมื่อชื่อสาขาในพื้นที่และระยะไกลของคุณแตกต่างกันคุณสามารถทำได้:

git push origin localBranchName:remoteBranchName

สิ่งนี้มีประโยชน์มากหายาก :)
Pe Dro

ใช่คุณพูดถูกยังยากที่จะจำ!
Imranmadbar

8

คำตอบในคำถามที่คุณเชื่อมโยงไปนั้นเกี่ยวกับการกำหนดค่า git เพื่อให้คุณสามารถป้อนgit pushคำสั่งสั้น ๆและให้พวกเขาทำอะไรก็ได้ ซึ่งดีมากถ้าคุณรู้ว่าคุณต้องการอะไรและจะสะกดอย่างไรใน Git-Ese แต่คุณยังใหม่กับ git! :-)

ในกรณีของคุณคำตอบของ Petr Mensikคือ ("a") ที่ถูกต้อง นี่คือเหตุผล:

คำสั่งจะรูทรอบ ๆไฟล์ของคุณเพื่อค้นหา "รีโมต" ที่มีชื่อว่า (เช่น) รายการไฟล์กำหนดค่า:git push remote.git/configorigin

  • โดยที่ (URL-wise) ที่ "มีชีวิต" จากระยะไกล (เช่น)ssh://hostname/path
  • ผลักดันไปที่ไหนถ้าแตกต่างกัน
  • สิ่งที่ผลักดันถ้าคุณไม่ได้บอกว่าจะผลักดันสาขาอะไร
  • สิ่งที่ได้รับเมื่อคุณเรียกใช้ git fetch remote

เมื่อคุณโคลน repo เป็นครั้งแรกเมื่อใดก็ตามที่เป็นเช่นนั้นให้คอมไพล์ตั้งค่าเริ่มต้นสำหรับบางส่วนของสิ่งเหล่านี้ URL คือสิ่งที่คุณโคลนจากและส่วนที่เหลือถ้าตั้งค่าหรือไม่มีการตั้งค่าทั้งหมด "เหตุผล" เริ่มต้นที่ ... หรืออืมเป็นพวกเขา?

ปัญหาเหล่านี้คือผู้คนเปลี่ยนความคิดเมื่อเวลาผ่านไปว่าอะไรคือสิ่งที่ "สมเหตุสมผล" ตอนนี้ (ขึ้นอยู่กับเวอร์ชันของคอมไพล์ของคุณและคุณได้กำหนดค่าสิ่งต่างๆโดยละเอียดหรือไม่) คอมไพล์อาจพิมพ์คำเตือนจำนวนมากเกี่ยวกับค่าเริ่มต้นที่เปลี่ยนแปลงในอนาคต การเพิ่มชื่อของ "branch to push" - amd_qlp_tester- (1) จะเป็นการปิดและ (2) ดันเพียงสาขาเดียว

หากคุณต้องการผลักดันให้สะดวกยิ่งขึ้นคุณสามารถทำได้ด้วย:

git push origin

หรือแม้กระทั่ง:

git push

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

สำหรับชื่อorigin/amd_qlp_testerในตอนแรก: นั่นคือหน่วยงานท้องถิ่น (ชื่อที่เก็บไว้ใน repo ของคุณ) แม้ว่าจะเรียกว่า "remote branch" ก็ตาม เป็นการเดาที่ดีที่สุดของ git ที่ "ที่amd_qlp_testerอยู่ที่นั่น" Git ปรับปรุงมันเมื่อมันสามารถ


1
ขอบคุณสำหรับคำอธิบายฉันคิดว่าตอนนี้ฉันเข้าใจแล้ว ฉันชอบที่จะแม่นยำดังนั้นฉันจะยึดติดgit push origin amd_qlp_testerจนกว่าฉันจะต้องทำสิ่งที่ก้าวหน้ากว่านี้ :)
code_fodder

2

ฉันต้องการเพิ่มคำตอบที่อัปเดต - ตอนนี้ฉันใช้ git มาระยะหนึ่งแล้วฉันพบว่าฉันมักใช้คำสั่งต่อไปนี้เพื่อทำการ push ใด ๆ (โดยใช้คำถามเดิมเป็นตัวอย่าง):

  • git push origin amd_qlp_tester- ผลักดันไปยังสาขาที่อยู่ในระยะไกลที่เรียกว่าบนรีโมทสาขาที่เรียกว่าoriginamd_qlp_tester
  • git push -u origin amd_qlp_tester- เช่นเดียวกับรายการสุดท้าย แต่ตั้งค่าการเชื่อมโยงต้นน้ำที่เชื่อมโยงสาขาในพื้นที่กับสาขาระยะไกลเพื่อให้คุณสามารถใช้งานgit push/pullได้ในครั้งต่อไปหากยังไม่ได้เชื่อมโยง (ต้องทำเพียงครั้งเดียว)
  • git push - เมื่อคุณตั้งค่าต้นน้ำแล้วคุณสามารถใช้เวอร์ชันที่สั้นกว่านี้ได้

-uตัวเลือกหมายเหตุเป็นเวอร์ชันสั้น--set-upstream- เหมือนกัน

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