ฉันจะเปลี่ยนชื่อสาขา 'master' ของ Git เป็น 'release' ได้อย่างไร


116

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

ฉันเข้าใจว่าฉันสามารถเปลี่ยนชื่อสาขาหลักในเครื่องได้โดยใช้สิ่งต่อไปนี้:

git branch -m master release

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

ฉันจะบรรลุเป้าหมายนี้ได้อย่างไร?

ดูเหมือนว่าเนื่องจากต้นทางอยู่บนเซิร์ฟเวอร์Gitoriousฉันจึงได้รับข้อผิดพลาดในการลบสาขาหลัก ฉันกำลังพยายามดูว่าสามารถเปลี่ยนแปลงได้หรือไม่เพื่อให้สาขาเริ่มต้นคือ 'release'


2
เฮ้ยุติธรรมพอ มูลค่าในระยะยาวสูงพอที่จะลองทำดู
Kyle Hayes


เซิร์ฟเวอร์ (ระยะไกล) บางตัวปฏิเสธที่จะลบสาขา "เริ่มต้น" (เป็นกรณีของ Github) ดังนั้นคุณอาจต้องไปที่เซิร์ฟเวอร์เพื่อเลือกสาขา "เริ่มต้น" อื่นสำหรับช่วงเวลาของการดำเนินการ ... บน Github สามารถทำได้ในมุมมอง "branch"
jehon

1
git branchตอนนี้รองรับ--moveแฟล็ก git-scm.com/docs/git-branch#Documentation/git-branch.txt---move
alxndr

คำตอบ:


141
git checkout -b release master    # Create and switch to the release branch
git push -u origin release        # Push the release branch to the remote and track it
git branch -d master              # Delete local master
git push --delete origin master   # Delete remote master
git remote prune origin           # Delete the remote tracking branch

โปรดทราบว่าหากคุณใช้GitHubคุณจะต้องเปลี่ยนสาขา "เริ่มต้น" บน GitHub ก่อนหลังจากขั้นตอนที่ 3:

ในพื้นที่เก็บข้อมูลของคุณบน github.com ไปตั้งค่าสาขา → สาขาเริ่มต้น เปลี่ยนเป็นปล่อยแล้วทำตามขั้นตอนที่เหลือ


3
เมื่อฉันพยายาม git push --delete ฉันได้รับข้อผิดพลาดต่อไปนี้: ห้ามลบสาขาปัจจุบัน
Kyle Hayes

8
คุณกำลังใช้ github หรือสิ่งที่คล้ายกันคุณต้องทำให้สาขาเริ่มต้นเป็นอย่างอื่น: matthew-brett.github.com/pydagogue/gh_delete_master.htmlหรือปล่อยให้มาสเตอร์อยู่ตรงนั้นและเพิกเฉย
Adam Dymitruk

ใช่เรามีตัวอย่างที่น่ากลัว ให้ฉันดูว่าเป็นตัวเลือกหรือไม่
Kyle Hayes

ดูเหมือนว่า 'กระทำตะขอ' ห้ามไม่ให้ลบสาขาหลัก - ด้วยเหตุผลที่ไม่ดีที่ฉันเห็น: /
fge

1
เดียวกัน! [remote rejected] branch (deletion of the current branch prohibited) จะเกิดขึ้นกับ Bitbucket สลับ "ที่เก็บหลัก" ในหน้าจอการตั้งค่า (ใต้ไอคอนรูปเฟือง)
dnfehren

13

ตรวจสอบสาขาหลักของคุณ

git checkout master

สร้างสาขาเผยแพร่ของคุณและเปลี่ยนไปใช้:

git branch release
git checkout release

ส่งไปที่เซิร์ฟเวอร์

git push origin release

ลบการอ้างอิงสาขาหลักบนเซิร์ฟเวอร์

git push origin :master

ลบสาขาหลักในเครื่อง

git branch -d master

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

@KyleHayes นั่นเป็นปัญหาการกำหนดค่าของเซิร์ฟเวอร์ แม้ว่าจะเป็นวิธีนี้โดยค่าเริ่มต้นกระบวนการเปลี่ยนแปลงที่ควรปรากฏแก่ผู้ใช้หรือค้นพบได้ง่ายใน Stackoverflow
Jeff Ferland

คุณต้องเปลี่ยนไปใช้สาขาอื่นก่อนจึงจะสามารถลบสาขาได้
martinedwards

5

หมายเหตุ: คำตอบนี้มีไว้สำหรับเซิร์ฟเวอร์ Git ที่โฮสต์เองซึ่งคุณมีสิทธิ์เข้าถึงบรรทัดคำสั่ง

เนื่องจากการพยายามลบออกremote masterจากไคลเอนต์นั้นไม่ได้รับอนุญาตอย่างแท้จริงและฉันถือว่าการห้ามนั้นdenyDeleteCurrentสมเหตุสมผลฉันจึงไม่ต้องการเปลี่ยนการตั้งค่านั้น

อย่างไรก็ตามฉันพบว่าวิธีที่ง่ายที่สุดในการเปลี่ยนชื่อหลักของคุณiff ที่คุณมีการเข้าถึงบรรทัดคำสั่งไปยังเซิร์ฟเวอร์ระยะไกลคือการเรียกใช้คำสั่งเปลี่ยนชื่อโดยตรงบนรีโมต

สิ่งนี้ใช้ได้ผลสำหรับฉัน:

  1. เข้าสู่ระบบผ่าน SSH ไปยังเซิร์ฟเวอร์ git ระยะไกล
  2. ไปที่โฟลเดอร์ xxx.git ของโปรเจ็กต์ของคุณ
  3. วิ่ง: git branch -m master release

ตอนนี้ที่เก็บระยะไกลใช้releaseเป็นสาขาเริ่มต้นและใด ๆgit cloneบนที่เก็บนั้นจากไคลเอนต์ใด ๆ จะตรวจสอบสาขารีลีสตามค่าเริ่มต้น

นอกจากนี้ยังมีประโยชน์มากหลังจากตั้งค่าที่เก็บเปล่าเพื่อกำหนดค่าตามความต้องการของคุณ


3

ตามที่ระบุไว้ก่อนหน้านี้ปัญหาที่นี่คือ Gitorious ซึ่งไม่อนุญาตให้คุณลบสาขา HEAD ตามค่าเริ่มต้น คุณมีสองทางเลือกในการแก้ไขปัญหานี้ หนึ่งคือการเข้าสู่เซิร์ฟเวอร์ Gitorious (ด้วย ssh) ค้นหาที่เก็บ Git บนไฟล์เซิร์ฟเวอร์และเพิ่ม:

[receive]
        denyDeleteCurrent = warn

ไปยังการกำหนดค่า

ตัวเลือกที่ง่ายกว่าคือการเปลี่ยนสาขาเริ่มต้น ไปที่ที่เก็บของคุณในเว็บอินเตอร์เฟส Gitorious กด "แก้ไขที่เก็บ" และตั้งค่า "Head Change the symbolic ref the HEAD in the Git repository ชี้ไปที่:" หลังจากทำเสร็จแล้วคุณสามารถลบสาขาหลักได้


2

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


1

ตามหลักการแล้วคุณต้องการตั้งค่าการติดตามให้ดำเนินการดังนี้:

git push origin HEAD:release
git checkout --track origin/release

ตอนนี้คุณต้องการลบรายการอื่น ๆ หรือไม่?

git branch -d master
git push origin :master

เรียบง่าย!


ฉันได้รับข้อผิดพลาดเดียวกันกับที่ฉันโพสต์ในความคิดเห็นของ @ Adam เมื่อฉันไปที่ git push origin: master command
Kyle Hayes

0

เนื่องจากคุณเปลี่ยนชื่อสาขาเสร็จแล้วให้ตั้ง HEAD เป็นreleaseสำหรับรีโมต

git remote set-head origin release

จากนั้นในการลบmasterสาขาในระยะไกลคุณจะต้องเป็นผู้ดูแลระบบอย่างน้อยก็ใน GitHub โปรดดูโพสต์นี้สำหรับข้อมูลเพิ่มเติม


0

ตั้งแต่ Git 2.28 (เผยแพร่ 27 กรกฎาคม 2020) ตอนนี้คุณสามารถกำหนดค่าชื่อของสาขาที่สร้างขึ้นเมื่อคุณเริ่มต้นที่เก็บใหม่:

$ git config --global init.defaultBranch main

หลังจากตั้งค่าตัวแปรนี้แล้วการรัน git init จะสร้างที่เก็บที่มีสาขาเริ่มต้นเป็นหลัก:

$ git init

เริ่มต้นที่เก็บ Git ว่างใน /home/thomas/test-git-repo/.git/ $ git สถานะบนสาขาหลัก

ยังไม่มีการกระทำใด ๆ

ไม่มีอะไรให้กระทำ (สร้าง / คัดลอกไฟล์และใช้ "git add" เพื่อติดตาม) บันทึกประจำรุ่น: https://lore.kernel.org/git/xmqq5za8hpir.fsf@gitster.c.googlers.com/

cc Kiley

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