Đổi tên một chi nhánh trong GitHub


297

Tôi chỉ đổi tên chi nhánh địa phương của tôi bằng cách sử dụng

git branch -m oldname newname

nhưng điều này chỉ đổi tên phiên bản địa phương của chi nhánh. Làm cách nào tôi có thể đổi tên một cái trên GitHub?



Bạn đã kiểm tra trong cài đặt quản trị viên chưa? Dự án hiện tại của tôi trên github không có bất kỳ chi nhánh nào nhưng bạn có thể đổi tên repo ở đó để tôi nghĩ bạn cũng có thể đổi tên chi nhánh.
evanmcdonnal

12
@evanmcdonnal Không, bạn không thể đổi tên chi nhánh Git từ trang GitHub.
Andrew Marshall

Các câu trả lời cho câu hỏi này là gần như phổ biến sai. Câu hỏi không phải là làm thế nào để đổi tên một nhánh git, mà là cách đổi tên một nhánh github . Nhiều thứ trên github được gắn với một nhánh có nghĩa là bất kỳ câu trả lời nào cũng cần phải bao gồm những thứ đó. Ví dụ: đổi tên chủ thành chính
gman

@gman Đối với những gì nó có giá trị, có vẻ như những câu trả lời này đã trả lời tinh thần của câu hỏi của OP. Câu hỏi của OP có thể không được đặt ra một cách hoàn hảo, từ quan điểm chính xác về mặt kỹ thuật, hoặc vấn đề có liên quan mà bạn hiện đang xem xét. Nhưng sau đó, câu hỏi này không đến từ nền tảng kỹ thuật sâu sắc của git hoặc GitHub. Từ quan điểm này, người ta có thể coi đây là một "câu hỏi mới bắt đầu" hoặc câu hỏi cơ bản. Như vậy, nó được đặt ra và trả lời thích hợp cho đối tượng này. Thật khó chịu, chắc chắn, nhưng tôi nghĩ Q này, những Câu trả lời này là phù hợp / có liên quan, đặc biệt cho việc sử dụng QM git / Hub trước của Q.
SherylHohman

Câu trả lời:


309

Như đã đề cập, xóa cái cũ trên Github & đẩy lại, mặc dù các lệnh được sử dụng dài hơn một chút so với cần thiết:

git push origin :name_of_the_old_branch_on_github
git push origin new_name_of_the_branch_that_is_local

Đơn giản. Phân tích các lệnh một chút, lệnh git đẩy về cơ bản là:

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

Vì vậy, thực hiện một cú đẩy không có local_branch được chỉ định về cơ bản có nghĩa là "không lấy gì từ kho lưu trữ cục bộ của tôi và biến nó thành nhánh từ xa". Tôi đã luôn nghĩ rằng điều này là hoàn toàn không có gì, nhưng đó là cách nó được thực hiện.

Chỉnh sửa: Kể từ Git 1.7, có một cú pháp thay thế để xóa một nhánh từ xa:

git push origin --delete name_of_the_remote_branch

Chỉnh sửa: Như được đề cập bởi @ void.pulum trong các bình luận

Lưu ý rằng bạn có thể kết hợp 2 thao tác đẩy:

git push origin :old_branch new_branch

Điều này sẽ xóa cả nhánh cũ và đẩy cái mới.

Điều này có thể được biến thành một bí danh đơn giản lấy từ xa, nhánh gốc và tên nhánh mới làm đối số, trong ~/.gitconfig:

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

Sử dụng:

git branchm origin old_branch new_branch

Lưu ý rằng các đối số vị trí trong các lệnh shell là có vấn đề trong các phiên bản cũ hơn (trước 2.8?) Của git, vì vậy bí danh có thể thay đổi tùy theo phiên bản git. Xem cuộc thảo luận này để biết chi tiết.


32
Lưu ý rằng bạn có thể kết hợp 2 thao tác đẩy : git push origin :old_branch new_branch. Điều này sẽ xóa cả nhánh cũ và đẩy cái mới.
void.pulum

4
Có bất kỳ lý do tại sao chi nhánh mới không thể được đẩy trước khi xóa cái cũ? Cá nhân tôi thích các quá trình trong đó thao tác xóa xảy ra sau khi thao tác tạo thành công, chỉ trong trường hợp có lỗi xảy ra.
jmort253

7
Không hoạt động. Nó chỉ đơn giản là đặt chi nhánh trở lại trên Github với tên cũ của nó.
geoff

1
@AdamParkin 1. git branch -m new_branch(đổi tên old_branch thành new_branch) 2. git commit -m 'msg', 3. git push4. Mhmm, old_branch xuất hiện trong Github, câu hỏi của Google và tôi được dẫn đến câu trả lời của bạn 5. git push origin :old_branch(nói rằng nó đã bị xóa) 6. git push origin new_branch... hoàn thành rồi nói * [new branch] new_branch -> old_branch. Quay trở lại Github và old_branchxuất hiện trở lại. Nếu tôi xóa trong giao diện người dùng web Github, tôi có tùy chọn "Khôi phục", do đó, có vẻ như việc đẩy new_branch chỉ là khôi phục.
Kcvin

2
Một điều cần lưu ý là khi bạn đổi tên chi nhánh, mọi yêu cầu kéo bạn mở đối với yêu cầu kéo đó sẽ tự động bị đóng. Chúng tôi phải đổi tên chi nhánh trở lại và sau đó mở lại tất cả các yêu cầu kéo ....
jmort253

24

Các lệnh sau làm việc cho tôi:

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

Đây là câu trả lời ngắn gọn mà hoạt động. BTW, lệnh đầu tiên cũng có thể được đặt làm lệnh cuối cùng trong câu trả lời.
Eric Wang

câu trả lời này bao gồm git not github
gman

1
Trên thực tế, tôi chỉ làm điều này hai lần và nó hoạt động trên github.
spozun

17

Tôi đã tìm thấy 3 lệnh làm thế nào bạn có thể thay đổi tên nhánh git của mình và những lệnh này là cách nhanh hơn để làm điều đó

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

Nếu bạn cần từng bước bạn có thể đọc bài viết tuyệt vời này

Cách đổi tên Git Chi nhánh địa phương và từ xa


1
git push --set-upstreamlà phần quan trọng nhất nếu bạn tình cờ thay đổi tên chi nhánh cục bộ bằng ứng dụng github trước khi xóa chi nhánh từ xa.
Louis Yang

câu trả lời này bao gồm git not github
gman

12

Chỉ cần loại bỏ nhánh cũ và tạo cái mới.

Ví dụ (chỉ đổi tên chi nhánh từ xa):

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

Bạn cũng có thể nên đổi tên chi nhánh địa phương và thay đổi cài đặt cho nơi cần đẩy / kéo.


1
Không phải lệnh thứ 2 phải git push origin newname:refs/heads/newnamekhông? chủ và tên mới có thể không trỏ đến cùng một cam kết.
Steve Folly

"chủ" chỉ là ví dụ, sẽ thay đổi ngay bây giờ.
Vi.

Có lẽ nên đảo ngược thứ tự của hai lệnh (tức là tải lên tên mới trước, xóa tên cũ sau đó)
Vi.

câu trả lời này bao gồm git not github
gman

@gman, Không đổi tên nó Git-khôn cũng đổi tên thành Github-khôn?
Vi.

9

Đổi tên các chi nhánh trong git cục bộ và từ xa

1. Đổi tên chi nhánh địa phương của bạn.

Nếu bạn ở trên nhánh bạn muốn đổi tên:

git branch -m new-name

Nếu bạn ở một chi nhánh khác:

git branch -m old-name new-name

2. Xóa nhánh từ xa tên cũ và đẩy nhánh cục bộ tên mới.

git push origin :old-name new-name

3. Đặt lại nhánh ngược dòng cho nhánh cục bộ tên mới.

Chuyển sang chi nhánh và sau đó:

git push origin -u new-name

Vì vậy, kết luận là

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

câu trả lời này bao gồm git not github
gman

Cái này dành cho git và GitHub nằm dưới git nên nó sẽ hoạt động và nó hoạt động với tôi và với những người khác
Abdelrahman Mohamed

Nó không hoạt động. Hãy thử bước đầu tiên và thứ hai git branch -m new-name && git push origin :master new-name. Nó sẽ thất bại. Nếu câu trả lời này chỉ là về git và không phải là github thì câu hỏi này là một bản sao của một số câu hỏi khác và nên được đóng lại. Nếu nó thực sự là về github thì câu trả lời phải bao gồm github. Câu trả lời này không.
gman


2

Đây là những gì làm việc cho tôi:

1.) Tạo chi nhánh mới trước: git đẩy github newname: refs / Heads / newname

2.) Trên trang github, cài đặt goto và thay đổi Chi nhánh mặc định thành tên mới

3.) Xóa tên cũ git đẩy github - xóa tên cũ


0
  1. Tải xuống Atlassian SourceTree (miễn phí).
  2. Nhập bản sao cục bộ của bạn của kho lưu trữ.
  3. Nhấp chuột phải vào chi nhánh của bạn để đổi tên, trong thanh bên. Chọn "Đổi tên chi nhánh ..." từ menu ngữ cảnh và đổi tên nó.
  4. Đẩy về nguồn gốc.

Cảm ơn, nhưng tôi đã phải chuyển sang chi nhánh cũng như nhập nó.
Flash Sheridan

1
câu trả lời này bao gồm git not github
gman

0

Bài viết này cho thấy làm thế nào để thực hiện nó dễ dàng.
1. Để đổi tên một nhánh Git cục bộ, chúng ta có thể sử dụng lệnh Git nhánh -m để sửa đổi tên:
git branch -m feature1 feature2
2. Nếu bạn chỉ tìm kiếm lệnh để đổi tên một nhánh Git từ xa, thì đây là "
git push -u origin feature2:feature3
Kiểm tra xem bạn có không các thẻ trên nhánh trước khi bạn làm điều này. Bạn có thể làm điều đó với git tag.


câu trả lời này bao gồm git not github
gman

0

Một cách khác là đổi tên các tệp sau :

  1. điều hướng thư mục dự án của bạn
  2. đổi tên .git/refs/head/[branch-name]thành.git/refs/head/new-branch-name
  3. đổi tên .git/refs/remotes/[all-remote-names]/[branch-name]thành.git/refs/remotes/[all-remote-names]/new-branch-name

Đổi tên đầu & từ xa cả trên PC cục bộ của bạn trên nguồn gốc / (các) máy chủ từ xa

Chi nhánh hiện được đổi tên (địa phương và từ xa!)


Chú ý

Nếu tên chi nhánh hiện tại của bạn chứa slash ( /) git sẽ tạo các thư mục như vậy:

tên chi nhánh hiện tại: "awe/some/branch"

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

muốn tên chi nhánh: "new-branch-name"

  1. điều hướng thư mục dự án của bạn
  2. sao chép branchtập tin từ.git/refs/*/awe/some/
  3. đặt nó trong .git/refs/head/.
  4. sao chép branchtập tin từ tất cả.git/refs/remotes/*/awe/some/
  5. đặt chúng trong .git/refs/remotes/*/.
  6. đổi tên tất cả branchcác tập tin opied thành new-branch-name.
  7. kiểm tra xem thư mục và cấu trúc tập tin bây giờ trông như thế này:
    • .git/refs/head/new-branch-name
    • .git/refs/remotes/[all-remote-names]/new-branch-name
  8. làm tương tự trên tất cả các nguồn gốc / máy chủ từ xa của bạn (nếu có)
    • thông tin : trên các máy chủ từ xa thường không có thư mục refs / remote / * vì bạn đã ở trên máy chủ từ xa;) (cũng có thể trong các cấu hình git nâng cao có thể có thể, nhưng tôi chưa bao giờ thấy điều đó)

Chi nhánh tại được đổi tên từ awe/some/branchđến new-branch-name(địa phương và từ xa!)

Thư mục trong tên chi nhánh đã được gỡ bỏ.


Thông tin: Cách này có thể không phải là tốt nhất, nhưng nó vẫn hoạt động cho những người có thể gặp vấn đề với những cách khác


câu trả lời này bao gồm git not github
gman

0

Trong trường hợp của tôi, tôi cần một lệnh bổ sung để có được nhánh được đổi tên của mình để đẩy lên .
git branch --unset-upstream
origin newname

(Để dễ gõ), tôi trước git checkout oldname.
Sau đó chạy như sau:

git branch -m newname
git push origin :oldname hoặc hoặcgit push origin --delete oldname
git branch --unset-upstream
git push -u origin newname git push origin newname

Bước bổ sung này có thể chỉ cần thiết vì tôi (có xu hướng) thiết lập theo dõi từ xa trên các chi nhánh của mình thông qua . Bằng cách này khi tôi đã thanh toán , sau đó tôi chỉ cần loại chứ không phảigit push -u origin oldnameoldnamegit pushgit push origin oldname

Nếu tôi KHÔNG sử dụng lệnh git branch --unset-upstreamtrước đó git push origin newbranch, git sẽ tạo lại oldbranch và đẩy newbranchtới origin oldbranch- đánh bại ý định của tôi.


câu trả lời này bao gồm git not github
gman

@gman Điểm lấy. Giải pháp của tôi sử dụng git cục bộ để đổi tên một nhánh trên GitHub, từ xa, sau khi đổi tên nó trên bản sao git cục bộ của kho lưu trữ GitHub. Vì vậy, có lẽ nó có thể được coi là một giải pháp chuyên biệt, vì khi bạn muốn sử dụng dòng lệnh, thay vì giao diện trang web GitHub và bạn có một bản sao cục bộ mà bạn cũng muốn cập nhật. Cảm ơn vì đã làm nổi bật sự khác biệt này và làm rõ rằng câu trả lời này dành cho một trường hợp đặc biệt, thay vì một giải pháp chung.
SherylHohman

Vấn đề là github liên kết các tính năng với các chi nhánh. Hãy thử đổi tên chủ thành chính và hướng dẫn của bạn sẽ thất bại.
gman

-1

Các lệnh sau đổi tên nhánh cục bộ, xóa nhánh cũ trên vị trí từ xa và đẩy nhánh mới, đặt nhánh cục bộ để theo dõi điều khiển từ xa mới:

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

Mặc dù đoạn mã của bạn có thể giải quyết vấn đề, bạn nên mô tả mục đích của mã của bạn là gì (cách giải quyết vấn đề). Hơn nữa, bạn có thể muốn kiểm tra stackoverflow.com/help/how-to-answer
Ahmad F

câu trả lời này bao gồm git not github
gman

-1

Đơn giản như thế . Để đổi tên chi nhánh git cục bộ và từ xa, hãy sử dụng đoạn mã này (đã được thử nghiệm và hoạt động như một lá bùa):

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

Giải trình:

  1. Đổi tên Bước:

    Tham chiếu Git: Với tùy chọn -m hoặc -M , sẽ được đổi tên thành. Nếu có một reflog tương ứng, nó được đổi tên thành khớp và một mục reflog được tạo để ghi nhớ đổi tên nhánh. Nếu tồn tại, -M phải được sử dụng để buộc đổi tên xảy ra.

  2. Xóa bước:

    Tham chiếu Git: git đẩy gốc: thử nghiệm Tìm một ref phù hợp với thử nghiệm trong kho lưu trữ gốc (ví dụ: refs / Heads / thử nghiệm) và xóa nó.

  3. Cập nhật Bước repo từ xa (tham chiếu ngược dòng để theo dõi):

    Tham chiếu Git: --set-upflow Đối với mỗi nhánh được cập nhật hoặc được đẩy thành công, hãy thêm tham chiếu ngược dòng (theo dõi), được sử dụng bởi git-pull [1] và các lệnh khác. Để biết thêm thông tin, hãy xem chi nhánh..mge trong git-config [1].


câu trả lời này bao gồm git not github
gman

-1

3 bước đơn giản

  • git đẩy nguồn gốc

  • chi nhánh git -m tên cũ chi nhánh tên mới

  • git đẩy nguồn gốc


câu trả lời này bao gồm git not github
gman

-1

Trên nhánh git chạy nhánh git -m old_name new_name Điều này sẽ sửa đổi tên nhánh trên repo cục bộ repo cục bộ của bạn: old_name new_name Điều này sẽ đẩy tên đã sửa đổi từ xa và xóa nhánh git đẩy gốc -u new_name Đặt nhánh cục bộ để theo dõi chi nhánh từ xa. Điều này giải quyết vấn đề


câu trả lời này bao gồm git not github
gman
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.