Làm thế nào tôi có thể thấy diff
giữa một chi nhánh địa phương và một chi nhánh từ xa?
git diff HEAD origin/HEAD
dường như chỉ đến một nhánh từ xa khác với nhánh tôi dự định. Sử dụng tên chi nhánh đầy đủ hoạt động như mong đợi.
Làm thế nào tôi có thể thấy diff
giữa một chi nhánh địa phương và một chi nhánh từ xa?
git diff HEAD origin/HEAD
dường như chỉ đến một nhánh từ xa khác với nhánh tôi dự định. Sử dụng tên chi nhánh đầy đủ hoạt động như mong đợi.
Câu trả lời:
Để cập nhật các nhánh theo dõi từ xa, bạn cần nhập git fetch
trước rồi:
git diff <masterbranch_path> <remotebranch_path>
Bạn có thể git branch -a
liệt kê tất cả các nhánh (cục bộ và từ xa) sau đó chọn tên nhánh từ danh sách (chỉ cần xóa remotes/
khỏi tên nhánh từ xa.
Ví dụ: git diff master origin/master
(trong đó "master" là nhánh chính cục bộ và "origin / master" là một từ xa cụ thể là nhánh gốc và nhánh chính.)
git fetch
)
[diff] tool = vscode [difftool] prompt = false [difftool "vscode"] cmd = \"C:\\Program Files (x86)\\Microsoft VS Code\\Code.exe\" \"$LOCAL\" \"$REMOTE\" --diff --wait trustExitCode = false
Đảm bảo đường dẫn đến tệp code.exe là chính xác.
git diff <local branch> <remote>/<remote branch>
Ví dụ git diff master origin/master
, hoặcgit diff featureA origin/next
Tất nhiên để có nói từ xa theo dõi chi nhánh bạn cần phải git fetch
đầu tiên; và bạn cần nó để có thông tin cập nhật về các chi nhánh trong kho lưu trữ từ xa.
git diff <remote>/<remote branch> <local branch>
để xem những gì đẩy của tôi sẽ làm với repo từ xa.
git diff origin
là đủ nếu bạn chỉ so sánh với chi nhánh thượng nguồn của bạn.
git fetch
vào lúc đầu, nó gây rắc rối cho người mới như tôi
git diff <remote>/<remote branch> <local branch>
sao? Mặt khác, tôi nhận được các bổ sung và xóa được bật trên máy tính của mình (phiên bản git 2.7.0.windows.2)
Loại đầu tiên
git branch -a
để có được danh sách các chi nhánh có sẵn. Trên đầu ra, bạn có thể thấy một cái gì đó như
* master
remotes/main/master
remotes/origin/HEAD -> origin/master
remotes/origin/master
remotes/origin/mt
remotes/upstream/master
remotes/upstream/mt
Sau đó hiển thị khác
git diff --stat --color remotes/main/master..origin/master
git diff remotes/main/master..origin/master
...
hơn là ..
?
git log origin/my_branch..
đó sẽ làm HEAD
như giới thiệu địa phương, mà chủ yếu là những gì bạn có ý nghĩa.
fatal: bad revision
hoặc fatal: ambiguous argument
. Tất cả những gì tôi muốn là nhìn thấy khác biệt trên cùng một tập tin từ một chi nhánh khác, đó có phải là quá nhiều để hỏi không? Vâng, đúng vậy. :-) git diff remotes/origin/<base branch> <current branch> -- <filename>
hoạt động tuyệt vời trên git 1.8.3.1
Nếu bạn đang ở một nhánh nhất định và bạn muốn so sánh nó với một nhánh ngược dòng bạn đang theo dõi, hãy sử dụng
git diff @{upstream}
nếu ngược dòng của bạn không được đặt (thường là như vậy, cảm ơn Arijoon trong các bình luận)
git diff @{push}
Với câu trả lời này , tài liệu git để chỉ định sửa đổi có:
<branchname>@{upstream}
, Ví dụ nhưmaster@{upstream}
,@{u}
Các hậu tố@{upstream}
để một BRANCHNAME (viết tắt<branchname>@{u}
) đề cập đến chi nhánh mà các chi nhánh theo quy định củabranchname
được thiết lập để xây dựng trên đầu trang của (cấu hình vớibranch.<name>.remote
vàbranch.<name>.merge
). Mộtbranchname
mặc định bị thiếu cho hiện tại.
git diff @ @{upstream}
. Phần bổ sung @
là HEAD
, hiện tại bạn đang ở đâu, vì vậy bạn đang so sánh HEAD
với dòng ngược mà chi nhánh của bạn đang theo dõi. Bạn có thể sử dụng @{push}
thay vì ngược dòng để nhận khác biệt giữa nhánh bạn được đặt thành
fatal: ambiguous argument '@upstream': unknown revision or path not in the working tree
. Phải sử dụng git diff @\{upstream\}
thay thế. 😥
git fetch
đầu tiên, điều này không làm gì, cho thấy không có đầu ra; đã kiểm tra bằng cách xóa một tệp trong nguồn gốc repo và chạy lệnh này cục bộ. .. chỉ hoạt động sau khi lấy.
Tôi hiểu rõ hơn nhiều về đầu ra của:
git diff <remote-tracking branch> <local branch>
điều đó cho tôi thấy những gì sẽ bị loại bỏ và những gì sẽ được thêm vào nếu tôi đẩy chi nhánh địa phương. Tất nhiên là như vậy, chỉ là nghịch đảo, nhưng đối với tôi thì dễ đọc hơn và tôi dễ hiểu hơn khi nhìn vào những gì sắp xảy ra.
Cách dễ dàng:
git fetch
git log -p HEAD..FETCH_HEAD
Điều này trước tiên sẽ tìm nạp các thay đổi từ điều khiển từ xa (nguồn gốc) mặc định của bạn. Điều này sẽ được tạo tự động khi bạn sao chép một repo. Bạn cũng có thể rõ ràng : git fetch origin master
.
Sau đó, nhật ký git được sử dụng để so sánh chi nhánh hiện tại của bạn với chi nhánh vừa tìm nạp. ( -p
Tùy chọn (tạo bản vá) là những gì cho thấy sự khác biệt .)
Đây là cách tôi làm điều đó.
#To update your local.
git fetch --all
cái này sẽ lấy mọi thứ từ xa, vì vậy khi bạn kiểm tra sự khác biệt, nó sẽ so sánh sự khác biệt với nhánh từ xa.
#to list all branches
git branch -a
lệnh trên sẽ hiển thị tất cả các nhánh.
#to go to the branch you want to check difference
git checkout <branch_name>
#to check on which branch you are in, use
git branch
(or)
git status
Bây giờ, bạn có thể kiểm tra sự khác biệt như sau.
git diff origin/<branch_name>
điều này sẽ so sánh chi nhánh địa phương của bạn với chi nhánh từ xa
Hãy để nhánh làm việc của bạn là phát triển và muốn phân biệt giữa nhánh phát triển cục bộ và nhánh phát triển từ xa, trường hợp đó, cú pháp nên giống git diff remotes/origin/development..development
hoặc
git fetch origin
git diff origin/development
tl; dr :git diff <local branch> <remote branch>
Khi sử dụng git trên vỏ, trước tiên tôi muốn tự định hướng bằng cách nhìn xung quanh. Đây là một lệnh để hiển thị tất cả các chi nhánh
$ git branch -a # (or git branch --all)
* my-branch
master
remotes/origin/some-branch
remotes/origin/HEAD -> origin/master
remotes/origin/my-branch
remotes/origin/some-other-branch
remotes/origin/master
Ở đây tôi có hai chi nhánh địa phương ( my-branch
và master
) và 4 từ xa ( some-branch
, some-other-branch
, master
, vàmy-branch
).
Ngoài ra, dấu hoa thị bên cạnh my-branch
báo hiệu thực tế là tôi hiện đang ở nhánh đó (bạn cũng sẽ biết rằng bằng cách sử dụng lệnh git status
sẽ xuất ra On branch my-branch.
:).
Lưu ý: các nhánh từ xa trong vỏ git bash được hiển thị màu đỏ trong khi các nhánh cục bộ được hiển thị bằng màu xanh lá cây.
Nếu bạn chỉ muốn hiển thị các chi nhánh từ xa :
$ git branch -r # (or git branch --remotes)
origin/some-branch
origin/HEAD -> origin/master
origin/my-branch
origin/some-other-branch
origin/master
Để chỉ hiển thị các nhánh cục bộ, bạn có thể muốn sử dụng git branch -l
nhưng đó là một lệnh hoàn toàn khác. Đến hiển thị các chi nhánh địa phương sử dụng git branch
mà không có tùy chọn
$ git branch
* my-branch
master
Để hoàn thành đánh giá các tùy chọn chi nhánh cơ bản, có --list
điều đó trái ngược với những gì bạn có thể mong đợi là có cho phép lọc . Sử dụng nó với một mẫu như thế này:
$ git branch --list 'my*'
* my-branch
Bạn cũng có thể kết hợp --list
với các tùy chọn -a
và -r
đảm bảo điều chỉnh mô hình của mình cho phù hợp ( hãy nhớ: các nhánh từ xa bắt đầu bằng "điều khiển từ xa" ). Thí dụ:
# this will show all branches (local & remote) that start with my
$ git branch --list 'my*' -a
* my-branch
# better: the pattern includes the remote
$ git branch --list '*my*' -a
* my-branch
remotes/origin/my-branch
Tài liệu: https://git-scm.com/docs/git-branch
Bây giờ bạn có thể so sánh bất kỳ hai chi nhánh từ tất cả các có sẵn (bạn cũng có thể so sánh hai địa phương hoặc hai điều khiển từ xa).
Ở đây tôi đang so sánh địa phương với điều khiển từ xa my-branch
, chúng được đồng bộ hóa nên tôi không nhận được bất kỳ đầu ra nào:
$ git diff my-branch remotes/origin/my-branch
Lưu ý: bạn phải cung cấp tên đầy đủ của các chi nhánh không có dấu ngoặc kép.
Tôi cũng có thể so sánh địa phương my-branch
với điều khiển từ xa master
. Ở đây tôi nhận được một số đầu ra vì điều khiển từ xa my-branch
chưa được sáp nhập vào nhánh chính.
$ git diff my-branch remotes/origin/master
diff --git a/src/controllers/call.controller.js b/src/controllers/call.controller.js
index fd79b98..df3d798 100644
--- a/src/controllers/call.controller.js
+++ b/src/controllers/call.controller.js
@@ -261,7 +261,7 @@ function callController() {
/*
* Function: doCall
[ . . . ]
Nếu bạn muốn thấy sự khác biệt chỉ là tên của các tệp đã thay đổi thì hãy sử dụng :
git diff --name-status <remote-branch> <local-branch>
,
nếu không , điều này sẽ hiển thị tất cả sự khác biệt giữa hai nhánh:
git diff <remote-branch> <local-branch>
Dưới đây là câu trả lời ngắn gọn nếu bạn đang so sánh chi nhánh hiện tại của mình và với điều gì đó bạn muốn git pull
.
git fetch
git diff FETCH_HEAD
Lệnh đầu tiên sẽ chỉ ra nhánh từ xa nào tương ứng với nhánh hiện tại của bạn. Một tạo tác của tính toán đó trong FETCH_HEAD
tài liệu tham khảo. Sau đó, lệnh thứ hai sử dụng so sánh tham chiếu đó so với những gì chi nhánh hiện tại của bạn có.
Tôi biết đã có một vài câu trả lời cho câu hỏi này nhưng tôi đã gặp một lỗi kỳ lạ khi thử hầu hết chúng.
Trong trường hợp của tôi, tôi có một giây từ xa gọi heroku
đó là không những origin
và vì nó không đồng bộ tôi đã nhận lỗi này khi cố gắng chạy git diff master heroku/master
:
fatal: ambiguous argument 'heroku/master': unknown revision or path not in the working tree.
hoặc điều này khi thử phương pháp khác git diff master..heroku/master
:
fatal: bad revision 'master..heroku/master'
Giải pháp đã đề cập rõ ràng đến tên từ xa git fetch
trước khi chạy git diff
, trong trường hợp của tôi:
$ git fetch heroku
$ git diff master heroku/master
Hy vọng rằng sẽ giúp những người khác với vấn đề tương tự.
git difftool <commit> .
Điều này sẽ so sánh các cam kết bạn muốn với các tệp cục bộ của bạn. Đừng quên dấu chấm cuối cùng (đối với địa phương).
Ví dụ: để so sánh các tệp cục bộ của bạn với một số cam kết:
git Difftool 1db1ef2490733c1877ad0fb5e8536d2935566341.
(và bạn không cần git fetch, trừ khi cần so sánh với các cam kết mới)
Thí dụ
git diff 'master' 'testlocalBranch'
Nếu bạn đang sử dụng trình soạn thảo như webstorm, bạn có thể nhấp chuột phải vào tệp chọn so sánh với chi nhánh và nhập / chọn chi nhánh của bạn.
Trong VS 2019, chỉ cần thực hiện FETCH Không kéo mã.
Đây là những gì tôi đã làm. Đã thêm bên dưới trong tệp .gitconfig để tôi có thể sử dụng Beyond So sánh
File location: C:\Users\[username]\.gitconfig
Đã thêm bên dưới
[diff]
tool = bc
[difftool "bc"]
path = c:/Program Files/Beyond Compare 4/bcomp.exe
Mở dấu nhắc lệnh và vào thư mục làm việc. Tôi đã đưa ra dưới đây để so sánh chi nhánh DEV địa phương với chi nhánh DEV từ xa
git difftool dev origin/dev --dir-diff
Điều này sẽ mở Beyond So sánh và mở các thư mục có các tệp khác nhau. Nếu không có thay đổi Ngoài So sánh sẽ không khởi chạy.
Tôi tự hỏi liệu có bất kỳ thay đổi trong chi nhánh chủ của tôi ...
chủ thanh toán git
tình trạng git
chi nhánh git -a
- tổng
điều khiển từ xa / gốc / master
nguồn gốc git diff / chủ
git config alias.udiff 'diff @{u}'
git fetch # Do this if you want to compare with the network state of upstream; if the current local state is enough, you can skip this
git udiff
Điều này trả lời câu hỏi trong tiêu đề của bạn ("từ xa"); nếu bạn muốn tìm khác biệt với "một điều khiển từ xa" (không được cấu hình là ngược dòng cho chi nhánh), bạn cần nhắm mục tiêu trực tiếp vào nó. Bạn có thể thấy tất cả các chi nhánh từ xa với những điều sau đây:
git branch -r
Bạn có thể thấy tất cả các điều khiển từ xa được cấu hình với các mục sau:
git remote show
Bạn có thể thấy cấu hình nhánh / theo dõi cho một điều khiển từ xa (ví dụ: nguồn gốc) như sau:
git remote show origin
Khi bạn xác định nhánh gốc thích hợp, chỉ cần làm khác đi bình thường :)
git diff [MY_LOCAL] MY_REMOTE_BRANCH
Điều này khá đơn giản. Bạn có thể dùng:git diff remote/my_topic_branch my_topic_branch
my_topic_branch
Chi nhánh chủ đề của bạn ở đâu
thử:
git diff origin HEAD
Giả sử bạn muốn khác bạn hiện tại của chi nhánh địa phương HEAD
so với nguồn gốc. Và giả sử bạn đang ở chi nhánh địa phương. :)
Nếu bạn sử dụng TortoiseGit (nó cung cấp GUI cho Git), bạn có thể nhấp chuột phải vào thư mục repo Git của mình sau đó nhấpGit Sync
.
Bạn có thể chọn các chi nhánh của bạn để so sánh nếu không được chọn. Hơn bạn có thể xem sự khác biệt cam kết. Bạn cũng có thể nhấp chuột phải vào bất kỳ cam kết nào sau đó Compare with previous revision
để xem sự khác biệt cạnh nhau.