2010-06-11 38 views
229

Tôi đã theo trạng thái làm việc câyGit: không thể hoàn tác thay đổi địa phương (lỗi: con đường ... là chưa hợp nhất)

$ git status foo/bar.txt 
# On branch master 
# Unmerged paths: 
# (use "git reset HEAD <file>..." to unstage) 
# (use "git add/rm <file>..." as appropriate to mark resolution) 
# 
#  deleted by us:  foo/bar.txt 
# 
no changes added to commit (use "git add" and/or "git commit -a") 

file foo/bar.txt là có và tôi muốn để có được nó vào "nhà nước không thay đổi" một lần nữa (tương tự như 'svn Revert'):

$ git checkout HEAD foo/bar.txt 
error: path 'foo/bar.txt' is unmerged 
$ git reset HEAD foo/bar.txt 
Unstaged changes after reset: 
M  foo/bar.txt 

Bây giờ nó là nhận được khó hiểu:

$ git status foo/bar.txt 
# On branch master 
# Changes to be committed: 
# (use "git reset HEAD <file>..." to unstage) 
# 
#  new file: foo/bar.txt 
# 
# Changed but not updated: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
#  modified: foo/bar.txt 
# 

Các tập tin tương tự trong cả hai phần, ne w được sửa đổi? Tôi nên làm gì?

+1

Tôi muốn ai đó có thể giải thích làm thế nào để chúng ta đi vào tình huống này, tại sao * * nó sẽ xảy ra, và tại sao các giải pháp hoạt động. –

Trả lời

389

Bạn đã làm theo cách sai. Bạn có nghĩa là để thiết lập lại đầu tiên, để unstage các tập tin, sau đó kiểm tra, để hoàn nguyên thay đổi địa phương.

Hãy thử điều này:

$ git reset foo/bar.txt 
$ git checkout foo/bar.txt 
+0

Cảm ơn; làm việc như người ở! Tôi đã phải cam kết (_not_ với -a arg, những thay đổi có liên quan đã được dàn dựng) và sau đó tôi đã có thể đẩy/kéo như bình thường. – Patrick

+15

Đối với tôi, yêu cầu:
$ git reset - foo/bar.txt
$ git checkout - foo/bar.txt
(Chú ý dấu "-" ở giữa) – Jan

+0

Đối với tôi, đặt lại git reset * tất cả * Các tệp, không chỉ là tệp được liệt kê .. Tôi có làm gì sai không? – Zds

-3
git checkout foo/bar.txt 

bạn đã thử điều đó chưa? (không có từ khóa CHÍNH)

Tôi thường hoàn nguyên các thay đổi của mình theo cách này.

+0

Lỗi điển hình khi thử 'thanh toán' ở giữa quá trình hợp nhất: ' $ git co đường dẫn/đến/tệp' = kết quả => 'lỗi: đường dẫn 'đường dẫn đến/tệp' chưa được nhấn ' => , đầu tiên chạy: '$ git reset path/to/file', và sau đó' git checkout path/to/file' sẽ hoạt động. – michael

+0

Không chỉ định HEAD sẽ thực hiện kiểm tra git checkout từ chỉ mục, hoạt động yếu hơn (nguồn nội dung là chỉ mục thay vì HEAD). Hơn nữa, tôi không nghĩ rằng điều đó tạo sự khác biệt trong trường hợp này chút nào - với vấn đề cụ thể mà câu hỏi đã nêu. Đã * bạn * thử điều đó? – Kissaki

-4

tôi thấy git stash rất hữu ích cho việc xử lý thời gian của tất cả các nước 'bẩn'.

+4

stash không hoạt động khi bạn đã thay đổi unmerged – Rob

+3

Nếu bạn thấy nó hữu ích, xin vui lòng cho một lời giải thích về cách nó sẽ giúp đỡ trong trường hợp cụ thể này. Làm thế nào bạn sẽ sử dụng nó ở đây? – Kissaki

9
git checkout origin/[branch] . 
git status 

// Ghi chú chấm (.) Ở cuối. Và tất cả sẽ tốt

21

này đã làm việc một cách hoàn hảo đối với tôi:

$ git reset -- foo/bar.txt 
$ git checkout foo/bar.txt 
Các vấn đề liên quan