git perbedaan visual antara cabang


196

Jawaban ini bagus untuk melihat perbedaan visual antara dua file yang diperiksa ke git: Bagaimana cara melihat output 'git diff' dengan program visual diff?

Namun, saya ingin melihat perbedaan visual antara dua cabang. Sejauh ini, taruhan terbaik saya adalah:

git diff --name-status master dev

yang tidak terlalu informatif dan tidak terlalu visual.

Adakah yang lebih baik di luar sana?


Saya telah menambahkan jawaban di bawah ini termasuk visual yang sebelumnya tidak ditangani di sini: cara melihat yang berisi cabang berkomitmen (apakah kesamaan atau unik). Ada banyak hal yang dapat Anda lakukan dengan fungsionalitas inti git. Mungkin baik untuk menentukan apa yang ingin Anda sertakan dalam diff visual Anda. Sebagian besar jawaban fokus pada perbedaan komit baris per baris, di mana contoh Anda berfokus pada nama file yang terpengaruh dalam komit yang diberikan.
Kay V

Jawaban:


227

Gunakan git diffdengan kisaran .

git diff branch1..branch2

Ini akan membandingkan tips dari masing-masing cabang.

Jika Anda benar-benar menginginkan beberapa perangkat lunak GUI, Anda dapat mencoba sesuatu seperti SourceTree yang mendukung Mac OS X dan Windows.


27
Ini bukan rusa betina visual. ;)
marinir

35
Dalam sistem Linux, saya sarankan untuk menginstal Meld, kemudian mengaturnya sebagai default difftooldengan git config --global diff.tool melddan akhirnya meluncurkannya bukan diffdengan git difftool branch1..branch2. Hasilnya terlihat jauh lebih bagus.
Gabriel

8
menggunakan Meld visual difftool tanpa konfigurasi git:git difftool -t meld branch1..branch2
user3780389

2
Untuk pembaca: Pada pos saya, setiap jawaban di sini memberikan cara untuk melakukan apa yang diminta orang (berbeda dalam GUI) kecuali untuk jawaban ini.
G Huxley

3
@GHuxley di mana OP meminta solusi GUI?
alex

97

Untuk melihat perbedaan visual dari semua perbedaan antara dua cabang, saya ingin menggabungkan dua cabang - TANPA melakukan penggabungan - dan kemudian menggunakan git guiatau git Extensions untuk mendapatkan gambaran umum perbedaan.

Git command line untuk menggabungkan tanpa melakukan:

git checkout branchA
git merge --no-commit --no-ff branchB

Kemudian setelah selesai, Anda dapat membatalkan penggabungan dengan

git merge --abort

(h / t ke @ jcugat untuk komentar)


10
Jangan meremehkan relevansi pendekatan ini jika Anda suka menggunakan IDE Anda (atau difftool GUI Git yang tidak selalu mudah diintegrasikan)! Opsi ini luar biasa bagi saya, karena saya menggunakan Intellij dan jauh lebih suka bisa memutar-mutar file yang dimodifikasi dalam IDE, dalam semua syntax-highlighted, error-highlighted, dead-code-highlighted, glory-in-place glory. Saya menggunakan pendekatan ini untuk semua ulasan kode saya, dan saya telah meninggalkan alat perbandingan permintaan tarik yang sangat buruk di GitHub jauh di belakang. Saya bahkan dapat mengedit ketika saya pergi, dan ketika selesai saya baru saja membuat cabang baru dengan "-code-review" ditambahkan dan komit!
kghastie

2
Ini berfungsi selama tidak ada konflik gabungan dan gagal saat ada konflik gabungan.
Naga Kiran

1
Saya sangat suka pendekatan itu! Juga, setidaknya bagi saya di git guidalamnya menunjukkan konflik sebagai tidak dipentaskan, non-konflik sebagai dipentaskan, sehingga Anda mendapatkan perbedaan yang baik bahkan. Membantu saya lebih banyak daripada jawaban peringkat teratas: D
DJGummikuh

55

Jika Anda menggunakan Intellij Idea IDE, Anda bisa menggunakan opsi bandingkan di cabang.

masukkan deskripsi gambar di sini


apakah ada konfigurasi / opsi / pengaturan untuk memodifikasi perbandingan ini? (seperti --ignore-space-at-eol for git diff)
Superole

49

Anda juga dapat melakukan ini dengan mudah dengan gitk.

> gitk branch1 branch2

Klik pertama pada ujung branch1. Sekarang klik kanan pada ujung branch2 dan pilih Diff this-> terpilih.


7
Menggunakan gitk branch1..branch2hanya menunjukkan komit di antara dua revisi.
T3rm1

menggunakan gitk (tanpa branch1 branch2) jika Anda ingin melihat semua perubahan yang Anda buat di cabang Anda.
mikewasmike

31

Bagi Anda di Windows yang menggunakan TortoiseGit, Anda bisa mendapatkan perbandingan visual melalui fitur yang agak tidak jelas ini:

  1. Arahkan ke folder yang ingin Anda bandingkan
  2. Tahan shiftdan klik kanan
  3. Pergi ke TortoiseGit -> Jelajahi Referensi
  4. Gunakan ctrluntuk memilih dua cabang untuk dibandingkan
  5. Klik kanan pilihan Anda dan klik "Bandingkan referensi yang dipilih"

Sumber: http://wikgren.fi/compare-diff-branches-in-tortoise-git-atau-atau-bagaimana-untuk-preview-perubahan-sebelum-melakukan-mereka/


Mengapa Anda harus menahan shift?
Zero3

1
Menahan shift sambil mengklik kanan selalu memunculkan menu TortoiseGit penuh, jika Anda telah mengkonfigurasi TortoiseGit untuk tidak menampilkan item tertentu.
Oversearch

Ini luar biasa. Berharap itu adalah fitur yang lebih menonjol.
Drew

22

Jika Anda menggunakan OSX atau Windows 7+, Atlassian SourceTree bekerja sangat baik untuk ini. Ini gratis.

Anda dapat melihat perubahan bertahap dalam pengaturan diff berdampingan, dan Anda dapat dengan mudah membandingkan lokal dengan remote dan dua cabang lainnya. Ketika beberapa file dipilih, diff muncul seperti di bawah ini:

masukkan deskripsi gambar di sini

Dengan asumsi Anda telah memeriksa cabang fitur dan Anda ingin melihat perbedaan terhadap 'master', klik kanan pada cabang 'master' dan pilih "Diff terhadap arus"

Sayangnya, sepertinya tidak akan tersedia di distribusi * nix dalam waktu dekat .


3
Ini mungkin 'gratis' tetapi tentu saja membutuhkan waktu untuk membaca registrasi Ketentuan Penggunaan: atlassian.com/legal/customer-agreement Sejauh ini saya menyukai alat ini, tetapi ini mungkin mendorong saya.
akauppi

@akauppi Bagian mana yang membuat Anda pergi? Saya pikir semua perjanjian itu hampir sama
alex

Itu lebih dari setahun yang lalu. Ya, perjanjian mungkin serupa tetapi itu adalah proses yang mendorong SourceTree saya. Itu aneh. Lupakan saja. Saya tidak akan memiliki detail untuk Anda. Maaf
akauppi

16

Coba "difftool" (dengan asumsi Anda memiliki pengaturan alat diff) - lihat https://www.kernel.org/pub/software/scm/git/docs/git-difftool.html

Saya menemukan status nama baik untuk ringkasan tetapi difftool akan mengulangi perubahan (dan -dopsi memberi Anda tampilan direktori), misalnya

$ git difftool their-branch my-branch

Viewing: 'file1.txt'
Launch 'bc3' [Y/n]:
...

Atau seperti yang disebutkan @ rsilva4 dengan -ddan default ke cabang Anda saat ini, hanya - mis. Bandingkan dengan master:

$  git difftool -d master..

... dan ya - ada banyak variasi - https://www.kernel.org/pub/software/scm/git/docs/git-reset.html


3
Terima kasih, ini berguna. Menambahkan opsi -d akan membuat segalanya lebih baik:git difftool -d their-abc my-abc
rsilva4

Karena menjelaskanshell.com tampaknya tidak dapat mem-parsing opsi -d saat ini, inilah yang dikatakan halaman manual:-d --dir-diff: Copy the modified files to a temporary location and perform a directory diff on them. This mode never prompts before launching the diff tool.
waldyrious

8

Jika Anda menggunakan github, Anda dapat menggunakan situs web untuk ini:

github.com/url/to/your/repo/compare/SHA_of_tip_of_one_branch...SHA_of_tip_of_another_branch

Itu akan menunjukkan kepada Anda perbandingan keduanya.


Ini berfungsi (saya selalu melakukannya) tetapi mengharuskan Anda untuk mendorong kode Anda ke repo github. Tapi itu bukan peringatan yang bisa diterima.
adamwong246

2
atau hanya github.com/url/to/your/repo/compare/dan kemudian Anda dapat memilih cabang
caramba

Dan bagaimana cara mendapatkan SHA itu? Maksud saya, apa arti SHA dari ujung cabang?
Optimus Prime

8

Di GitExtensions Anda dapat memilih kedua cabang di kotak revisi dengan Ctrlmenekan. Kemudian Anda bisa melihat file yang berbeda di antara cabang-cabang itu. Ketika Anda memilih file Anda akan melihat perbedaan untuk itu.

Diambil dari sini


Saya memiliki 2 cabang yang dipilih di kotak revisi saya, tetapi saya tidak melihat perintah perbandingan di menu di bagian atas atau ketika saya melakukan klik kanan.
Eric

1
Saya menemukannya di judul panel bawah. Ada Komit, pohon File, dan Diff.
Eric

7

MEMPERBARUI

Mac: Saya sekarang menggunakan SourceTree. Sangat direkomendasikan. Saya terutama menyukai cara Anda bisa panggung / unstage bakhil.

Linux: Saya sudah sukses dengan:

  • smartgit
  • GitKraken
  • meld

Misalnya menginstal smartgitdi Ubuntu:


Ini berhasil:

git-diffall dengan alat GUI diff seperti berbaur. Lihat poin 5 di sini:

http://rubyglazed.com/post/15772234418/git-ify-your-command-line

Ada postingan yang bagus tentang git dan berbaur di sini: http://nathanhoad.net/how-to-meld-for-git-diffs-in-ubuntu-hardy


4

Jika Anda menggunakan Eclipse, Anda dapat secara visual membandingkan cabang Anda saat ini di ruang kerja dengan tag / cabang lain:

Membandingkan ruang kerja Eclipse


Secara pribadi saya menemukan dukungan Eclipse untuk sub-par yang berbeda, tetapi jika hanya itu yang Anda miliki maka itu tidak masalah.
ysap

4

Anda dapat menggunakan P4Merge gratis dari Perforce untuk melakukan ini juga:

http://www.perforce.com/product/components/perforce-visual-merge-and-diff-tools

masukkan deskripsi gambar di sini

Detail tentang mengintegrasikannya dengan Git dapat ditemukan di sini dan di sini

tetapi ringkasan cepat dari tautan di atas adalah:

  • Masukkan bit-bit berikut ke ~ / .gitconfig Anda, dan kemudian Anda bisa melakukan $ git mergetooldan $ git difftoolmenggunakan p4merge
  • Perhatikan bahwa $ git diffmasih hanya akan menggunakan penampil diff inline default :) (diuji dengan git versi 1.8.2)

Perubahan untuk .gitconfig

[merge]
  keepBackup = false
    tool = p4merge
[mergetool "p4merge"]
    cmd = /Applications/p4merge.app/Contents/Resources/launchp4merge "\"$PWD/$BASE\"" "\"$PWD/$REMOTE\"" "\"$PWD/$LOCAL\"" "\"$PWD/$MERGED\""
    keepTemporaries = false
    trustExitCode = false
    keepBackup = false
[diff]
    tool = p4merge
[difftool "p4merge"]
    cmd = /Applications/p4merge.app/Contents/Resources/launchp4merge "\"$REMOTE\"" "\"$LOCAL\""

2

Jika Anda menggunakan editor WebStorm yang sangat baik, Anda dapat membandingkan dengan cabang apa pun yang Anda inginkan: Webstorm git membandingkan


Sebenarnya saya hanya memperhatikan IntelliJ IDEA (mungkin juga WebStorm) memiliki kemampuan untuk "Menyoroti Komitmen yang Tidak Dipetik", yang membuatnya sangat jelas komit mana yang ada di cabang tetapi tidak di yang lain.
arthurakay

Ya, saya baru saja menggunakan intellij untuk secara selektif meluncurkan banyak perubahan yang dilakukan pada repo dengan "autoformat on save". Sangat mudah ... Harus menemukan opsi "Bandingkan sebelum dengan lokal" untuk melakukannya
Tom H

1

Lihatlah git show-branch

Ada banyak hal yang dapat Anda lakukan dengan fungsionalitas inti git. Mungkin baik untuk menentukan apa yang ingin Anda sertakan dalam diff visual Anda. Sebagian besar jawaban fokus pada perbedaan komit baris per baris, di mana contoh Anda berfokus pada nama file yang terpengaruh dalam komit yang diberikan.

Satu visual yang tampaknya tidak ditangani adalah bagaimana melihat komit yang berisi cabang (apakah sama atau unik).

Untuk visual ini, saya penggemar git show-branch; itu pecah tabel terorganisir dengan baik per cabang kembali ke leluhur bersama. - untuk mencobanya pada repo dengan banyak cabang dengan divergensi, cukup ketik git show-branchdan periksa hasilnya - untuk artikel dengan contoh, lihat Membandingkan Komit Antar Cabang Git


0

Berikut adalah cara melihat perbedaan visual antara seluruh commit, yang bertentangan dengan file tunggal, di Visual Studio (diuji dalam VS 2017). Sayangnya, ini hanya berfungsi untuk komit dalam satu cabang: Di "Tim Explorer", pilih tampilan "Cabang", klik kanan pada repo, dan pilih "Lihat riwayat" seperti pada gambar berikut.

masukkan deskripsi gambar di sini

Kemudian sejarah cabang saat ini muncul di area utama. (Di mana cabang yang berakhir seperti komit sebelumnya pada cabang saat ini ditandai dengan label.) Sekarang pilih beberapa komit dengan Ctrl-Kiri, lalu klik kanan dan pilih "Bandingkan Komit ..." dari menu pop-up.

Untuk lebih lanjut tentang membandingkan cabang di dunia Microsoft, lihat pertanyaan stackoverflow ini: Perbedaan antara cabang git menggunakan Visual Studio .


1
Hanya menampilkan riwayat cabang tunggal, jadi tidak dapat membandingkan antar cabang.
Michał Fita

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.