2017-07-14 17 views
11

Tôi đã sử dụng git diff origin thường trong quá khứ.gây tử vong: đối số mơ hồ 'xuất xứ': bản sửa đổi chưa biết hoặc đường dẫn không có trong cây đang hoạt động

Trong một môi trường khác, nó không hoạt động. Tôi không có đầu mối tại sao.

[email protected]> git diff origin 
fatal: ambiguous argument 'origin': unknown revision or path 
     not in the working tree. 
Use '--' to separate paths from revisions, like this: 
'git <command> [<revision>...] -- [<file>...]' 

Tình trạng:

[email protected]> git status 
On branch master 
nothing to commit, working directory clean 

Remotes:

[email protected]> git remote -v 
origin https://example.com/repos/djangotools (fetch) 
origin https://example.com/repos/djangotools (push) 

Version:

[email protected]> git --version 
git version 2.7.4 

Với "phiên bản git 1.8.1.4" git diff origin công trình.

BTW tôi thấy msg err tương tự nếu tôi sử dụng "git diff nguồn gốc/master"

BTW2, tôi nghĩ rằng "/ master" là không cần thiết. Mặc định sane là so sánh nhánh địa phương với cùng một nhánh trên trang từ xa.

+0

Điều khiển từ xa như 'origin' không bao giờ được mong đợi trong bất kỳ lệnh' git diff' nào khác. – ElpieKay

+0

@ElpieKay nó hoạt động, tôi đã thử nghiệm nó với 'git phiên bản 1.8.1.4' – guettli

+1

Tôi đã thử. Có nó hoạt động. Có vẻ như 'git diff origin' là viết tắt của' git diff master origin/master' nếu nhánh hiện tại là 'master'. Nếu nhánh hiện tại không có nhánh theo dõi từ xa, nhánh sẽ không hoạt động. – ElpieKay

Trả lời

12

Lệnh git diff thường mong đợi một hoặc nhiều băm cam kết tạo ra khác biệt của bạn. Bạn dường như đang cung cấp tên của một điều khiển từ xa.

Nếu bạn có chi nhánh tên là origin, mã băm cam kết ở đầu nhánh sẽ được sử dụng nếu bạn cung cấp origin cho lệnh khác, nhưng hiện tại (không có nhánh tương ứng) lệnh sẽ tạo lỗi nhìn thấy. Có thể là trường hợp bạn đã từng làm việc với chi nhánh có tên origin.

Một thay thế, nếu bạn đang cố gắng để xem sự khác biệt giữa các chi nhánh địa phương của bạn, và một chi nhánh trên một xa sẽ là một cái gì đó dọc theo dòng:

git diff origin/<branchname>

git diff <branchname> origin/<branchname>

Or other documented variants .

Edit: Sau khi đọc thêm, tôi nhận ra tôi hơi sai, git diff origin là viết tắt cho diffing chống lại người đứng đầu điều khiển từ xa quy định, vì vậy git diff origin = git diff origin/HEAD (compare local git branch with remote branch?, Why is "origin/HEAD" shown when running "git branch -r"?)

Nghe có vẻ như bạn nguồn gốc không có HEAD, trong trường hợp của tôi, điều này là do từ xa của tôi là một kho lưu trữ trống chưa bao giờ có một bộ HEAD.

Chạy git branch -r sẽ hiển thị cho bạn nếu origin/HEAD được đặt và nếu có thì chi nhánh nào trỏ đến (ví dụ: origin/HEAD -> origin/<branchname>).

+2

cảm ơn bạn rất nhiều. Có, 'git branch -r' rỗng trong một repo và cái kia không rỗng. Đó là lý do tại sao 'git diff origin' hoạt động trong một repo chứ không phải trong repo khác. – guettli

+0

Điều đó có ý nghĩa, tôi cũng đã học được điều gì đó = D – Chris

1

này làm việc cho tôi trên chiến thắng thay REL_PATH_TO_FILE với đường dẫn tương đối đến tập tin để loại bỏ https://help.github.com/articles/removing-sensitive-data-from-a-repository/ Các tài liệu nói đường dẫn đầy đủ - nhưng điều đó đối với tôi errored -so tôi đã cố gắng con đường rel và nó làm việc.

<from the repo dir>git filter-branch --force --index-filter "git rm --cached --ignore-unmatch REL_PATH_TO_FILE" --prune-empty --tag-name-filter cat -- --all 
Các vấn đề liên quan