2013-04-11 29 views
26

giả sử chúng ta có chi nhánh hotfixes được tạo từ master. chúng tôi đã thêm cam kết vào hotfixes, nhưng những cam kết đó không hữu ích, vì vậy bây giờ chúng tôi muốn bắt đầu lại từ một bản sao mới của master một lần nữa.Làm thế nào để thiết lập lại một chi nhánh đến một chi nhánh khác với git?

để làm rõ hơn, đây là công việc tham khảo: http://nvie.com/posts/a-successful-git-branching-model/

chúng ta hãy cũng nói rằng chúng tôi đẩy hotfixes đến origin từ xa vì chúng ta có một bộ khủng khiếp lên và đó là cách duy nhất để kiểm tra một cái gì đó, vì vậy chúng ta cần phải đặt lại nhánh cũng trên máy chủ từ xa.

cách đặt lại hotfixes thành bản sao của master?

Trả lời

29

Bạn có nghĩa là bạn muốn đẩy số master cục bộ của mình đến chi nhánh từ xa hotfixes? Như thế này:

git push origin +master:hotfixes 

Tuy nhiên, điều này yêu cầu bạn được phép viết lại lịch sử ở phía xa.

+0

Đây có phải là cú pháp chính xác không? Khi tôi làm điều này, tôi có một nhánh từ xa mới với dấu cộng (+) trong tên. Tôi đã phải di chuyển dấu cộng như 'git push origin + master: hotfixes'. Đây là theo thông số git spec: http://git-scm.com/docs/git-push – jwynveen

+0

@jwynveen Bạn nói đúng, cố định. –

+6

fyi, dấu cộng là viết tắt để thực hiện '- force' trong quá trình đẩy: http://stackoverflow.com/questions/1475665/why-git-push-helloworld-mastermaster-instead-of-just-git- push-helloworld –

6

Nếu tôi hiểu chính xác câu hỏi của bạn, những gì bạn đang tìm kiếm là cách di chuyển con trỏ chi nhánh origin/hotfixes để trỏ đến bản sửa đổi hiện tại của origin/master.

Nếu đó là trường hợp, các thiết lập của lệnh nên làm việc (giả sử bạn đã có kiểm tra ra hotfixes trong repo git địa phương của bạn bất cứ lúc nào trong quá khứ):

# git branch -f does not allow modifying the currently checked out 
# branch, so checkout any other branch than hotfixes 
git checkout <SOME_OTHER_BRANCH_THAN_HOTFIXES> 

# Move the branch pointer of hotfixes to the commit currently 
# pointed by origin/master 
git branch -f hotfixes origin/master 

# Force push the history rewrite in the hotfixes branch 
# into origin 
git push -f origin hotfixes 
+0

'Chi nhánh hotifxes được thiết lập để theo dõi chủ nhánh chi nhánh từ xa.' - Không chắc đó là điều mong muốn ở tất cả –

36

đây là cách tôi đã làm nó với lệnh Git cơ bản:

git checkout hotfixes 
git reset --hard master 
git push --force origin hotfixes 

tất nhiên điều quan trọng là phải thông báo cho mọi người làm việc theo số hotfixes. rất có thể họ sẽ phải xóa bản sao cục bộ của họ và bắt đầu từ một bản sao mới. một ý tưởng thay thế, ít xâm lấn hơn là tạo một chi nhánh mới:

git checkout master 
git branch -tb hotfixes-2 # this creates branch `hotfixes-2` from a copy of `master` 
git push origin HEAD # this creates `hotfixes-2` on the remote server 
+0

Tôi thích cách này tốt hơn. ít bị lỗi. –

+0

Cảm ơn bạn đã ưu tiên, nhưng tôi tò mò muốn biết tại sao bạn thấy ít bị lỗi hơn – danza

+1

Tôi nên đã tuyên bố rằng đó là sở thích cá nhân và không cố gắng nêu ra sự thật. Với tôi, nó đòi hỏi nhiều hành động hơn, mô tả tốt hơn những gì bạn đang làm thay vì chỉ cần đẩy đến một điều khiển từ xa khác, từ đó, làm cho tôi ý thức hơn về những gì tôi đang làm. Ngoài ra, cờ bổ sung '-f' và' reset --hard' đã cảnh báo với các công cụ GUI như sourcetree chẳng hạn .. –

1

Câu trả lời ở đây chắc chắn. Tôi đã cần sự thay đổi chính xác này khi đặt lại nhánh dàn dựng của mình thành thạo. Trong trường hợp đó tôi muốn cả hai thiết lập lại nguồn gốc để phù hợp với chủ và cũng thiết lập lại địa phương của tôi để phù hợp với điều đó. Vì vậy, đây là một bí danh git cho phép bạn chuyển vào tên nhánh và thực hiện cả hai lệnh trong một lần di chuyển. (Đó là một chút nguy hiểm)

reorient = "!f() { git push origin +master:$1 && git reset --hard origin/$1 ; }; f" 

Sau đó sử dụng nó như:

git reorient hotfixes 

Những câu trả lời trên là hoàn toàn chính xác. Nhưng điều này sẽ chỉ cho phép ít tổ hợp phím hơn và quay vòng nhanh hơn! Hy vọng nó giúp.

+0

tôi sẽ không bọc một 'git reset --hard' trong một bí danh dễ dàng ... tôi muốn ngại quên và mất những thay đổi quan trọng – danza

+1

Vâng. Như tôi đã nói trong phần giải thích "nó hơi nguy hiểm". Tuy nhiên, trong một số trường hợp, bạn có thể thấy mình làm điều này một cách thường xuyên, trong trường hợp đó bạn có thể muốn một cái gì đó nhanh hơn. –

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