Làm cách nào để đổi tên cả tên chi nhánh Git cục bộ và từ xa?


456

Tôi có bốn nhánh như master -> origin / regacy, FeatureA -> origin / FeatureA. Như bạn thấy, tôi đã gõ sai tên.

Vì vậy, tôi muốn đổi tên một tên chi nhánh từ xa (origin / regacy → origin / legacy hoặc origin / master)

Tôi thử lệnh dưới đây:

git remote rename regacy legacy

Nhưng bảng điều khiển Git đã trả lại một thông báo lỗi cho tôi.

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

Làm thế nào tôi có thể giải quyết vấn đề này?




Câu trả lời:


808

Nhập mô tả hình ảnh ở đây


Có một số cách để thực hiện điều đó:

  1. Thay đổi chi nhánh địa phương của bạn và sau đó đẩy các thay đổi của bạn
  2. Đẩy nhánh đến từ xa với tên mới trong khi vẫn giữ tên gốc cục bộ

Đổi tên địa phương và từ xa

# 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>

Nhập mô tả hình ảnh ở đây


Chỉ đổi tên chi nhánh từ xa

Tín dụng: 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>

Lưu ý quan trọng:

Khi bạn sử dụng git branch -m(di chuyển), Git cũng đang cập nhật nhánh theo dõi của bạn với tên mới.

git remote rename legacy legacy

git remote renameđang cố gắng cập nhật phần từ xa trong tệp cấu hình của bạn. Nó sẽ đổi tên điều khiển từ xa với tên đã cho thành tên mới, nhưng trong trường hợp của bạn, nó không tìm thấy bất kỳ, vì vậy việc đổi tên không thành công.

Nhưng nó sẽ không làm những gì bạn nghĩ; nó sẽ đổi tên tên cấu hình cục bộ của bạn chứ không phải nhánh từ xa. 


Lưu ý Máy chủ Git có thể cho phép bạn đổi tên các nhánh Git bằng giao diện web hoặc các chương trình bên ngoài (như Sourcetree, v.v.), nhưng bạn phải nhớ rằng trong Git, tất cả công việc đều được thực hiện cục bộ, vì vậy nên sử dụng các lệnh trên Với công việc.


Bạn vẫn cần phải làm một cái gì đó, sau khi ở trên và khi tôi cố gắng kéo tôi nhận được tin nhắn:Your configuration specifies to merge with the ref ''refs/heads/old_name'
Krzysztof Krasnoyń

6
Đừng quên bỏ ngược dòng cũ:git checkout <new_name> ; git branch --unset-upstream
Miguel Ping

2
Nhận xét của @ MiguelPing rất quan trọng. Khi cố gắng đổi tên một nhánh tôi đã đẩy sang github, xóa, đổi tên cục bộ, nó và đẩy lại kết quả trong tên cũ được sử dụng lại. Nếu tôi --unset-upstreamtrước khi đẩy lại, nó hoạt động như dự định.
Adam T Ink

1
Có cách nào để tránh tự động đóng các PR mở trên nhánh tên cũ trên remote không? Đối mặt với điều này trong gitlab, nơi PR trên tên chi nhánh cũ đã bị đóng sau khi đẩy về nguồn gốc.
Himanshu Tanwar

141

Nếu bạn đã đặt tên cho một nhánh không chính xác VÀ đẩy nó vào kho lưu trữ từ xa, hãy làm theo các bước sau để đổi tên nhánh đó ( dựa trên bài viết này ):

  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 old-namechi nhánh từ xa và đẩy new-namechi nhánh địa phương :
    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 nhánh và sau đó:
    git push origin -u new-name


1
Sau 2 bước đầu tiên, nếu bạn nhận được thông báo lỗi về nhánh hiện tại trỏ đến nhánh không tồn tại trên repo từ xa, bước thứ 3 sẽ khắc phục điều này
Kevin Hooke

1
@ Dr1Ku Cần biết sự khác biệt giữa git push <remote> --delete old_name& git push origin :old-name new-nameđể xóa một nhánh.
Ashutosh Chamoli

Người dùng BitBucket: sửa lỗi ở Bước 2 nếu đổi tên master, trong Chi tiết Repo đặt nhánh mặc định thành nhánh mới. Lỗi là: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

37

Dường như có một cách trực tiếp:

Nếu bạn thực sự chỉ muốn đổi tên các nhánh từ xa (mà không đổi tên bất kỳ nhánh cục bộ nào cùng một lúc), bạn có thể thực hiện việc này bằng một lệnh như

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

Đổi tên chi nhánh từ xa trong Git

Xem câu trả lời ban đầu để biết thêm chi tiết.


1
Không hoạt động trong git 2.20.1Đã xóa nhánh cũ nhưng nhánh mới không được tạo.
Paul Razvan Berg

26

Nó cũng có thể được thực hiện theo cách sau.

Lúc đầu đổi tên chi nhánh địa phương, sau đó chi nhánh từ xa.

Đổi tên chi nhánh địa phương:

Nếu đăng nhập vào một chi nhánh khác,

git branch -m old_branch new_branch 

Nếu đăng nhập vào cùng một chi nhánh,

git branch -m new_branch

Đổi tên chi nhánh từ xa:

git push origin :old_branch    // Delete the remote branch

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

5

Nếu bạn đã đẩy nhầm tên sang điều khiển từ xa, hãy làm như sau:

  1. Chuyển sang chi nhánh địa phương bạn muốn đổi tên

    git checkout <old_name>

  2. Đổi tên chi nhánh địa phương

    git branch -m <new_name>

  3. Đẩy <new_name>nhánh cục bộ và đặt lại nhánh ngược dòng

    git push origin -u <new_name>

  4. Xóa <old_name>chi nhánh từ xa

    git push origin --delete <old_name>

Điều này được dựa trên bài viết này .


4

Đính kèm một Đoạn đơn giản để đổi tên chi nhánh hiện tại của bạn (cục bộ và nguồn gốc):

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

Giải thích từ tài liệu git:

chi nhánh git -mtùy chọn 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ớ việc đổ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.

Giới thiệu đặc biệt: (hoặc +: để cho phép cập nhật không chuyển tiếp nhanh) chỉ đạo Git đẩy các nhánh "khớp": đối với mọi nhánh tồn tại ở phía cục bộ, phía từ xa được cập nhật nếu một nhánh cùng tên đã tồn tại ở phía xa

--set-upstream Thiết lập thông tin theo dõi của vì vậy được coi là nhánh ngược dòng. Nếu không được chỉ định, thì nó mặc định cho nhánh hiện tại.


3

Không có phương pháp trực tiếp,

  1. Đổi tên chi nhánh địa phương ,

    Chi nhánh hiện tại của tôi là thạc sĩ

    git branch -m master_renamed #master_renamed là tên mới của chủ

  2. Xóa chi nhánh từ xa,

    git push origin --delete master #origin là remote_name

  3. Đẩy đổi tên chi nhánh vào điều khiển từ xa,

    git push origin master_renamed

Đó là nó...


Đẹp và đơn giản và chỉ có 3 bước. Chỉ có cải tiến tôi có thể đề xuất là git push -u origin master_renamedđặt chi nhánh thành chi nhánh theo dõi
ut9081

2

Điều này có thể được thực hiện ngay cả khi không đổi tên chi nhánh địa phương theo ba bước đơn giản:

  1. Chuyển đến kho lưu trữ của bạn trong GitHub
  2. Tạo một nhánh mới từ nhánh cũ mà bạn muốn đổi tên
  3. Xóa chi nhánh cũ

0

Tôi sử dụng các bí danh git này và công việc tự động khá nhiều:

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;'

Cách sử dụng: git di chuyển TỪ_BRANCH TO_BRANCH

Nó hoạt động nếu bạn có các tên mặc định như master, origin, v.v. Bạn có thể sửa đổi theo ý muốn nhưng nó cho bạn ý tưởng.


0

Tôi đã phải thực hiện các nhiệm vụ sau để đổi tên chi nhánh địa phương và từ xa:

# 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>

Làm thế nào nó khác với câu trả lời hiện có?
Himanshu Tanwar

0
  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:

    chi nhánh git -m tên mới

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

git branch -m old-name new-name
  1. Xóa nhánh từ xa tên cũ và đẩy nhánh cục bộ tên mới.

    git đẩy nguồn gốc: tên cũ tên mới

  2. Đặ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 đẩy nguồn gốc -u tên mới

Tất cả các thiết lập!


0
  • Đổ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 ở trên một chi nhánh khác tại thời điểm hiện tại:

git branch -m old-name new-name
  • Xóa nhánh từ xa tên cũ và đẩy nhánh cục bộ tên mới.

Ở trên nhánh mục tiêu và:

git push origin :old-name new-name
  • Đặt lại nhánh ngược dòng cho nhánh cục bộ tên mới.

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

git push origin -u new-name
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.