Bagaimana saya melihat perbedaan komit antara cabang di git?


341

Saya menggunakan X-branch dan telah menambahkan beberapa commit di atasnya. Saya ingin melihat semua perbedaan antara MASTER dan cabang yang saya ikuti dalam hal komitmen. Saya hanya bisa melakukan

git checkout master
git log

dan kemudian a

git checkout branch-X
git log

dan berbeda secara visual ini, tapi saya berharap untuk metode yang lebih mudah, kurang rawan kesalahan.


Jawaban:


324

Anda bisa mendapatkan hasil visual yang benar-benar bagus tentang perbedaan cabang Anda dengan ini

git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset' --abbrev-commit --date=relative master..branch-X

13
Itu tidak akan menunjukkan kepada Anda perbedaan antara cabang meskipun itulah yang diminta.
Pablo Fernandez heelhook

47
git log --oneline --graph --all --decorate --abbrev-commitakan memberi Anda hasil yang serupa dalam perintah yang lebih pendek / lebih mudah dibaca
Pablo Fernandez heelhook

4
Saya suka ini:git log --all --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset'
Avery

6
Sangat rumit.
Shawn Erquhart

12
git log --oneline --graph --all --decoratesudah cukup, --abbrev-committidak diharuskan, --onelinekependekan dari--pretty=oneline --abbrev-commit
avmohan

720

Anda dapat melakukannya dengan mudah

git log master..branch-X

Itu akan menunjukkan Anda melakukan bahwa cabang-X memiliki tetapi master tidak.


9
Apakah ada opsi jika kedua cabang berisi komit sedangkan yang lain tidak? Saat ini, Anda harus membalik argumen dan menjalankannya dengan dua cara untuk melihat commit yang tidak dimiliki cabang lain.
Elliott Slaughter

38
Jika Anda sudah beralih ke branch-XAnda dapat menggunakangit log master..
Dave

8
@ElliottSlaughter: Jika Anda ingin menemukan komit yang berada di master atau branch-X tetapi tidak keduanya, Anda bisa menggunakan git log master...branch-X(tiga titik alih-alih dua). Lihat man gitrevisionsuntuk info lebih lanjut.
Xavier T.

3
Benar-benar hanya setengah jawabannya. Setiap komit master yang menyebabkan cabang-cabang menyimpang tidak akan muncul
jterm

9
Jika komit telah dipilih dari cabang-X untuk dikuasai ini tidak akan menyaringnya. Mereka masih akan berada dalam daftar komit "Di cabang-X tetapi tidak pada master" meskipun mereka sebenarnya di keduanya ..
Tuffwer

87

Saya pikir ini masalah pilihan dan konteks. Saya lebih suka menggunakan

git log origin/master..origin/develop --oneline --no-merges

Ini akan menampilkan komit dalam pengembangan yang tidak di cabang master.

Jika Anda ingin melihat file mana yang sebenarnya dimodifikasi gunakan

git diff --stat origin/master..origin/develop --no-merges

Jika Anda tidak menentukan argumen, itu akan menampilkan perbedaan penuh. Jika Anda ingin melihat perbedaan visual, instal melddi linux, atau WinMergedi windows. Pastikan mereka adalah difftools default. Kemudian gunakan sesuatu seperti

git difftool -y origin/master..origin/develop --no-merges

Jika Anda ingin membandingkannya dengan cabang saat ini. Lebih nyaman menggunakan HEAD daripada menggunakan nama cabang seperti use:

git fetch
git log origin/master..HEAD --oneline --no-merges

Ini akan menunjukkan kepada Anda semua komitmen, yang akan digabung


1
Jika Anda membandingkan cabang rilis yang mungkin memiliki gabungan. Anda dapat menghapus komit gabungan (yang tidak menambahkan nilai apa pun) dengan bantuan param --no-mergesseperti:git log origin/master..HEAD --oneline --no-merges
claudiu.f.marginean

15

Jika Anda menggunakan Linux, gitg harus melakukannya dengan sangat cepat dan grafis.

Jika Anda bersikeras pada baris perintah Anda dapat menggunakan:

git log --oneline --decorate

Agar git loglebih bagus secara default, saya biasanya mengatur preferensi global ini:

git config --global log.decorate true
git config --global log.abbrevCommit true

14

Saya sarankan yang berikut untuk melihat perbedaan "dalam komit". Untuk perbedaan simetris, ulangi perintah dengan argumen terbalik:

git cherry -v master [your branch, or HEAD as default]

Apakah ini berbeda dari git master..branch-X?
ilmirons

2
Tentu, "git cherry" cerdas: ia menerjemahkan dari "commit" ke "patches / diffs" dan dapat menghindari melaporkan "patch" yang ada di kedua cabang tetapi diterapkan dalam urutan yang berbeda.
mmaruska

8

jika Anda ingin menggunakan gitk:

gitk master..branch-X

ini memiliki GUi sekolah tua yang bagus


4

Bukan jawaban yang sempurna tetapi bekerja lebih baik untuk orang yang menggunakan Github:

masukkan deskripsi gambar di sini

Buka repo Anda: Insights -> Network


Selain itu, membuat Permintaan Tarik juga akan menunjukkan perbedaan cabang.
pkamb

Ya Tuhan, aku ingin memelukmu.
esseara

@esseara Saya seorang pelukan besar juga :)) Anda dipersilakan: D
AI

2

Jika Anda ingin membandingkan berdasarkan pesan yang dikomit, Anda dapat melakukan hal berikut:

git fetch
git log --oneline origin/master | cut -d' ' -f2- > master_log
git log --oneline origin/branch-X | cut -d' ' -f2- > branchx_log
diff <(sort master_log) <(sort branchx_log)

1
Alih-alih menggunakan --onelinedan cutgit log --format='%s'
memipis

0
#! /bin/bash
if ((2==$#)); then
  a=$1
  b=$2
  alog=$(echo $a | tr '/' '-').log
  blog=$(echo $b | tr '/' '-').log
  git log --oneline $a > $alog
  git log --oneline $b > $blog
  diff $alog $blog
fi

Menyumbang ini karena memungkinkan a dan b log untuk dibedakan secara visual, berdampingan, jika Anda memiliki alat visual diff. Ganti perintah diff di akhir dengan perintah untuk memulai alat diff visual.


0

Saya menggunakan beberapa jawaban dan menemukan satu yang cocok dengan kasus saya (pastikan semua tugas ada di cabang rilis).

Metode lain juga berfungsi tetapi saya menemukan bahwa mereka mungkin menambahkan baris yang tidak saya butuhkan, seperti menggabungkan komit yang tidak menambah nilai.

git fetch
git log origin/master..origin/release-1.1 --oneline --no-merges

atau Anda dapat membandingkan arus Anda dengan master

git fetch
git log origin/master..HEAD --oneline --no-merges

git fetch ada untuk memastikan Anda menggunakan info terbaru.

Dengan cara ini, setiap komit akan berada pada satu baris dan Anda dapat menyalin / menempelkannya ke dalam editor teks dan mulai membandingkan tugas-tugas dengan komit yang akan digabung.

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.