เปลี่ยนชื่อสาขาใน GitHub


296

ฉันเพิ่งเปลี่ยนชื่อสาขาในท้องถิ่นของฉันโดยใช้

git branch -m oldname newname

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


5
สำเนาซ้ำซ้อนของgit ที่
Andrew Marshall

คุณได้ตรวจสอบในการตั้งค่าผู้ดูแลระบบหรือไม่? โครงการปัจจุบันของฉันบน github ไม่มีสาขาใด ๆ แต่คุณสามารถเปลี่ยนชื่อ repo ได้ดังนั้นฉันคิดว่าคุณสามารถเปลี่ยนชื่อสาขาได้เช่นกัน
evanmcdonnal

12
@evanmcdonnal Nope คุณไม่สามารถเปลี่ยนชื่อสาขา Git จากเว็บไซต์ GitHub
Andrew Marshall

คำตอบสำหรับคำถามนี้เกือบผิดสากล คำถามไม่ใช่วิธีเปลี่ยนชื่อสาขา git แต่เป็นวิธีเปลี่ยนชื่อสาขาgitub หลายสิ่งใน github นั้นเชื่อมโยงกับสาขาซึ่งหมายความว่าคำตอบใด ๆ ที่จำเป็นต้องครอบคลุมสิ่งเหล่านั้น ตัวอย่างเช่นการเปลี่ยนชื่อมาสเตอร์เป็นmain
gman

@gman สำหรับสิ่งที่คุ้มค่าดูเหมือนว่าคำตอบเหล่านี้ตอบจิตวิญญาณของคำถามของ OP คำถามของ OP อาจไม่ได้รับการพูดอย่างสมบูรณ์แบบจากมุมมองทางเทคนิคที่เข้มงวดหรือปัญหาที่เกี่ยวข้องที่คุณกำลังพิจารณาอยู่ แต่คำถามนี้ไม่ได้มาจากภูมิหลังทางเทคนิคที่ลึกซึ้งของ git หรือ GitHub จากมุมมองนี้คุณสามารถพิจารณาคำถามนี้ "เริ่มต้น" หรือคำถามเบื้องต้น ด้วยเหตุนี้จึงเป็นถ้อยคำ & ตอบอย่างเหมาะสมสำหรับผู้ชมนี้ ทำลายล้างแน่นอน แต่ฉันคิดว่าคำถามนี้คำตอบเหล่านี้เหมาะสม / เกี่ยวข้องโดยเฉพาะสำหรับการใช้ BLM git / Hub ก่อนใช้งานของ Q
SherylHohman

คำตอบ:


309

ดังที่กล่าวไว้ให้ลบอันเก่าบน Github & re-push ถึงแม้ว่าคำสั่งที่ใช้เป็น verbose มากกว่าที่จำเป็นเล็กน้อย:

git push origin :name_of_the_old_branch_on_github
git push origin new_name_of_the_branch_that_is_local

ง่าย การตัดคำสั่งออกไปเล็กน้อยคำสั่ง git push นั้นเป็นหลัก:

git push <remote> <local_branch>:<remote_branch>

ดังนั้นการกดโดยไม่ระบุ local_branch เป็นหลักหมายความว่า "ไม่ต้องทำอะไรจากที่เก็บในเครื่องของฉันและทำให้มันเป็นสาขาระยะไกล" ฉันมักจะคิดว่านี่เป็นสิ่งที่ไร้ค่าอย่างสมบูรณ์ แต่ก็เป็นวิธีที่ทำ

แก้ไข:ตั้งแต่Git 1.7มีไวยากรณ์ทางเลือกสำหรับการลบสาขาระยะไกล:

git push origin --delete name_of_the_remote_branch

แก้ไข:ตามที่กล่าวถึงโดย @ void.pointer ในความคิดเห็น

โปรดทราบว่าคุณสามารถรวมการกด 2 ครั้ง:

git push origin :old_branch new_branch

นี่จะเป็นการลบสาขาเก่าและผลักสาขาใหม่

สิ่งนี้สามารถเปลี่ยนเป็นนามแฝงง่ายๆที่ใช้รีโมตสาขาดั้งเดิมและชื่อสาขาใหม่เป็นอาร์กิวเมนต์ใน~/.gitconfig:

[alias]
    branchm = "!git branch -m $2 $3 && git push $1 :$2 $3 -u #"

การใช้งาน:

git branchm origin old_branch new_branch

โปรดทราบว่าการขัดแย้งตำแหน่งในคำสั่งเชลล์เป็นปัญหาใน git รุ่นเก่ากว่า (รุ่นก่อน 2.8?) ดังนั้นนามแฝงอาจแตกต่างกันไปตามเวอร์ชัน git ดูการสนทนานี้สำหรับรายละเอียด


32
โปรดทราบว่าคุณสามารถรวมการดำเนินการผลักดันที่ git push origin :old_branch new_branch2: นี่จะเป็นการลบสาขาเก่าและผลักสาขาใหม่
void.pointer

4
มีเหตุผลใดที่ทำให้สาขาใหม่ไม่สามารถผลักดันก่อนที่จะลบสาขาเก่า ฉันชอบกระบวนการที่การลบเกิดขึ้นหลังจากการสร้างสำเร็จโดยส่วนตัวในกรณีที่มีบางอย่างผิดปกติ
jmort253

7
ไม่ทำงาน, ไม่เป็นผล. มันจะนำสาขากลับมาที่ Github ด้วยชื่อเดิม
geoff

1
@AdamParkin 1. git branch -m new_branch(เปลี่ยนชื่อ old_branch เพื่อ new_branch) 2. git commit -m 'msg'3. git push4. mhmm, old_branch แสดงขึ้นมาใน Github, Google คำถามและฉันกำลังจะนำไปสู่คำตอบของคุณ 5. git push origin :old_branch(บอกว่ามันลบ) 6. git push origin new_branch... * [new branch] new_branch -> old_branchเสร็จสมบูรณ์แล้วพูดว่า กลับไปที่ Github และกลับมาold_branchปรากฏตัวอีกครั้ง หากฉันลบใน Github web UI ฉันมีตัวเลือกในการ "กู้คืน" ดังนั้นดูเหมือนว่าการกด new_branch เป็นการกู้คืน
Kcvin

2
สิ่งหนึ่งที่ต้องระวังคือเมื่อคุณเปลี่ยนชื่อสาขาคำขอดึงใด ๆ ที่คุณเปิดกับคำขอดึงนั้นจะถูกปิดโดยอัตโนมัติ เราต้องเปลี่ยนชื่อสาขากลับมาแล้วเปิดคำขอดึงทั้งหมดอีกครั้งด้วยตนเอง ....
jmort253

24

คำสั่งต่อไปนี้ทำงานให้ฉัน:

git push origin :old-name-of-branch-on-github
git branch -m old-name-of-branch-on-github new-name-for-branch-you-want
git push origin new-name-for-branch-you-want

นี่คือคำตอบสั้น ๆ ที่ใช้งานได้ BTW คำสั่งแรกสามารถใส่เป็นคำตอบสุดท้ายได้
Eric Wang

คำตอบนี้ครอบคลุม git not
gitHub

1
ที่จริงฉันเพิ่งทำสองครั้งและมันทำงานบน GitHub
spozun

17

ฉันพบคำสั่ง 3 วิธีที่คุณสามารถเปลี่ยนชื่อสาขา git ของคุณและคำสั่งเหล่านี้เป็นวิธีที่เร็วกว่าในการทำเช่นนั้น

git branch -m old_branch new_branch         # Rename branch locally    
git push origin :old_branch                 # Delete the old branch    
git push --set-upstream origin new_branch   # Push the new branch, set local branch to track the new remote

หากคุณต้องการทีละขั้นตอนคุณสามารถอ่านบทความที่ดีนี้

วิธีเปลี่ยนชื่อ Git Local และ Remote Branch


1
git push --set-upstreamเป็นส่วนที่สำคัญที่สุดหากคุณเปลี่ยนชื่อสาขาในเครื่องโดยใช้แอพ Github ก่อนที่จะลบสาขาระยะไกล
หลุยส์หยาง

คำตอบนี้ครอบคลุม git not
gitHub

12

เพียงลบสาขาเก่าและสร้างสาขาใหม่

ตัวอย่าง (เปลี่ยนชื่อสาขาระยะไกลเท่านั้น):

git push origin :refs/heads/oldname
git push origin newname:refs/heads/newname

คุณควรเปลี่ยนชื่อสาขาท้องถิ่นและเปลี่ยนการตั้งค่าสำหรับตำแหน่งที่จะผลัก / ดึง


1
คำสั่งที่ 2 ไม่ควรgit push origin newname:refs/heads/newnameใช่หรือไม่ master และ newname อาจไม่ชี้ไปที่การคอมมิชชันเดียวกัน
Steve Folly

"master" เป็นเพียงตัวอย่างจะเปลี่ยนทันที
วิ

อาจกลับคำสั่งของสองคำสั่ง (เช่นอัปโหลดชื่อใหม่ก่อนลบเก่าหลังจากนั้น)
Vi

คำตอบนี้ครอบคลุม git not
gitHub

@gman ไม่เปลี่ยนชื่อเป็น Git-wise และเปลี่ยนชื่อเป็น Github-wise หรือไม่
วิ

9

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

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

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

git branch -m new-name

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

git branch -m old-name new-name

2. ลบสาขาระยะไกลชื่อเก่าและผลักดันสาขาท้องถิ่นชื่อใหม่

git push origin :old-name new-name

3. รีเซ็ตสาขาต้นน้ำสำหรับสาขาท้องถิ่นที่มีชื่อใหม่

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

git push origin -u new-name

ดังนั้นข้อสรุปคือ

git branch -m new-name
git push origin :old-name new-name
git push origin -u new-name

คำตอบนี้ครอบคลุม git not
gitHub

นี่สำหรับคอมไพล์และ GitHub อยู่ภายใต้คอมไพล์ดังนั้นมันจะทำงานและทำงานกับฉันและกับคนอื่น ๆ
Abdelrahman Mohamed

มันไม่ทำงาน git branch -m new-name && git push origin :master new-nameลองทำตามขั้นตอนที่หนึ่งและสอง มันจะล้มเหลว หากคำตอบนี้เป็นเพียงเกี่ยวกับคอมไพล์และไม่ใช่ GitHub คำถามนี้เป็นคำถามซ้ำซ้อนกับคำถามอื่น ๆ และควรจะปิด ถ้ามันเกี่ยวกับ GitHub จริงๆแล้วคำตอบจะต้องครอบคลุม GitHub คำตอบนี้ไม่ได้
gman

6

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

https://github.com/blog/1377-create-and-delete-branches


2

นี่คือสิ่งที่ทำงานให้ฉัน:

1. ) สร้างสาขาใหม่ก่อน: git push github newname: refs / heads / newname

2. ) บนเว็บไซต์ GitHub การตั้งค่าข้ามไปและเปลี่ยนสาขาเริ่มต้นเป็นชื่อใหม่

3. ) ลบ oldname git push github - ลบ oldname


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

ขอบคุณ แต่ฉันต้องเปลี่ยนไปที่สาขารวมทั้งนำเข้า
แฟลช Sheridan

1
คำตอบนี้ครอบคลุม git not
gitHub

0

บทความนี้แสดงให้เห็นถึงวิธีการทำมันง่ายจริง
1. หากต้องการเปลี่ยนชื่อสาขา Git ในพื้นที่เราสามารถใช้คำสั่ง Git branch -m เพื่อแก้ไขชื่อ:
git branch -m feature1 feature2
2. หากคุณเพียงแค่มองหาคำสั่งให้เปลี่ยนชื่อสาขา Git ระยะไกลนี่คือ "
git push -u origin feature2:feature3
ตรวจสอบว่าคุณไม่มี แท็กบนกิ่งไม้ก่อนที่คุณจะทำเช่นนี้. git tagคุณสามารถทำเช่นนั้นด้วย


คำตอบนี้ครอบคลุม git not
gitHub

0

อีกวิธีคือเปลี่ยนชื่อไฟล์ต่อไปนี้ :

  1. สำรวจไดเรกทอรีโครงการของคุณ
  2. เปลี่ยนชื่อ.git/refs/head/[branch-name]เป็น.git/refs/head/new-branch-name
  3. เปลี่ยนชื่อ.git/refs/remotes/[all-remote-names]/[branch-name]เป็น.git/refs/remotes/[all-remote-names]/new-branch-name

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

เปลี่ยนชื่อสาขาแล้ว (ภายในและระยะไกล!)


ความสนใจ

หากชื่อสาขาปัจจุบันของคุณมีเครื่องหมายทับ ( /) git จะสร้างไดเรกทอรีดังนี้:

ชื่อสาขาปัจจุบัน: "awe/some/branch"

  • .git/refs/head/awe/some/branch
  • .git/refs/remotes/[all-remote-names]/awe/some/branch

ต้องการชื่อสาขา: "new-branch-name"

  1. สำรวจไดเรกทอรีโครงการของคุณ
  2. คัดลอกbranchไฟล์จาก.git/refs/*/awe/some/
  3. .git/refs/head/ใส่ไว้ใน
  4. คัดลอกbranchไฟล์จากทั้งหมด.git/refs/remotes/*/awe/some/
  5. .git/refs/remotes/*/ใส่ไว้ใน
  6. เปลี่ยนชื่อ opied ทุกไฟล์ไปยังbranchnew-branch-name
  7. ตรวจสอบว่าไดเรกทอรีและโครงสร้างไฟล์ตอนนี้มีลักษณะเช่นนี้:
    • .git/refs/head/new-branch-name
    • .git/refs/remotes/[all-remote-names]/new-branch-name
  8. ทำเช่นเดียวกันกับต้นกำเนิด / เซิร์ฟเวอร์ระยะไกลทั้งหมดของคุณ (ถ้ามี)
    • ข้อมูล : บนรีโมตเซิร์ฟเวอร์มักไม่มีไดเรกทอรี refs / remotes / * เนื่องจากคุณอยู่ในรีโมตเซิร์ฟเวอร์แล้ว) (อาจอยู่ในการกำหนดค่า git ขั้นสูงที่อาจเป็นไปได้ แต่ฉันไม่เคยเห็นมาก่อน)

สาขามีการเปลี่ยนชื่อในขณะนี้จากawe/some/branchการnew-branch-name(ท้องถิ่นและระยะไกล!)

ไดเรกทอรีในชื่อสาขาถูกลบแล้ว


ข้อมูล:วิธีนี้อาจไม่ดีที่สุด แต่ก็ยังใช้ได้กับคนที่อาจมีปัญหากับวิธีอื่น


คำตอบนี้ครอบคลุม git not
gitHub

0

ในกรณีของผมผมจำเป็นต้องมีคำสั่งเพิ่มเติมที่จะได้รับการเปลี่ยนชื่อสาขาของฉันที่จะผลักดันขึ้นไป
git branch --unset-upstream
origin newname

(เพื่อความสะดวกในการพิมพ์) git checkout oldnameครั้งแรกที่ผม
จากนั้นเรียกใช้สิ่งต่อไปนี้:

git branch -m newname
git push origin :oldname หรือ หรือgit push origin --delete oldname
git branch --unset-upstream
git push -u origin newname git push origin newname

ขั้นตอนนี้พิเศษเพียงอาจมีความจำเป็นเพราะผม (มักจะ) การติดตั้งระยะไกลติดตามบนกิ่งไม้ของฉันผ่านทาง ด้วยวิธีนี้เมื่อฉันเช็คเอาต์ฉันก็ต้องพิมพ์มากกว่าgit push -u origin oldnameoldnamegit pushgit push origin oldname

หากฉันไม่ได้ใช้คำสั่งgit branch --unset-upstreamก่อนหน้าgit push origin newbranchนี้คอมไพล์สร้าง oldbranchและผลักดันnewbranchไปที่origin oldbranch- เอาชนะความตั้งใจของฉัน


คำตอบนี้ครอบคลุม git not
gitHub

@gman Point นำมา โซลูชันของฉันใช้ git ในเครื่องเพื่อเปลี่ยนชื่อสาขาใน GitHub จากระยะไกลหลังจากเปลี่ยนชื่อในสำเนา git ในพื้นที่ของที่เก็บ GitHub ดังนั้นจึงอาจถือได้ว่าเป็นโซลูชันพิเศษสำหรับเมื่อคุณต้องการใช้บรรทัดคำสั่งแทนที่จะเป็นส่วนต่อประสานเว็บไซต์ GitHub และคุณมีโคลนแบบโลคัลที่คุณต้องการอัพเดต ขอขอบคุณที่เน้นความแตกต่างนี้และชี้แจงว่าคำตอบนี้มีไว้สำหรับกรณีพิเศษมากกว่าโซลูชันทั่วไป
SherylHohman

ปัญหาคือ gitub ผูกคุณสมบัติกับสาขา ลองเปลี่ยนชื่อ master เป็น main และคำแนะนำของคุณจะล้มเหลว
gman

-1

คำสั่งต่อไปนี้เปลี่ยนชื่อสาขาในพื้นที่ลบสาขาเก่าบนตำแหน่งระยะไกลและผลักสาขาใหม่ตั้งสาขาท้องถิ่นเพื่อติดตามรีโมตใหม่:

git branch -m old_branch new_branch
git push origin :old_branch
git push --set-upstream origin new_branch

แม้ว่าข้อมูลโค้ดของคุณอาจแก้ปัญหาได้ แต่คุณควรอธิบายว่าจุดประสงค์ของโค้ดของคุณคืออะไร (วิธีแก้ไขปัญหา) นอกจากนี้คุณอาจต้องการตรวจสอบstackoverflow.com/help/how-to-answer
Ahmad F

คำตอบนี้ครอบคลุม git not
gitHub

-1

ง่ายๆเป็นว่า ในการเปลี่ยนชื่อสาขา git ในพื้นที่และใช้ตัวอย่างข้อมูลนี้จากระยะไกล (ผ่านการทดสอบและใช้งานได้อย่างมีเสน่ห์):

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

คำอธิบาย:

  1. เปลี่ยนชื่อขั้นตอน:

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

  2. ลบขั้นตอน:

    การอ้างอิง Git: ต้นกำเนิดการพุชแบบ Git : การทดลองค้นหาการอ้างอิงที่ตรงกับการทดลองในที่เก็บต้นฉบับ (เช่นการอ้างอิง / หัว / การทดลอง) และลบ

  3. อัปเดตเกี่ยวกับขั้นตอน repo ระยะไกล (การอ้างอิง upstream สำหรับการติดตาม):

    การอ้างอิง Git: - set-upstreamสำหรับทุกสาขาที่ทันสมัยหรือถูกผลักสำเร็จให้เพิ่มการอ้างอิง upstream (การติดตาม) ที่ใช้โดยอาร์กิวเมนต์น้อย git-pull [1] และคำสั่งอื่น ๆ สำหรับข้อมูลเพิ่มเติมโปรดดูที่สาขา.. ผสานเป็น git-config [1]


คำตอบนี้ครอบคลุม git not
gitHub

-1

3 ขั้นตอนง่ายๆ

  • git push ต้นกำเนิด head

  • git branch -m old-branch-name ใหม่-branch-name

  • git push ต้นกำเนิด head


คำตอบนี้ครอบคลุม git not
gitHub

-1

บนรัน git branch git branch -m old_name new_name สิ่งนี้จะทำการแก้ไขชื่อสาขาใน repo git push local ของคุณ: old_name new_name สิ่งนี้จะพุชชื่อที่ถูกแก้ไขเป็น remote และลบ branch git push เก่า -u new_name ตั้ง local branch เพื่อติดตาม สาขาระยะไกล วิธีนี้จะช่วยแก้ปัญหา


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