2011-10-18 24 views
20

Tôi đã có một repo git với một chi nhánh, ngoài các chủ. Tôi muốn làm cho một nhánh trở thành chủ nhân - ghi đè hoàn toàn chủ nhân. Rõ ràng tôi có thể làm một hợp nhất, nhưng điều này sẽ dẫn đến nhiều xung đột, và nó có vẻ như rất nhiều công việc để giải quyết chúng khi tôi biết tôi luôn luôn muốn các tập tin từ các chi nhánh bổ sung, không phải là chủ.Git: có thể biến chi nhánh thành chủ, bỏ qua bất kỳ xung đột hợp nhất nào không?

Có thể chuyển đổi nhánh thành thành thạo hay kết hợp và yêu cầu git luôn ưu tiên tệp từ một nhánh này qua nhánh khác?

Cảm ơn trước!

Trả lời

6

Nếu bạn là nhà phát triển duy nhất truy cập vào kho lưu trữ này và nó không được chia sẻ với các nhà phát triển khác, điều này khá dễ làm bằng cách tạo các nhánh mới. Trước khi bạn bắt đầu, hãy chắc chắn rằng kho lưu trữ của bạn là sạch (tất cả các sửa đổi đã được kiểm tra vào nhánh hiện tại).

Thực hiện một sao lưu của chi nhánh chủ cũ của mình:

git checkout master 
git branch oldMaster 

Xóa chủ cũ và tạo thạc sĩ mới:

git checkout topicBranch 
git branch -D master 
git branch master 

Nếu lưu trữ trên kho lưu trữ trên một máy chủ từ xa, bạn sẽ cần phải cập nhật điều khiển từ xa:

git push --force remoteName master:master 

QUAN TRỌNG: Nếu các nhà phát triển khác đã kéo từ kho lưu trữ của bạn , phương pháp này sẽ tạo ra lỗi cho họ trong lần sau khi họ kéo từ repo của bạn hoặc bạn đẩy đến repo của họ.

0

tôi vẫn không phải là một chuyên gia trong git, nhưng có vẻ như bạn muốn rebase lệnh:

git checkout branch_name 
git rebase master 
git checkout master 

Hình như điều này sẽ tự động hợp nhất tất cả các thay đổi vào thạc sĩ tại điểm mà bạn' phân nhánh lại được tách ra từ master, sau đó áp dụng lại các thay đổi hiện tại cho master ontop của những thay đổi đó (vì vậy bạn sẽ không phải hợp nhất).

Tất nhiên nếu bạn chỉ muốn ghi đè hoàn toàn chủ, tôi nghĩ bạn chỉ có thể đẩy chi nhánh đó vào kho lưu trữ chính nếu bạn sử dụng tùy chọn lực. Một cái gì đó như thế này:

git push --force origin branch_name 

Sau đó từ xa của bạn sẽ có tất cả những thay đổi từ chi nhánh của mình trong ngành thạc sĩ, và bạn có thể kéo nó lại ra ...

git checkout master 
git pull --force origin 
23

Bạn có thể làm điều này trong một bắn với lệnh đặt lại:

git checkout master 
git reset --hard topicBranch 

Đặt lại khó sẽ làm cho nhánh hiện tại trỏ đến cam kết đã cho. Điều này sẽ vứt bỏ bất kỳ cam kết nào trên bản gốc mà chưa có trên nhánh chủ đề; chúng sẽ không được hợp nhất.

Cảnh báo tương tự cho các lần rebases cũng áp dụng ở đây: không làm điều này nếu bạn đã đẩy nhánh chính vào bất kỳ kho lưu trữ nào được chia sẻ với các nhà phát triển khác.

+1

+1, nhưng có lẽ bạn nên thêm cảnh báo thông thường là 'git reset --hard' sẽ xóa tất cả các thay đổi không được cam kết. –

+0

Bạn có thể đặt cảnh báo trước lần sau không, cuối cùng, lol – Helzgate

+2

Tôi phải thực hiện thêm một bước.Git nghĩ rằng có những thay đổi để kéo, khi tôi đã làm một git kéo tôi đã hợp nhất xung đột. Thay vào đó, tôi đã thực hiện lệnh 'git push -f' để ép buộc –

Các vấn đề liên quan