Lỗi hợp nhất Git


264

Tôi có một chi nhánh git được gọi là 9-sign-in-out với mã hoạt động hoàn hảo, và tôi muốn biến nó thành chủ. Tôi hiện đang ở chi nhánh chính.

$ git branch
9-sign-in-out
* master

Tôi đang cố gắng chuyển sang 9-sign-in-outchi nhánh, nhưng nó không cho phép tôi:

$ git checkout 9-sign-in-out
app/helpers/application_helper.rb: needs merge
config/routes.rb: needs merge
error: you need to resolve your current index first

Bất kỳ ý tưởng làm thế nào tôi có thể bỏ qua tất cả các lỗi chi nhánh chủ và biến 9-sign-in-outchi nhánh thành chủ? Có lẽ git rebase ? Nhưng tôi không muốn mất mã trong 9-sign-in-outchi nhánh.


Bạn có nghĩa là bạn không muốn mất mã không đăng ký trong 9 lần đăng nhập?
Mauvis Ledford

@Mauvis: Tôi đã cam kết mã của mình trong chi nhánh đăng nhập 9 chi nhánh.
Sayanee

Câu trả lời:


531

Thật đáng để hiểu những thông báo lỗi đó có nghĩa là gì - needs mergeerror: you need to resolve your current index firstchỉ ra rằng việc hợp nhất không thành công và có những xung đột trong các tệp đó. Nếu bạn đã quyết định rằng bất cứ sự hợp nhất nào bạn đang cố gắng thực hiện đều là một ý tưởng tồi, bạn có thể đưa mọi thứ trở lại bình thường với:

git reset --merge

Tuy nhiên, nếu không, bạn nên giải quyết các xung đột hợp nhất đó, như được mô tả trong hướng dẫn git .


Khi bạn đã xử lý vấn đề đó bằng một trong hai kỹ thuật, bạn sẽ có thể kiểm tra 9-sign-in-outchi nhánh. Vấn đề với việc đổi tên của bạn 9-sign-in-outthành master, như được đề xuất trong câu trả lời của wRAR là nếu bạn đã chia sẻ chi nhánh chính trước đó với bất kỳ ai, điều này sẽ tạo ra vấn đề cho họ, vì nếu lịch sử của hai chi nhánh chuyển hướng, bạn sẽ xuất bản viết lại lịch sử.

Về cơ bản những gì bạn muốn làm là hợp nhất nhánh chủ đề của bạn 9-sign-in-outvào masternhưng chính xác giữ các phiên bản của các tệp trong nhánh chủ đề. Bạn có thể làm điều này với các bước sau:

# Switch to the topic branch:
git checkout 9-sign-in-out

# Create a merge commit, which looks as if it's merging in from master, but is
# actually discarding everything from the master branch and keeping everything
# from 9-sign-in-out:
git merge -s ours master

# Switch back to the master branch:
git checkout master

# Merge the topic branch into master - this should now be a fast-forward
# that leaves you with master exactly as 9-sign-in-out was:
git merge 9-sign-in-out

1
Mark, cuối cùng tôi đã hiểu những gì bạn nói sau khi tôi gặp lỗi một lần nữa để hợp nhất bây giờ. Tuy nhiên, tôi có lỗi này ::::::::::::: Sayanee: twitter sweska $ git checkout master master thay đổi của bạn hoặc bỏ qua chúng trước khi bạn có thể chuyển nhánh. Hủy bỏ ::::::::::::::::: bằng mọi cách, để sử dụng webrat.log trong nhánh và làm cho nó hợp nhất với chủ?
Sayanee

1
@Sayanee: đó là một lỗi khác nhau, phát sinh từ các trường hợp khác nhau và tốt hơn là nên hỏi một câu hỏi mới về điều đó nếu bạn nhầm lẫn về nó. (Tuy nhiên, ngắn gọn, git ngăn bạn chuyển đổi các chi nhánh vì điều đó sẽ ghi đè lên các thay đổi không được cam kết trong webrat.log.)
Mark Longair

Tôi đã từng chỉ rm toàn bộ và reclone. Nhưng cái này đẹp hơn
sudo

43
git checkout -f 9-sign-in-out # change branch, discarding all local modifications
git branch -M master # rename the current branch to master, discarding current master

3
Tôi nghĩ rằng nó sẽ sạch hơn nhiều để thiết lập lại hợp nhất như Mark đề xuất bên dưới thay vì buộc thanh toán.
Thomas

8

như đề xuất trong git status,

Unmerged paths:                                                                                                                                
(use "git add <file>..." to mark resolution)                                                                                                 

    both modified:   a.jl                                  
    both modified:   b.jl

Tôi đã sử dụng git addđể kết thúc việc sáp nhập, sau đó git checkouthoạt động tốt.



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.