Xem tệp trong một nhánh Git khác mà không thay đổi các nhánh


620

Có thể mở một tập tin trong một nhánh git mà không cần kiểm tra nhánh đó? Làm sao?

Về cơ bản tôi muốn có thể mở một tệp trong nhánh trang github của mình mà không cần chuyển nhánh mọi lúc. Tôi không muốn sửa đổi nó, chỉ muốn xem nó.


15
Tất cả các câu trả lời bỏ lỡ thực tế, bạn cần phải xác định đường dẫn đầy đủ của tập tin với git show: stackoverflow.com/questions/610208/...stackoverflow.com/questions/2364147/...
VonC

15
Ngày nay, bạn có thể sử dụng git show a1b35:./file.txtđể sử dụng các đường dẫn tương đối.
Steve Bennett

2
@VonC - cảm ơn chúa vì đã hoàn thành tab nhận biết chi nhánh :)
Luke

thú vị hơn có thể là sự khác biệtgit diff <other_branch> <path>
Sławomir Lenart

Ví dụ về tệp tương đối ở trên với "a1b35", đó là tên chi nhánh - vì vậy tất nhiên đặt tên chi nhánh của riêng bạn ở đó.
loneRanger

Câu trả lời:


876

Điều này sẽ làm việc:

git show branch:file

Trong đó nhánh có thể là bất kỳ ref (nhánh, thẻ, HEAD, ...) và tệp là đường dẫn đầy đủ của tệp. Để xuất nó, bạn có thể sử dụng

git show branch:file > exported_file

Bạn cũng nên xem câu trả lời của VonC cho một số câu hỏi liên quan:

CẬP NHẬT 2015-01-19:

Ngày nay bạn có thể sử dụng các đường dẫn tương đối với git show a1b35:./file.txt.


22
Và bạn cũng có thể bật tệp mở trong vim: git show branch:file | vim -(Lưu ý đường ống "|" và dấu gạch ngang sau lệnh vim:vim -
Greg Burghardt

3
@GregBurghardt những gì làm việc cho tôi là một cái gì đó tương tựvim -c "set syntax=html" -
raphaëλ

2
Tôi ước tôi có thể nâng cao câu trả lời này hơn một lần, thành thật.
Vincent Fourmond

2
CHỈ này hiển thị các chi nhánh địa phương, nó KHÔNG hiển thị tất cả các chi nhánh trên máy chủ
William Entriken

3
@FullDecent, tôi đã có thể sử dụng origin/my_remote_branchtốt với điều này. Hay bạn có nghĩa là phiên bản máy chủ thực tế? Nếu bạn muốn điều đó, bạn chỉ cần git fetchđầu tiên.
rsmith54

53
git show somebranch:path/to/your/file

bạn cũng có thể thực hiện nhiều tệp và ghép chúng lại:

git show branchA~10:fileA branchB^^:fileB

Bạn không phải cung cấp đường dẫn đầy đủ đến tệp, các đường dẫn tương đối được chấp nhận, ví dụ:

git show branchA~10:../src/hello.c

Nếu bạn muốn lấy tệp trong thư mục cục bộ (chỉ hoàn nguyên một tệp), bạn có thể kiểm tra:

git checkout somebranch^^^ -- path/to/file

38

Một cách đơn giản, thân thiện với người mới để xem xét một tệp: git gui browser <branch>cho phép bạn khám phá nội dung của bất kỳ tệp nào.

Nó cũng có trong menu File của git gui. Hầu hết các trình bao bọc GUI nâng cao khác (Qgit, Egit, v.v.) cũng cung cấp trình duyệt / mở tệp.


Lệnh này cho kết quả "git: 'gui' không phải là lệnh git. Xem 'git --help'. Tôi là người mới, chuyện gì đang xảy ra?
Scott Biggie

2
Nó thực sự hoạt động (làm tôi ngạc nhiên), xem git-scm.com/docs/git-gui - Tôi sử dụng phiên bản git 2.5.2.windows.1
anhoppe

Câu trả lời này rất hữu ích! Cảm ơn. Nên đề cập đến việc tôi sử dụng git bash trên windows.
sáp nhập

Có thể sử dụng kiểm lâm như git gui?
acgtyrant

1
@ScottBiggs bạn không phải là người mới, bạn đang sử dụng một thiết lập không chuẩn.
Ashnur

20

Nếu bạn đang sử dụng Emacs, bạn có thể nhập C-x v ~để xem bản sửa đổi khác của tệp bạn đang chỉnh sửa (thẻ, nhánh và băm đều hoạt động).


Có cách nào để có được điều này trong Vim? (Tôi đang mở các plugin.)
NHDaly

4

Thêm phần sau vào ~/.gitconfigtập tin của bạn

[alias]
  cat = "!git show \"$1:$2\" #"

Và sau đó thử điều này

git cat BRANCHNAME FILEPATH

Cá nhân tôi thích các tham số riêng biệt mà không có dấu hai chấm. Tại sao? Lựa chọn này phản ánh các tham số của checkoutlệnh, mà tôi có xu hướng sử dụng khá thường xuyên và tôi thấy nó dễ nhớ hơn nhiều so với tham số được phân tách bằng dấu hai chấm của showlệnh.


Đó là rất nhiều đáng nhớ, cảm ơn.
Khách du lịch
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.