2011-01-13 34 views
45
[email protected]:/media/dev/belgravia$ git branch 
* (no branch) 
    master 

Tôi không chắc chắn điều này đã xảy ra như thế nào, nhưng có cách nào tôi có thể hợp nhất không có chi nhánh vào chương trình chính không. Tôi không chắc làm thế nào tôi có thể hợp nhất hai chi nhánh khi một trong số họ không phải là một chi nhánh. Các cam kết trong không có chi nhánh dường như lỏng lẻo. Tôi sợ rằng checkout master sẽ gây ra mất dữ liệu.Hợp nhất (không có chi nhánh) vào tổng thể

+0

Trong trường hợp của tôi, điều đó vừa xảy ra sau một xung đột trong khi 'git rebase'. Chỉ cần làm 'git rebase --continue' và nó sẽ đưa bạn trở lại nhánh bạn đang ở trước đó. – Frank

+0

cũng liên quan: http://stackoverflow.com/questions/366093/git-commit-against-tag-with-no-branch – rogerdpack

Trả lời

69

Sử dụng git show để nhận ID cam kết SHA1 của HEAD hiện tại. Với thông tin đó, bạn không thể mất những cam kết đó.

Sau đó, chuyển sang làm chủ và:

git merge abc123 

nơi abc123 là SHA1 từ bước đầu tiên.

+5

Những gì tôi đã kết thúc là 'branch temp',' checkout master', 'merge temp' . Điều đó không di chuyển chi nhánh vào một nhánh thực tế, sau đó tôi có thể hợp nhất nó. Giải pháp của bạn là đơn giản hơn tuy nhiên. – Keyo

+1

@Keyo: Nó không di chuyển "không nhánh" vào nhánh. Nó tạo ra một chi nhánh tại HEAD hiện tại của bạn (hiện tại là cam kết đã thanh toán). Khi chi nhánh git nói "không có chi nhánh", điều đó có nghĩa là: bạn không có chi nhánh nào hiện đang được kiểm tra. Điều này còn được gọi là HEAD tách rời. – Cascabel

+0

@Jefromi Cảm ơn bạn đã giải thích. – Keyo

3

Lý do bạn đã (không có chi nhánh) được bạn đã làm:

git checkout REMOTE_BRANCH_NAME 
  • Để cho bạn làm việc cục bộ trên chi nhánh mà bạn phải làm: git checkout -b local_branch_new_name
  • bây giờ làm một: git branch - a
  • bạn sẽ thấy:

local_branch_new_na tôi

master 
  • Từ đây bạn có thể hợp nhất một chi nhánh thành bậc thầy theo cách thông thường. chuyển sang tổng thể và làm:

    git merge local_branch_new_name

4

lẽ bạn có thể cam kết nó vào chi nhánh hiện tại (không chi nhánh)

Sau đó, bạn phải làm:

git reflog 

Sau đó, bạn có thể nhận được id của cam kết này như 1d84d08

làm:

git checkout master 
git merge 1d84d08 
+0

đơn giản và tốt nhất – onalbi

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