Git: Làm thế nào để khác biệt hai tập tin khác nhau trong các chi nhánh khác nhau?


170

Tôi có hai tập tin khác nhau trong các chi nhánh khác nhau. Làm thế nào tôi có thể khác chúng trong một lệnh?

Cái gì đó như

# git diff branch1/foo.txt branch2/foo-another.txt

Tôi có thể kiểm tra các tập tin khác, tìm nó và khôi phục, nhưng đó là giải pháp khá bẩn.


3
@EugenKonkov Đây không phải là một bản sao vì câu hỏi này là hỏi làm thế nào để tìm các tệp khác nhau trong các nhánh khác nhau. Câu hỏi được liên kết chỉ hỏi làm thế nào để tìm khác biệt cùng một tệp trong các nhánh khác nhau.
Steve

Câu trả lời:


214
git diff branch1:full/path/to/foo.txt branch2:full/path/to/foo-another.txt

Bạn cũng có thể sử dụng các đường dẫn tương đối:

git diff branch1:./relative/path/to/foo.txt branch2:./relative/path/to/foo-another.txt

9
Tuyệt vời! Tôi chắc chắn không thể suy ra điều đó từ git help diff. Nhân tiện, những cái đó không phải là tên nhánh trước dấu hai chấm, nhưng có thể là bất kỳ loại tham chiếu cam kết nào (ví dụ: giá trị SHA-1).
Steve Jorgensen

3
Lưu ý quan trọng: Git trên windows yêu cầu các mục đầy đủ phải là một tên unix. tức là nhánh1: full \ path \ to \ foo.txt không thành công, trong khi nhánh1: full / path / to / foo.txt hoạt động tốt, cũng như full \ path \ to \ foo.txt (không có nhánh)
Eris

sử dụng git difftoolvà sau đó thả branch2:và điều đó sẽ cho phép bạn chỉnh sửa một tệp trong cây làm việc hiện tại (để mang lại các thay đổi từ branch1)
gMale

Đã thử trên linux với phiên bản git 1.8.3.1, chỉ cho phép các đường dẫn tương đối.
Sola Yang

21

Sidenote: không cần đường dẫn đầy đủ, bạn có thể bắt đầu với ./đường dẫn tương đối. Nó có thể có ích đôi khi.

git diff branch1:./relative/path/to/foo.txt branch2:./relative/path/to/foo-another.txt

2

Có nhiều cách để so sánh các tệp từ hai nhánh khác nhau. Ví dụ:

  • Nếu tên giống hoặc khác nhau:

     git diff branch1:file branch2:file
    

    Thí dụ:

     git diff branch1:full/path/to/foo.txt branch2:full/path/to/foo-another.txt
    
  • Chỉ khi tên giống nhau và bạn muốn so sánh thư mục làm việc hiện tại của mình với một số chi nhánh:

    git diff ..someBranch path/to/file
    

    Thí dụ:

    git diff ..branch2 full/path/to/foo.txt
    

    Trong ví dụ này, bạn đang so sánh tệp từ nhánh thực tế của mình với tệp trong nhánh chính.

Bạn có thể kiểm tra phản hồi này:

So sánh một tệp từ hai nhánh khác nhau trong Git


1

Trả lời ngoài chủ đề - xem bình luận

Chỉ cần thêm nó cho tôi thấy nó là một cú pháp rất đơn giản:

git diff <branch1> <branch2> <filepath>

Cũng hoạt động với các ref tương đối như ví dụ:

# compare the previous committed state from HEAD with the state branch1 was 3 commits ago
git diff HEAD^ <branch1>~3 <filepath>

1
OP đặc biệt yêu cầu "các tệp khác nhau". Câu trả lời của bạn là về việc so sánh cùng một tệp trong hai nhánh khác nhau.
Etienne Miret

@EtienneMiret Bạn hoàn toàn đúng, tôi đã bỏ lỡ điểm quan trọng đó. Trả lời ngoài chủ đề.
RomainValeri

-1

Bạn có thể chỉ định bắt đầu và phạm vi git diffđể được áp dụng. Phạm vi được chỉ định với ..ký hiệu.

branch1=somebranch
branch2=someotherbranch
git diff ${branch1}..${branch2} -- file_path

Đây chỉ là so sánh cùng một tệp trong hai nhánh; câu hỏi là về hai tập tin khác nhau trong hai chi nhánh.
Piran
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.