ฉันจะเปลี่ยนชื่อทั้งชื่อท้องถิ่นและสาขาของ Git ในระยะไกลได้อย่างไร


458

ฉันมีสี่สาขาเช่น master -> origin / regacy, FeatureA -> origin / FeatureA อย่างที่คุณเห็นฉันพิมพ์ชื่อผิด

ดังนั้นฉันจึงต้องการเปลี่ยนชื่อชื่อสาขาระยะไกล (Origin / regacy → origin / legacy หรือ origin / master)

ฉันลองคำสั่งด้านล่าง:

git remote rename regacy legacy

แต่คอนโซล Git ส่งคืนข้อความแสดงข้อผิดพลาดให้ฉัน

 error : Could not rename config section 'remote.regacy' to 'remote.legacy'

ฉันจะแก้ปัญหานี้ได้อย่างไร




คำตอบ:


812

ป้อนคำอธิบายภาพที่นี่


มีหลายวิธีที่จะทำให้สำเร็จได้:

  1. เปลี่ยนสาขาในพื้นที่ของคุณแล้วผลักดันการเปลี่ยนแปลงของคุณ
  2. ผลักสาขาไปยังรีโมทด้วยชื่อใหม่ในขณะที่รักษาชื่อดั้งเดิมไว้

การเปลี่ยนชื่อโลคัลและรีโมต

# Rename the local branch to the new name
git branch -m <old_name> <new_name>

# Delete the old branch on remote - where <remote> is, for example, origin
git push <remote> --delete <old_name>

# Or shorter way to delete remote branch [:]
git push <remote> :<old_name>

# Push the new branch to remote
git push <remote> <new_name>

# Reset the upstream branch for the new_name local branch
git push <remote> -u <new_name>

ป้อนคำอธิบายภาพที่นี่


เปลี่ยนชื่อสาขาระยะไกลเท่านั้น

เครดิต: ptim

# In this option, we will push the branch to the remote with the new name
# While keeping the local name as is
git push <remote> <remote>/<old_name>:refs/heads/<new_name> :<old_name>

โน๊ตสำคัญ:

เมื่อคุณใช้git branch -m(ย้าย) Git จะอัปเดตสาขาการติดตามของคุณด้วยชื่อใหม่

git remote rename legacy legacy

git remote renameกำลังพยายามอัปเดตส่วนระยะไกลของคุณในไฟล์กำหนดค่าของคุณ มันจะเปลี่ยนชื่อรีโมตโดยใช้ชื่อที่กำหนดเป็นชื่อใหม่ แต่ในกรณีของคุณมันไม่พบสิ่งใดดังนั้นการเปลี่ยนชื่อล้มเหลว

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


หมายเหตุ เซิร์ฟเวอร์ Git อาจอนุญาตให้คุณเปลี่ยนชื่อสาขา Git โดยใช้เว็บอินเตอร์เฟสหรือโปรแกรมภายนอก (เช่น Sourcetree เป็นต้น) แต่คุณต้องจำไว้ว่าใน Git ทำงานทั้งหมดในเครื่องดังนั้นขอแนะนำให้ใช้คำสั่งข้างต้น ในการทำงาน


คุณยังคงต้องทำอะไรบางอย่างหลังจากข้างต้นและเมื่อฉันพยายามที่จะดึงฉันได้รับข้อความ:Your configuration specifies to merge with the ref ''refs/heads/old_name'
Krzysztof Kraso18

6
อย่าลืมที่จะยกเลิกการอัปสตรีมเก่า:git checkout <new_name> ; git branch --unset-upstream
มิเกลปิง

2
@ ข้อคิดเห็นของ MiguelPing นั้นสำคัญ เมื่อพยายามที่จะเปลี่ยนชื่อสาขาฉันได้ผลักดันให้เป็น github, ลบ, เปลี่ยนชื่อท้องถิ่นและมันก็ผลักผลลัพธ์ในชื่อเก่าที่ใช้อีกครั้ง ถ้าฉัน--unset-upstreamก่อนกดอีกครั้งมันทำงานตามที่ตั้งใจไว้
Adam Tuttle

1
มีวิธีใดบ้างที่จะหลีกเลี่ยงการปิด PRs ที่เปิดโดยอัตโนมัติในสาขาชื่อเก่าบนรีโมทได้หรือไม่? ต้องเผชิญกับสิ่งนี้ใน gitlab ที่ประชาสัมพันธ์เกี่ยวกับชื่อสาขาเก่าถูกปิดหลังจากผลักไปที่ต้นกำเนิด
Himanshu Tanwar

142

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

  1. เปลี่ยนชื่อสาขาท้องถิ่นของคุณ:

    • หากคุณอยู่ในสาขาที่คุณต้องการเปลี่ยนชื่อ:
      git branch -m new-name

    • หากคุณอยู่ในสาขาอื่น:
      git branch -m old-name new-name

  2. ลบold-nameสาขาระยะไกลและผลักดันnew-nameสาขาท้องถิ่น :
    git push origin :old-name new-name

  3. รีเซ็ตสาขาอัพสตรีมสำหรับสาขาโลคัลชื่อใหม่ :
    สลับไปที่สาขาแล้ว:
    git push origin -u new-name


1
หลังจาก 2 ขั้นตอนแรกหากคุณได้รับข้อความแสดงข้อผิดพลาดเกี่ยวกับคะแนนสาขาปัจจุบันไปยังสาขาที่ไม่มีอยู่ใน repo ระยะไกลขั้นตอนที่ 3 แก้ไขสิ่งนี้
Kevin Hooke

1
@ Dr1Ku จำเป็นต้องทราบความแตกต่างระหว่างgit push <remote> --delete old_name& git push origin :old-name new-nameเพื่อลบสาขา
Ashutosh Chamoli

ผู้ใช้ BitBucket: แก้ไขข้อผิดพลาดในขั้นตอนที่ 2 หากเปลี่ยนชื่อmasterใน Repo Details ตั้งค่าสาขาเริ่มต้นเป็นสาขาใหม่ ข้อผิดพลาดคือ:By default, deleting the current branch is denied, because the next 'git clone' won't result in any file checked out, causing confusion. You can set 'receive.denyDeleteCurrent' configuration variable to 'warn' or 'ignore' in the remote repository to allow deleting the current branch, with or without a warning message. To squelch this message, you can set it to 'refuse'. error: refusing to delete the current branch: refs/heads/master
Colin

ง่ายที่สุดในบรรดาคนอื่น ๆ
Abdulla Nilam

37

ดูเหมือนว่าจะมีวิธีการโดยตรง:

หากคุณต้องการเปลี่ยนชื่อสาขาจากระยะไกล (โดยไม่ต้องเปลี่ยนสาขาใด ๆ ในเวลาเดียวกัน) คุณสามารถทำได้ด้วยคำสั่งเดียวเช่น

git push <remote> <remote>/<old_name>:refs/heads/<new_name> :<old_name>

การเปลี่ยนชื่อสาขาจากระยะไกลใน Git

ดูคำตอบต้นฉบับสำหรับรายละเอียดเพิ่มเติม


1
ใช้งานไม่ได้ในคอมไพล์2.20.1ลบสาขาเก่า แต่สาขาใหม่ไม่ได้ถูกสร้างขึ้น
Paul Razvan Berg

26

มันสามารถทำได้ด้วยวิธีต่อไปนี้

เมื่อเปลี่ยนชื่อสาขาท้องถิ่นแล้วสาขาระยะไกล

เปลี่ยนชื่อสาขาท้องถิ่น:

หากลงชื่อเข้าใช้ในสาขาอื่น

git branch -m old_branch new_branch 

หากเข้าสู่ระบบในสาขาเดียวกัน

git branch -m new_branch

การเปลี่ยนชื่อสาขาระยะไกล:

git push origin :old_branch    // Delete the remote branch

git push --set-upstream origin new_branch   // Create a new remote branch

5

หากคุณได้ผลักชื่อผิดไปยังระยะไกลทำต่อไปนี้:

  1. เปลี่ยนเป็นสาขาท้องถิ่นที่คุณต้องการเปลี่ยนชื่อ

    git checkout <old_name>

  2. เปลี่ยนชื่อสาขาท้องถิ่น

    git branch -m <new_name>

  3. ผลัก<new_name>สาขาในท้องถิ่นและรีเซ็ตสาขาต้นน้ำ

    git push origin -u <new_name>

  4. ลบ<old_name>สาขาระยะไกล

    git push origin --delete <old_name>

นี้ขึ้นอยู่กับบทความนี้


4

การแนบSnippetอย่างง่ายสำหรับการเปลี่ยนชื่อสาขาปัจจุบันของคุณ (ภายในเครื่องและที่ต้นทาง):

git branch -m <oldBranchName> <newBranchName>
git push origin :<oldBranchName>
git push --set-upstream origin <newBranchName>

คำอธิบายจาก git docs:

git branch -mหรือ -M ตัวเลือกจะถูกเปลี่ยนชื่อเป็น หากมีการอ้างอิงที่สอดคล้องกันรายการนั้นจะถูกเปลี่ยนชื่อให้ตรงกันและมีการสร้างรายการ reflog เพื่อจดจำการเปลี่ยนชื่อสาขา หากมีอยู่จะต้องใช้ -M เพื่อบังคับให้เปลี่ยนชื่อเกิดขึ้น

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

- เซ็ตอัพสตรีมตั้งค่าข้อมูลการติดตามดังนั้นจึงถือเป็นสาขาอัพสตรีม หากไม่ได้ระบุไว้มันจะมีค่าเริ่มต้นเป็นสาขาปัจจุบัน


3

ไม่มีวิธีโดยตรง

  1. เปลี่ยนชื่อสาขาท้องถิ่น ,

    สาขาปัจจุบันของฉันคือต้นแบบ

    git branch -m master_renamed #master_renamed เป็นชื่อใหม่ของปรมาจารย์

  2. ลบสาขาระยะไกล

    git push origin --delete master #origin คือ remote_name

  3. ผลักดันการเปลี่ยนชื่อสาขาเป็นระยะไกล

    git push origin master_renamed

แค่นั้นแหละ...


ดีและเรียบง่ายและเพียง 3 ขั้นตอน การปรับปรุงเท่านั้นที่ฉันสามารถแนะนำได้คือgit push -u origin master_renamedการตั้งสาขาเป็นสาขาการติดตาม
ut9081

2

สิ่งนี้สามารถทำได้โดยไม่ต้องเปลี่ยนชื่อสาขาในสามขั้นตอนง่ายๆ:

  1. ไปที่พื้นที่เก็บข้อมูลของคุณใน GitHub
  2. สร้างสาขาใหม่จากสาขาเก่าที่คุณต้องการเปลี่ยนชื่อ
  3. ลบสาขาเก่า

0

ฉันใช้นามแฝง git เหล่านี้และมันทำงานโดยอัตโนมัติ:

git config --global alias.move '!git checkout master; git branch -m $1 $2; git status; git push --delete origin $1; git status; git push -u origin $2; git branch -a; exit;'

การใช้งาน: git move FROM_BRANCH TO_BRANCH

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


0

ฉันต้องทำงานต่อไปนี้เพื่อเปลี่ยนชื่อสาขาในพื้นที่และระยะไกล:

# Rename the local branch to the new name
git branch -m <old_name> <new_name>

#  Delete the old remote branch
git push origin --delete <old_name>

# push to new remote branch - creates new remote branch
git push origin <new_name>

# set new remote branch as default remote branch for local branch
git branch --set-upstream-to=origin/<new_name> <new_name>

แตกต่างจากคำตอบที่มีอยู่อย่างไร
Himanshu Tanwar

0
  1. เปลี่ยนชื่อสาขาท้องถิ่นของคุณ หากคุณอยู่ในสาขาที่คุณต้องการเปลี่ยนชื่อ:

    git branch -m new-name

หากคุณอยู่ในสาขาอื่น:

git branch -m old-name new-name
  1. ลบสาขาระยะไกลชื่อเก่าและผลักดันสาขาท้องถิ่นชื่อใหม่

    git push กำเนิด: ชื่อเก่าชื่อใหม่

  2. รีเซ็ตสาขาต้นน้ำสำหรับสาขาท้องถิ่นที่มีชื่อใหม่ เปลี่ยนเป็นสาขาแล้ว:

    git push กำเนิด -u ชื่อใหม่

ทุกชุด!


0
  • เปลี่ยนชื่อสาขาในประเทศของคุณ

หากคุณอยู่ในสาขาที่คุณต้องการเปลี่ยนชื่อ:

git branch -m new-name

หากคุณอยู่ในสาขาอื่น ณ เวลาปัจจุบัน:

git branch -m old-name new-name
  • ลบสาขาระยะไกลชื่อเก่าและผลักดันสาขาท้องถิ่นชื่อใหม่

อยู่ในกลุ่มเป้าหมายและ:

git push origin :old-name new-name
  • รีเซ็ตสาขาต้นน้ำสำหรับสาขาท้องถิ่นที่มีชื่อใหม่

เปลี่ยนเป็นสาขาเป้าหมายแล้ว:

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