Chuyển đổi tên chi nhánh trong git


103

Có thể có nhiều cách để hỏi câu hỏi này, vì vậy đây là một mô tả vấn đề. Tôi đang làm việc trên tổng thể và cam kết một số thứ và sau đó quyết định tôi muốn tạm dừng công việc đó. Tôi đã sao lưu một vài cam kết và sau đó phân nhánh từ trước khi bắt đầu công việc tào lao của mình. Thực tế, điều này hoạt động tốt, tôi vừa có một nhánh khác làm nhánh phát triển chính của mình. Tôi đang tự hỏi làm thế nào tôi có thể thay đổi mọi thứ xung quanh vì vậy tôi đang làm việc trên master một lần nữa nhưng nó không có công việc vụn vặt của tôi và nói rằng công việc đang ở một nhánh khác.

Một số cách có thể được hỏi / giải quyết vấn đề này: Làm cách nào để đổi tên nhánh chính của tôi thành một cái gì đó khác và sau đó đổi tên cái khác thành nhánh? Làm cách nào để sao lưu chính và sau đó khiến tất cả các cam kết mà tôi đã sao lưu trước đây nằm trên một nhánh khác?

Cảm ơn vì tất cả các câu trả lời (nhanh chóng)! Tất cả đều tốt.

Câu trả lời:


144

Ngoài các nhận xét khác, bạn có thể thấy việc chuyển -m (chuyển) sang git-branch rất hữu ích. Bạn có thể đổi tên cái cũ của mình thành cái khác, sau đó đổi tên nhánh mới của bạn thành cái chủ:

git branch -m master crap_work
git branch -m previous_master master

Tùy thuộc vào quy trình làm việc của bạn, bạn cũng có thể muốn thay đổi bất kỳ tham chiếu nhánh nào trong .git / config. Tôi đã thay đổi [branch "crap_work"]thành đọc [branch "master"]để cái đó vẫn sẽ đồng bộ hóa với origin/master. Tất nhiên, trạng thái của hai repos là như vậy mà điều này vẫn có ý nghĩa.
Eponymous,

3
Điều này không đổi tên các chi nhánh trên repo từ xa, chỉ trên repo cục bộ.
Smohadjer

1
@smohadjer Để đổi tên điều khiển từ xa, bạn sẽ làm git push -uf origin mastergit push -u origin crap_work.
zyy

31

Tôi nghĩ bạn nên xem xét một chiến lược phát triển khác để ngăn chặn những vấn đề như thế này. Một điều có vẻ hiệu quả nhất đối với tôi là không bao giờ phát triển trực tiếp trên nhánh chính của tôi. Bất kể những thay đổi tôi đang thực hiện, tôi luôn tạo một nhánh mới cho mã mới:

git checkout -b topic / topic_name master

Từ đó, tôi có thể thực hiện các thay đổi đối với kho lưu trữ công khai:

git push pu topic / topic_name

hoặc cuối cùng chỉ cần hợp nhất nó trở lại với nhánh chính của tôi:

git checkout master && git merge topic / topic_name

Nếu bạn thực sự cần quay lại một thời điểm cũ hơn và đặt nó làm chính, bạn có thể đổi tên nhánh hiện tại thành một cái gì đó khác và sau đó kiểm tra phiên bản cũ hơn để làm chính của bạn:

 git branch -m master rác
 git co -b master old_sha1_value

Đó là một chính sách tốt. Và nghĩ lại, tôi đã thấy điều đó được thực hành ở những nơi khác. Cảm ơn.
Rimian

14

Bắt đầu master, tạo một nhánh được gọi in-progress, sau đó đặt lại mastervề cam kết trước đó.

$ git branch in-progress
$ git reset --hard HEAD^

1
Tôi thấy không có lý do gì để điều này bị bỏ phiếu. Tôi đã tự mình làm điều đó một vài lần, trước khi tôi học về nhánh -m và nhận ra rằng chủ nhân không bị ràng buộc bất biến như tên cố định của một nhánh.
jumphoppy

7

Điều này tương đối dễ dàng:

git checkout -b fake_master master # fake_master now points to the same commit as master
git branch -D master               # get rid of incorrect master
git checkout -b master real_master # master now points to your actual master
git checkout master                # optional -- switch on to your master branch

1
Yeap, cuối cùng là hoàn toàn tùy chọn - git checkout -btạo một nhánh làm cho nó hoạt động.
BorisOkunskiy

0

Điều này sẽ đặt chủ của bạn đến bất kỳ điểm nào trong một bước:

git checkout -B master new_point
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.