Tôi có một repo với tập tin foo
trong nhánh chính. Tôi chuyển sang chi nhánh thanh và thực hiện một số thay đổi foo
. Làm thế nào bây giờ tôi có thể chạy git diff
giữa bản sao này (chưa được cam kết) và bản sao của nhánh chính?
Các công việc sau đây cho tôi:
git diff master:foo foo
Trong quá khứ, nó có thể là:
git diff foo master:foo
Bạn đang cố gắng so sánh cây làm việc của mình với một tên nhánh cụ thể, vì vậy bạn muốn điều này:
git diff master -- foo
Đó là từ hình thức git-diff này (xem trang chủ git-diff)
git diff [--options] <commit> [--] [<path>...]
This form is to view the changes you have in your working tree
relative to the named <commit>. You can use HEAD to compare it with
the latest commit, or a branch name to compare with the tip of a
different branch.
FYI, cũng có một tùy chọn --cached
(aka --staged
) để xem khác biệt của những gì bạn đã dàn dựng, thay vì mọi thứ trong cây làm việc của bạn:
git diff [--options] --cached [<commit>] [--] [<path>...]
This form is to view the changes you staged for the next commit
relative to the named <commit>.
...
--staged is a synonym of --cached.
-
1
Cảm ơn. Không biết tại sao, nhưng chỉ có câu trả lời này hoạt động với tôi với git 1.8.1 trong Linux.
– Tạ Mộng Thu 21:38:51 30/04/2014 -
1
Tuyệt vời cảm ơn bạn. Tôi gác máy vì muốn đưa tên của chi nhánh hiện tại của mình vào lệnh diff, nhưng tôi thấy điều đó không cần thiết.
– Hoàng Xuân Nhiên 20:55:41 24/02/2015 -
1
Điều này làm việc cho tôi một vài tháng trước, nhưng dường như không phải bây giờ. Hiện tại tôi đang ở phiên bản git 2.7.4 (Apple Git-66); Tôi không biết những gì tôi đã có trước đây.
– Bùi Tâm Hằng 16:40:54 13/06/2016 -
1
@hBrent cái này vẫn hoạt động với tôi trên OSX 10.11 với git 2.7.3. Đây là một repo mẫu nhanh với các hướng dẫn nếu điều đó hữu ích: github.com/jordan-brough/git-diff-test
– Tạ Mai Chi 16:04:58 14/06/2016 -
1
Cũng thế: git diff master..feature foo
Vì git diff foo master:foo
không làm việc trên các thư mục cho tôi.
-
1
-
1
@ScottStafford Tôi đang dùng Ubuntu, vì vậy không, có vẻ như đó chỉ là một thứ của Windows.
– Hoàng Xuân Nhiên 10:51:03 26/02/2013 -
1
Hoạt động với tôi miễn là tôi cung cấp rõ ràng cả hai tên chi nhánh (cửa sổ)
– Bùi Tâm Hằng 20:57:00 04/06/2014git diff branch1:foo master:foo
git difftool -v tag/branch filename
-
1
Đây là câu trả lời duy nhất phù hợp với tôi để so sánh giữa một bản sao làm việc cục bộ của một tệp và phiên bản tệp đó trong một repo từ xa (không phải "bản gốc"). Cảm ơn, Adir và Baz
– Tạ Mộng Thu 01:44:22 06/05/2018
git diff mybranch master -- file
cũng nên làm việc
-
1
Điều này chỉ hoạt động cho các tập tin cam kết với mybranch, không phải bản sao làm việc hiện tại của tập tin.
– Đặng Phượng Uyên 20:56:11 24/02/2015
Mỗi lần tôi thấy câu trả lời của bạn liên quan
– Dương Thiện Sinh 14:12:26 02/02/2012git diff
, tôi luôn nghĩ về stackoverflow.com/questions/5256249/git-diff-doesnt-show-enough/Bạn đã thử với một
– Lý Quang Thái 16:13:08 02/02/2012--
để tách các tham số khỏi các đối số đường dẫn?git diff -- master:foo foo
Trên 1.8,
– Trịnh Diệu Hạnh 20:24:54 11/09/2014git diff -- master:foo foo
không hoạt động - dường như coi argmaster:foo
là tên tệp không tồn tại (và bỏ qua nó) thay vì tệp trong một nhánh. Hãy thử chuyển đổi 2 đối số cuối cùng - nếu nó hoạt động, so sánh khác phải được đảo ngược, nhưng đầu ra không thay đổi.Đối với tôi thì ngược lại - tôi có thể làm
– Tạ Kim Yến 22:28:06 21/11/2014git diff master:foo foo
nhưng không phải ngược lại. Tôi cũng không hiểu. Với git 1.7.9.5 / Ubuntu 12.04 ít nhất tôi có thể làmgit diff -R master:foo foo
để có được sự khác biệt mà tôi thực sự muốn. Khi tôi thử điều đó với msysgit 1.9.4 / Windows 7 x64 tôi nhận đượcfatal: unable to read 0000000000000000000000000000000000000000
. Không có-R
tôi nhận được thông báo lỗi giống như bạn với git 1.7.9.5, nhưng với 1.9.4 tôi nhận đượcfatal: master:foo: no such path in the working tree
.Một câu hỏi Git khác với câu trả lời được chấp nhận không hoạt động ...
– Lý Hương Lan 19:55:30 13/07/2016