Git - กดทางลัดสาขาปัจจุบัน


363

มีทางลัดที่จะบอก Git ให้ผลักดันสาขาการติดตามปัจจุบันให้กำเนิดหรือไม่?
หมายเหตุ:ฉันรู้ว่าฉันสามารถเปลี่ยนพฤติกรรมการกดเริ่มต้นได้ แต่ฉันกำลังมองหาโซลูชัน Ad-hoc ที่ไม่ได้เปลี่ยนพฤติกรรมเริ่มต้น

ตัวอย่างเช่นสมมติว่าฉันอยู่ในสาขา feature/123-sandbox-testsฉันจะใช้

git push origin feature/123-sandbox-tests

ซึ่งน่าเบื่อ ฉันกำลังมองหาทางลัดบางอย่างเช่น

git push origin current

ตำแหน่งที่ git รู้ว่าปัจจุบันคืออะไร feature/123-sandbox-testsอะไร


แก้ไข : เริ่มต้นจากรุ่น 2.0 เริ่มต้นของคอมไพล์พฤติกรรมได้เปลี่ยนเป็นพฤติกรรมที่ใช้งานง่ายขึ้นซึ่งเป็นสิ่งที่ฉันต้องการที่จะบรรลุ ดูคำถาม SO นี้เพื่อดูรายละเอียด

แก้ไข 2 : คำตอบของ ceztko เป็นคำตอบที่ดีที่สุดเพราะสามารถผลักดันสาขาปัจจุบันโดยไม่คำนึงถึงการตั้งค่า

คำตอบ:


702

ตามgit pushเอกสาร:

git push origin HEAD
    A handy way to push the current branch to the same name on the remote.

git push origin HEADดังนั้นผมคิดว่าสิ่งที่คุณต้องการ นอกจากนี้ยังมีประโยชน์git push -u origin HEADในการตั้งค่าข้อมูลการติดตามต้นน้ำในสาขาท้องถิ่นหากคุณยังไม่ได้ผลักไปที่ต้นกำเนิด


11
ฉันชอบสิ่งนี้มากกว่าการตั้งค่า push.default เป็นแบบง่ายหรือเป็นปัจจุบันเพราะเครื่องที่แตกต่างกันอาจมีการตั้งค่าที่แตกต่างกัน คุณอาจเคยชินกับการgit pushผลักสาขาปัจจุบัน แต่ในเครื่องอื่นคุณอาจดันสาขาที่ตรงกันทั้งหมดโดยไม่ตั้งใจ
wisbucky

1
@wuckyucky ฉันมีชื่อแทนหลายรายการรวมถึงcoดังนั้นถ้าฉันพยายามที่จะดึงลงมาแล้วตรวจสอบรหัสโดยไม่ต้องใช้~/.gitconfigไฟล์ของฉันบน VM นั้นฉันจะรู้ทันที upstreamที่ช่วยให้ฉันรู้สึกปลอดภัยสวยเกี่ยวกับการเปลี่ยนค่าเริ่มต้นผลักดันไป
Damon

9
ที่น่าสนใจที่ว่านี้ไม่ได้ทำงานกับเพียงซึ่งเป็นเอกสารที่เป็นนามแฝงที่ถูกต้อง@ HEAD(เช่นgit push -u origin @)
void.pointer

197

คุณสามารถกำหนดค่า gitเพื่อส่งไปยังสาขาปัจจุบันโดยใช้คำสั่งต่อไปนี้

git config --global push.default current

จากนั้นก็ทำ

git push 

สิ่งนี้จะผลักรหัสไปยังสาขาปัจจุบันของคุณ


มันสมเหตุสมผลหรือไม่ที่จะเพิ่มpush = refs/heads/current:refs/for/master/currentไปยังส่วน 'remote' ใน. git / config นั่นคือคำว่า 'ปัจจุบัน' เป็นคำพิเศษหรือไม่ หรือจะมองหาสาขาที่เรียกว่า "ปัจจุบัน"
David Doria

6
@DavidDoria 'current' ไม่ใช่สาขาที่ตั้งไว้ที่นี่
Mahesh

วิธีที่ดีที่สุดgit push -u origin feature_branch_nameในการตั้งค่าอัปสตรีม / การติดตาม! หากคุณใช้ที่เก็บระยะไกลอย่างน้อย
Flo

40

คุณควรดูคำถามที่คล้ายกันใน พฤติกรรมเริ่มต้นของ "git push" โดยไม่ระบุสาขา

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

git config --global push.default current

ตัวเลือกอื่น:

  • ไม่มีอะไร : อย่าผลักอะไรเลย
  • การจับคู่ : กดสาขาที่ตรงกันทั้งหมด
  • ต้นน้ำ / การติดตาม : ผลักสาขาปัจจุบันไปยังสิ่งที่กำลังติดตาม
  • ปัจจุบัน : กดสาขาปัจจุบัน

11

ฉันใช้นามแฝงดังกล่าวในการตั้งค่า. bashrc ของฉัน

alias gpb='git push origin `git rev-parse --abbrev-ref HEAD`'

ในการออกคำสั่ง $gpbมันใช้ชื่อสาขาปัจจุบันและผลักดันมันไปยังแหล่งกำเนิด

นี่คือนามแฝงอื่น ๆ ของฉัน:

alias gst='git status'
alias gbr='git branch'
alias gca='git commit -am'
alias gco='git checkout'

8

ทางลัดที่ดีที่สุดสำหรับสิ่งที่ควรค่า:

ในฉัน.bash_profileฉันมีalias push="git push origin HEAD"ดังนั้นเมื่อใดก็ตามที่ฉันพิมพ์pushฉันรู้ว่าฉันกำลังผลักดันให้สาขาปัจจุบันที่ฉันกำลัง


6

หากคุณใช้ git 1.7.x คุณสามารถเรียกใช้คำสั่งต่อไปนี้เพื่อตั้งสาขาการติดตามระยะไกล

git branch --set-upstream feature/123-sandbox-tests origin/feature/123-sandbox-tests

จากนั้นคุณสามารถใช้git pushเพื่อผลักดันการเปลี่ยนแปลงทั้งหมด สำหรับคำตอบที่สมบูรณ์ยิ่งขึ้นโปรดดูคำตอบที่ยอมรับสำหรับคำถามที่คล้ายกันที่นี่

หากคุณต้องการผลักสาขาปัจจุบันด้วยคำสั่ง push เท่านั้นคุณสามารถเปลี่ยนลักษณะการทำงานพุชเป็นอัปสตรีม:

git config --global push.default upstream

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

ฉันได้แก้ไขคำตอบโปรดดูที่ลิงก์คำตอบนั้นสมบูรณ์ยิ่งขึ้น
Faruk Sahin

ปัญหาก็คือทุกสาขาที่กำลังติดตามสาขากำลังถูกผลักไปในทางนั้น ดังที่ฉันเขียนในคำถามของฉันสาขาเป็นสาขาที่ถูกติดตามในตอนแรกดังนั้นฉันคิดว่าการตั้งสาขาต้นน้ำตามที่คุณแนะนำนั้นซ้ำซ้อน หรือฉันผิด
Elad

จากนั้นคุณสามารถกำหนดค่า git เพื่อผลักดันเฉพาะสาขาปัจจุบันโดยการเปลี่ยนพฤติกรรมการผลักดัน git git config --global push.default upstreamจะตั้งค่าพฤติกรรมการพุชให้กดเฉพาะสาขาปัจจุบัน
Faruk Sahin

5

วิธีที่ง่ายที่สุด: รันgit push -u origin feature/123-sandbox-testsครั้งเดียว สิ่งนี้จะผลักดันให้สาขาต่าง ๆ ในแบบที่คุณเคยทำและตั้งค่าข้อมูลการติดตามอัปสตรีมในการกำหนดค่าท้องถิ่นของคุณ หลังจากนั้นคุณสามารถgit pushผลักดันกิ่งไม้ที่ถูกติดตามไปยังรีโมทอัปสตรีมของพวกเขาได้

คุณยังสามารถทำสิ่งนี้ได้ในการกำหนดค่าด้วยตัวคุณเองโดยการตั้งค่าbranch.<branch name>.mergeเป็นชื่อสาขาระยะไกล (ในกรณีของคุณเหมือนกับชื่อท้องถิ่น) และเป็นทางเลือกbranch.<branch name>.remoteสำหรับชื่อของรีโมทที่คุณต้องการกด (ค่าเริ่มต้นถึงต้นทาง) หากคุณดูการกำหนดค่าของคุณมีอยู่แล้วหนึ่งในชุดเหล่านี้เพื่อmasterให้คุณสามารถทำตามตัวอย่างนั้น

สุดท้ายให้แน่ใจว่าคุณพิจารณาการpush.defaultตั้งค่า มันเริ่มต้นที่ "จับคู่" ซึ่งสามารถมีผลลัพธ์ที่ไม่พึงประสงค์และไม่คาดคิด คนส่วนใหญ่ฉันรู้ว่าพบ "ต้นน้ำ" ใช้งานง่ายมากขึ้นซึ่งผลักดันเฉพาะสาขาปัจจุบัน

รายละเอียดเกี่ยวกับการตั้งค่าแต่ละเหล่านี้สามารถพบได้ในหน้าคน Git-config

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

function pushCurrent {
  git config push.default upstream
  git push
  git config push.default matching
}

1

ด้วยความช่วยเหลือของคำตอบของ ceztko ฉันได้เขียนฟังก์ชันตัวช่วยเล็ก ๆ นี้เพื่อทำให้ชีวิตของฉันง่ายขึ้น:

function gpu()
{
    if git rev-parse --abbrev-ref --symbolic-full-name @{u} > /dev/null 2>&1; then
        git push origin HEAD
    else
        git push -u origin HEAD
    fi
}

มันผลักสาขาปัจจุบันไปยังต้นกำเนิดและยังตั้งสาขาติดตามระยะไกลหากยังไม่ได้ตั้งค่า

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