คุณจะผลักสาขา Git เดียว (และไม่มีสาขาอื่น) ได้อย่างไร


247

ฉันกำลังทำงานในพื้นที่เก็บข้อมูลคอมไพล์ท้องถิ่น มีสองสาขาmasterและfeature_x.

ฉันต้องการที่จะผลักดันfeature_xไปยัง repo ระยะไกล แต่ฉันไม่ต้องการที่จะผลักดันการเปลี่ยนแปลงในmasterสาขา

พินัยกรรมgit push origin feature_xจากฉันfeature_xสาขา ( feature_xสาขาที่มีอยู่แล้วในระยะไกล) ทำงานหรือไม่

ฉันไม่ต้องการที่จะทดสอบสิ่งนี้ในกล่องของฉันเพราะฉันไม่สามารถผลักดันให้โทตอนนี้


ลองดูที่นี่: รีโมตและที่นี่: ดันกิ่งก้านไปยัง GitHubเสียงเหมือนใช้งานได้
อัล

คำตอบ:


376

ใช่เพียงทำต่อไปนี้

git checkout feature_x
git push origin feature_x

54
ด้วย git ที่ทันสมัยคุณควรจะสามารถ "git push head HEAD" หรือแม้แต่ "git push HEAD" เพื่อกดเฉพาะสาขาที่เช็คเอาท์ในปัจจุบัน
Jakub Narębski

2
จำเป็นต้องชำระเงินเพื่อ feature_x หรือไม่
hd

5
ใช่เพราะถ้าคุณอยู่ในระดับปริญญาโทมันจะพยายามผลักสาขาหลักท้องถิ่นไปยังสาขาระยะไกล feature_x เพื่อไม่ต้องชำระเงินก่อนอื่นคุณจะต้องทำ "git push source feature_x: feature_x"
cpjolicoeur

1
@cpjolicoeur ผมเห็นในคำถามอื่น ๆ (เช่น: ที่นี่ ) git push -u origin <branch-name>พวกเขากำลังทำ อย่างไรก็ตามคุณไม่ได้พูดถึงมัน จำเป็นหรือไม่
riroo

3
@miss_R -uตัวเลือกในgit-pushคำสั่งจะตั้งค่าการอ้างอิงต้นน้ำสำหรับการติดตามสาขาที่เพิ่งผลัก สิ่งนี้จะทำให้สิ่งต่าง ๆ เช่นgit-pullในสาขานั้นในอนาคตรู้แล้วว่าจะดึงสาขาไหนโดยไม่ได้ระบุ ไม่จำเป็นต้องเป็นตัวเลือกในการผลักดันสาขาเดียว แต่มีการใช้อย่างกว้างขวางเนื่องจากผู้คนจำนวนมากต้องการทำให้สาขาในพื้นที่ติดตามสาขาระยะไกลที่พวกเขากำลังผลักดัน
cpjolicoeur

74

โดยค่าเริ่มต้นgit pushการปรับปรุงสาขาระยะไกลทั้งหมด แต่คุณสามารถกำหนดค่า git เพื่ออัปเดตเฉพาะสาขาปัจจุบันไปที่ upstream

git config push.default upstream

หมายความว่า git จะอัปเดตเฉพาะสาขาปัจจุบัน (เช็คเอาท์) สาขาเมื่อคุณกด git

ตัวเลือกที่ถูกต้องอื่น ๆ คือ:

  • nothing: ไม่ได้ผลักดันอะไร (ข้อผิดพลาดออก) เว้นแต่refspec จะได้รับอย่างชัดเจน สิ่งนี้มีไว้สำหรับผู้ที่ต้องการหลีกเลี่ยงความผิดพลาดเป็นหลักโดยชัดเจน
  • matching: ดันสาขาทั้งหมดที่มีชื่อเดียวกันทั้งสองด้าน (ตัวเลือกเริ่มต้นก่อน Ver 1.7.11)
  • upstream: ผลักสาขาปัจจุบันไปยังสาขาต้นน้ำ โหมดนี้เหมาะสมถ้าคุณกำลังผลักดันไปยังพื้นที่เก็บข้อมูลเดียวกับที่คุณมักจะดึงจาก (เช่นเวิร์กโฟลว์กลาง ) ไม่จำเป็นต้องมีชื่อเดียวกันสำหรับสาขาในพื้นที่และระยะไกล
  • tracking: เลิกใช้แล้วใช้upstreamแทน
  • current: กดสาขาปัจจุบันไปยังสาขาระยะไกลที่มีชื่อเดียวกันที่ปลายรับ ทำงานได้ทั้งในส่วนกลางและไม่ใช่เวิร์กโฟลว์
  • simple: [ใช้ได้ตั้งแต่ Ver 1.7.11] ในเวิร์กโฟลว์แบบรวมศูนย์ทำงานupstreamด้วยความปลอดภัยเพิ่มเติมเพื่อปฏิเสธที่จะผลักดันหากชื่อของสาขาต้นน้ำแตกต่างจากในพื้นที่ currentเมื่อผลักดันที่จะห่างไกลที่แตกต่างจากระยะไกลได้โดยปกติคุณจะดึงจากการทำงานเป็น นี่คือตัวเลือกที่ปลอดภัยที่สุดและเหมาะสำหรับผู้เริ่มต้น โหมดนี้เป็นค่าเริ่มต้นใน Git 2.0

2
ขอบคุณcurrentเป็นสิ่งที่ฉันกำลังมองหาโดยค่าเริ่มต้นgit pushในfooสาขาจะผลักดันให้origin/fooสาขา
Dorian

@Dorian ขอบคุณฉันเห็นด้วยที่currentเหมาะสมกว่าเป็นค่าเริ่มต้น
Zoltán

@Dorian, @ Zoltán - ฉันรู้สึกsimpleเหมาะสมกว่าเป็นค่าเริ่มต้น ฉันได้อัปเดตคำตอบด้วย 'เมื่อใช้อะไร' กรุณาดู
Karthik Bose

1
หมายเหตุ: ตั้งแต่รุ่นคอมไพล์ 2 simpleคุ้มค่าเริ่มต้นที่มีการเปลี่ยนแปลงไป
Danijel

8

การอัปเดตเล็กน้อยที่ด้านบนของคำตอบของKarthik Bose - คุณสามารถกำหนดค่า git ได้ทั่วโลกเพื่อส่งผลกระทบต่อพื้นที่ทำงานทั้งหมดของคุณเพื่อดำเนินการดังนี้:

git config --global push.default upstream

อัปสตรีมไม่ได้รับการยอมรับว่าเป็นการตั้งค่าที่ถูกต้องสำหรับฉันต้องใส่ 'ปัจจุบัน' แทน
ตั๊กแตน

-2

สมมติว่าคุณมีสาขาในท้องที่ที่เรียกว่าต้นกำเนิดจากระยะไกลและต้นกำเนิด / ต้นแบบสาขาระยะไกล

ในการผลักดันเนื้อหาของ foo ไปยังจุดเริ่มต้น / หลักคุณต้องตั้งค่า upstream ก่อน:

git checkout foo
git branch -u origin/master

จากนั้นคุณสามารถกดไปที่สาขานี้โดยใช้:

git push origin HEAD:master

ในคำสั่งสุดท้ายคุณสามารถเพิ่ม - บังคับให้เปลี่ยนประวัติต้นกำเนิด / หลักทั้งหมดด้วยคำว่า foo

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