2012-04-10 35 views
11

Giả sử kịch bản sau:Git hợp nhất giữa hai thư mục, không phải chi nhánh

Tôi có một dự án git có thư mục có tên project. Bên trong thư mục này tôi đã thực hiện một số cam kết. Sau đó, với cp -r Tôi đã sao chép thư mục này vào một thư mục có tên là project-with-feature-b, tức là tôi đã tạo thủ công chi nhánh.

Bây giờ tôi muốn hợp nhất hai thư mục này như thể chúng là hai nhánh, có cách nào để thực hiện điều đó bằng git không?

Để cụ thể hơn cho vấn đề của tôi. Tôi có một kho svn mà tôi đang sử dụng với công cụ git-svn để sao chép nó. Và tôi không thể sử dụng tùy chọn -T/-b/-t nhưng tôi muốn thực hiện hợp nhất.

+0

Bạn có thể khởi tạo kho lưu trữ git trong 'project' và' project-with-feature-b' và sau đó thực hiện dự án 'git pull-with-feature-b' trong' project'? –

+0

Vấn đề với cách giải quyết này là nó không sử dụng câu chuyện 'project-with-feature-b' để cải thiện việc hợp nhất. –

+0

Bạn đã thử 'git pull --rebase project-with-feature-b' chưa? Nó sẽ lưu lịch sử kết hợp của hai dự án của bạn. –

Trả lời

4

Có, bạn về mặt kỹ thuật có thể thực hiện việc này, nhưng chỉ vì không quá muộn để sửa lỗi của bạn. Bạn cần phải đi ngược thời gian và thực hiện điều này một cách chính xác:

  1. Di chuyển thư mục project-with-feature-b của bạn bên ngoài repo git của bạn:

    $ mv project-with-feature-b .. 
    
  2. Quay trở lại thông qua git log và tìm ra cam kết ID của người cuối cùng cam kết trước khi bạn tạo thư mục project-with-feature-b. Nếu bạn chưa thực hiện bất kỳ cam kết nào "bên trong" thư mục project-with-feature-b, bạn có thể bỏ qua bước này.

  3. Tạo chi nhánh mới có tên là feature-b dựa trên ID cam kết đó. Nếu bạn bỏ qua bước 2, bỏ qua <commit-id-from-step-2>

    $ git branch feature-b <commit-id-from-step-2> 
    $ git checkout feature-b 
    
  4. Trong chi nhánh feature-b, thay thế các thư mục project với dự phòng của bạn project-with-feauture-b

    $ rm -rf project 
    $ mv ../project-with-feature-b project 
    $ git add project 
    $ git commit -m "Add feature-b" 
    
  5. Quay trở lại chi nhánh tổng thể của bạn và sáp nhập chi nhánh feature-b của bạn vào master

    $ git merge --no-ff feature-b 
    

Trong tương lai, bạn nên sử dụng các chi nhánh như trên trước bạn bắt đầu thực hiện công việc. Tìm hiểu cách sử dụng các công cụ chính xác thay vì cách bạn nghĩ rằng chúng sẽ hoạt động.

+2

Vấn đề với điều này là lịch sử "feature-b" bị mất. – KurzedMetal

1

Câu hỏi này rất cũ, tôi đã tham gia gần đây.

Tôi đang sử dụng ubuntu và sử dụng meld để giải quyết các sự cố hợp nhất.

Vì vậy, nếu tôi có 2 thư mục của cùng một ứng dụng, có thể có những thay đổi nhỏ.

tôi sẽ làm điều này trong các thiết bị đầu cuối

meld ./app_branch_master ./app_branch_dev 

này sẽ mở ra cả hai thư mục, Meld sẽ mất thời gian để so sánh cả các thư mục. Nó sẽ cho bạn thấy những gì có ở bên tay trái và những gì ở phía bên tay phải. Bạn cũng có thể di chuyển ít mã từ đó.

Đó là cách tôi thực hiện.

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