Bagaimana saya bisa melihat diff
antara cabang lokal dan cabang terpencil?
git diff HEAD origin/HEAD
yang tampaknya menunjuk ke cabang jauh yang berbeda dari yang saya maksudkan. Menggunakan nama cabang lengkap berfungsi seperti yang diharapkan.
Bagaimana saya bisa melihat diff
antara cabang lokal dan cabang terpencil?
git diff HEAD origin/HEAD
yang tampaknya menunjuk ke cabang jauh yang berbeda dari yang saya maksudkan. Menggunakan nama cabang lengkap berfungsi seperti yang diharapkan.
Jawaban:
Untuk memperbarui cabang pelacakan jarak jauh, Anda harus mengetikkan git fetch
terlebih dahulu dan kemudian:
git diff <masterbranch_path> <remotebranch_path>
Anda dapat git branch -a
membuat daftar semua cabang (lokal dan jarak jauh) kemudian memilih nama cabang dari daftar (cukup hapus remotes/
dari nama cabang jarak jauh.
Contoh: git diff master origin/master
(di mana "master" adalah cabang master lokal dan "asal / master" adalah remote yaitu asal dan cabang master.)
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
Anda. Pastikan jalur Anda ke file code.exe benar.
git diff <local branch> <remote>/<remote branch>
Misalnya git diff master origin/master
, ataugit diff featureA origin/next
Tentu saja untuk telah mengatakan cabang terpencil-pelacakan yang Anda butuhkan untuk git fetch
pertama; dan Anda perlu memiliki informasi terkini tentang cabang di repositori jarak jauh.
git diff <remote>/<remote branch> <local branch>
untuk melihat apa yang akan mendorong saya untuk repo jarak jauh.
git diff origin
sudah cukup jika Anda hanya membandingkan dengan cabang hulu Anda.
git fetch
di awal, itu menyebabkan masalah bagi pemula seperti saya
git diff <remote>/<remote branch> <local branch>
? Kalau tidak, saya mendapatkan add dan delete diaktifkan di komputer saya (git versi 2.7.0.windows.2)
Tipe pertama
git branch -a
untuk mendapatkan daftar cabang yang tersedia. Pada output Anda mungkin melihat sesuatu seperti
* master
remotes/main/master
remotes/origin/HEAD -> origin/master
remotes/origin/master
remotes/origin/mt
remotes/upstream/master
remotes/upstream/mt
Kemudian tunjukkan diff
git diff --stat --color remotes/main/master..origin/master
git diff remotes/main/master..origin/master
...
bukan ..
?
git log origin/my_branch..
yang akan mengambil HEAD
sebagai ref lokal, yang sebagian besar adalah apa yang Anda maksudkan.
fatal: bad revision
atau fatal: ambiguous argument
. Yang saya inginkan adalah melihat perbedaan pada file yang sama dari cabang lain, apakah itu terlalu banyak untuk ditanyakan? Ya, ya itu. :-) git diff remotes/origin/<base branch> <current branch> -- <filename>
berfungsi dengan baik pada git 1.8.3.1
Jika Anda menggunakan cabang tertentu, dan ingin membandingkannya dengan cabang upstream yang Anda lacak, gunakan
git diff @{upstream}
jika hulu Anda tidak disetel (biasanya demikian, terima kasih Arijoon dalam komentar)
git diff @{push}
Atas perkenan jawaban ini , dokumentasi git untuk menentukan revisi memiliki:
<branchname>@{upstream}
, misalnyamaster@{upstream}
,@{u}
Akhiran@{upstream}
ke nama cabang (bentuk pendek<branchname>@{u}
) merujuk ke cabang yang ditetapkan oleh cabangbranchname
diatur untuk membangun di atas (dikonfigurasi denganbranch.<name>.remote
danbranch.<name>.merge
). Hilangbranchname
default ke yang saat ini.
git diff @ @{upstream}
. Ekstra @
adalah HEAD
, di mana Anda berada sekarang, jadi Anda membandingkan HEAD
dengan upstream yang dilacak cabang Anda. Anda dapat menggunakan @{push}
alih-alih ke hulu untuk mendapatkan perbedaan di antara cabang yang akan Anda dorong
fatal: ambiguous argument '@upstream': unknown revision or path not in the working tree
. Harus digunakan git diff @\{upstream\}
sebagai gantinya. 😥
git fetch
terlebih dahulu, kalau tidak ini tidak menghasilkan apa-apa, tidak menunjukkan output; diuji dengan menghapus file dalam asal repo dan menjalankan perintah ini secara lokal. ..bekerja hanya setelah mengambil.
Saya mengerti jauh lebih baik hasil dari:
git diff <remote-tracking branch> <local branch>
itu menunjukkan kepada saya apa yang akan dijatuhkan dan apa yang akan ditambahkan jika saya mendorong cabang lokal. Tentu saja sama, hanya kebalikannya, tetapi bagi saya lebih mudah dibaca dan saya lebih nyaman melihat apa yang akan terjadi.
Cara mudah:
git fetch
git log -p HEAD..FETCH_HEAD
Ini pertama-tama akan mengambil perubahan dari jarak jauh default Anda (asal). Ini akan dibuat secara otomatis ketika Anda mengkloning repo. Anda juga dapat eksplisit: git fetch origin master
.
Kemudian git log digunakan untuk membandingkan cabang Anda saat ini dengan yang baru saja diambil. (Opsi -p
(menghasilkan tambalan) adalah yang menunjukkan perbedaan .)
Beginilah cara saya melakukannya.
#To update your local.
git fetch --all
ini akan mengambil semuanya dari jarak jauh, jadi ketika Anda memeriksa perbedaan, ia akan membandingkan perbedaannya dengan cabang jarak jauh.
#to list all branches
git branch -a
perintah di atas akan menampilkan semua cabang.
#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
Sekarang, Anda dapat memeriksa perbedaan sebagai berikut.
git diff origin/<branch_name>
ini akan membandingkan cabang lokal Anda dengan cabang jarak jauh
Biarkan cabang kerja Anda adalah pengembangan dan ingin membedakan antara cabang pengembangan lokal dan cabang pengembangan jarak jauh, dalam hal ini, sintaksinya harus seperti git diff remotes/origin/development..development
atau
git fetch origin
git diff origin/development
tl; dr :git diff <local branch> <remote branch>
Saat menggunakan git di shell, saya lebih suka mengorientasikan diri dengan melihat-lihat. Berikut adalah perintah untuk menampilkan semua cabang
$ 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
Di sini saya memiliki dua cabang lokal ( my-branch
dan master
) dan 4 jarak jauh ( some-branch
, some-other-branch
, master
, dan my-branch
).
Juga, tanda bintang di sebelah my-branch
sinyal fakta bahwa saya saat ini di cabang itu (Anda juga akan tahu bahwa dengan menggunakan perintah git status
yang akan menampilkan:) On branch my-branch.
.
Catatan: cabang jarak jauh di shell git bash ditampilkan dengan warna merah sedangkan cabang lokal ditampilkan dalam warna hijau.
Jika Anda hanya ingin menampilkan cabang jarak jauh :
$ git branch -r # (or git branch --remotes)
origin/some-branch
origin/HEAD -> origin/master
origin/my-branch
origin/some-other-branch
origin/master
Untuk hanya menampilkan cabang lokal, Anda mungkin tergoda untuk menggunakan git branch -l
tetapi itu perintah yang sama sekali berbeda. Untuk menampilkan cabang lokal, gunakan git branch
tanpa opsi
$ git branch
* my-branch
master
Untuk menyelesaikan peninjauan opsi cabang dasar ada --list
yang bertentangan dengan apa yang Anda harapkan ada di sana untuk memungkinkan pemfilteran . Gunakan dengan pola seperti ini:
$ git branch --list 'my*'
* my-branch
Anda juga dapat menggabungkan --list
dengan opsi -a
dan -r
tetapi pastikan untuk menyesuaikan pola Anda sesuai ( ingat: cabang jarak jauh mulai dengan "remote" ). Contoh:
# 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
Documents: https://git-scm.com/docs/git-branch
Sekarang Anda dapat membandingkan dua cabang dari semua cabang yang tersedia (Anda juga dapat membandingkan dua penduduk lokal atau dua remote).
Di sini saya membandingkan lokal dengan remote my-branch
, mereka disinkronkan jadi saya tidak mendapatkan output:
$ git diff my-branch remotes/origin/my-branch
Catatan: Anda harus memberikan nama lengkap cabang tanpa tanda kutip.
Saya juga bisa membandingkan lokal my-branch
ke remote master
. Di sini saya mendapatkan beberapa output karena remote my-branch
belum digabungkan ke cabang master.
$ 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
[ . . . ]
Jika Anda ingin melihat perbedaan karena hanya nama-nama file yang diubah lalu gunakan :, kalau tidak
git diff --name-status <remote-branch> <local-branch>
,
ini akan menunjukkan semua perbedaan antara dua cabang:
git diff <remote-branch> <local-branch>
Berikut adalah jawaban singkat jika Anda membandingkan cabang saat ini dan dengan sesuatu yang Anda inginkan git pull
.
git fetch
git diff FETCH_HEAD
Perintah pertama akan mencari tahu cabang jarak jauh mana yang sesuai dengan cabang Anda saat ini. Artefak perhitungan itu dalam FETCH_HEAD
referensi. Kemudian perintah kedua menggunakan referensi yang dibandingkan dengan apa yang dimiliki cabang Anda saat ini.
Saya tahu sudah ada beberapa jawaban untuk pertanyaan ini tetapi saya mendapatkan kesalahan aneh ketika mencoba sebagian besar dari mereka.
Dalam kasus saya saya memiliki kedua terpencil yang disebut heroku
yang tidak yang origin
dan karena itu tidak sinkron saya punya kesalahan ini ketika mencoba untuk menjalankan git diff master heroku/master
:
fatal: ambiguous argument 'heroku/master': unknown revision or path not in the working tree.
atau ini ketika mencoba pendekatan lain git diff master..heroku/master
:
fatal: bad revision 'master..heroku/master'
Solusinya secara eksplisit menyebutkan nama jarak jauh git fetch
sebelum berjalan git diff
, dalam kasus saya:
$ git fetch heroku
$ git diff master heroku/master
Harapan yang membantu orang lain dengan masalah yang sama ini.
git difftool <commit> .
Ini akan membandingkan komit yang Anda inginkan dengan file lokal Anda. Jangan lupa titik pada akhirnya (untuk lokal).
Misalnya, untuk membandingkan file lokal Anda dengan beberapa komit:
git difftool 1db1ef2490733c1877ad0fb5e8536d2935566341.
(dan Anda tidak perlu git fetch, kecuali membandingkan dengan commit baru diperlukan)
Contoh
git diff 'master' 'testlocalBranch'
Jika Anda menggunakan editor seperti webstorm, Anda dapat mengklik kanan pada file pilih bandingkan dengan cabang dan ketik / pilih cabang Anda.
Di VS 2019, lakukan saja FETCH Jangan menarik kode.
Inilah yang saya lakukan. Ditambahkan di bawah ini dalam file .gitconfig sehingga saya dapat menggunakan Beyond Compare
File location: C:\Users\[username]\.gitconfig
Ditambahkan di bawah
[diff]
tool = bc
[difftool "bc"]
path = c:/Program Files/Beyond Compare 4/bcomp.exe
Buka command prompt dan buka direktori kerja. Di bawah ini saya berikan untuk membandingkan cabang DEV lokal dengan cabang DEV jauh
git difftool dev origin/dev --dir-diff
Ini akan membuka Beyond Compare dan membuka direktori yang memiliki file yang berbeda. Jika tidak ada perubahan, Beyond Compare tidak akan diluncurkan.
Saya bertanya-tanya apakah ada perubahan di cabang master saya ...
git checkout master
status git
cabang git -a
remote master / asal / master
asal git / master git
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
Ini menjawab pertanyaan di heading Anda ("remote"); jika Anda ingin melakukan diff terhadap "remote" (yang tidak dikonfigurasikan sebagai upstream untuk cabang), Anda perlu menargetkannya secara langsung. Anda dapat melihat semua cabang jarak jauh dengan yang berikut:
git branch -r
Anda dapat melihat semua remote yang dikonfigurasi dengan yang berikut:
git remote show
Anda dapat melihat konfigurasi cabang / pelacakan untuk satu remote (misalnya asal) sebagai berikut:
git remote show origin
Setelah Anda menentukan cabang asal yang tepat, lakukan saja perbedaan normal :)
git diff [MY_LOCAL] MY_REMOTE_BRANCH
Ini cukup sederhana. Kamu bisa menggunakan:git diff remote/my_topic_branch my_topic_branch
Di mana my_topic_branch
cabang topik Anda.
mencoba:
git diff origin HEAD
Dengan asumsi Anda ingin membedakan Anda cabang lokal saat ini HEAD
dengan yang asli. Dan dengan asumsi Anda berada di cabang lokal. :)
Jika Anda menggunakan TortoiseGit (menyediakan GUI untuk Git), Anda dapat mengklik kanan folder repo Git Anda lalu mengklik Git Sync
.
Anda dapat memilih cabang untuk dibandingkan jika tidak dipilih. Daripada Anda dapat melihat perbedaan komit. Anda juga dapat mengklik kanan komit lalu Compare with previous revision
untuk melihat perbedaan secara berdampingan.