Apakah ada cara untuk melihat file apa yang telah berubah di cabang?
Apakah ada cara untuk melihat file apa yang telah berubah di cabang?
Jawaban:
Alternatif jawaban oleh @Marco Ponti, dan menghindari checkout:
git diff --name-only <notMainDev> $(git merge-base <notMainDev> <mainDev>)
Jika shell khusus Anda tidak memahami konstruk $ (), gunakan kembali tanda centang.
git diff --name-only <some-other-branch>
akan menunjukkan kepada Anda file apa yang berbeda antara cabang Anda saat ini dan <some-other-branch>
. Jadi pada dasarnya perintah yang sama, tetapi perhatikan bahwa Anda dapat menggunakan ini untuk menemukan file yang berbeda antara setiap dua cabang, bahkan jika mereka tidak berhubungan jarak jauh. Apakah perbandingan itu bermanfaat atau tidak tergantung pada topologi cabang Anda ... Juga, note <some-other-branch>
benar-benar bisa berupa komit sama sekali, atau apa pun yang diselesaikan menjadi satu (tag, dll.).
<notMainDev>
dan yang <MY_CURRENT_CO_BRANCH>
terbaru memiliki leluhur yang sama, dan dibandingkan <notMainDev>
dengan leluhur itu. Namun, Anda harus memberikan nama cabang saat ini, seperti yang git merge-base
diharapkan oleh dua argumen - tidak ada jalan pintas, setidaknya dalam versi saat ini.
git branch | grep '\*' | awk '{print $2}'
yang akan mendapatkan komit untuk cabang antara <notMainDev> dan cabang saya saat ini. Saya kemudian dapat melakukan git diff --name-only <notMainDev> $ (git merge-base <notMainDev> git branch | grep '\*' | awk '{print $2}'
)
Yang harus Anda lakukan adalah sebagai berikut:
git checkout <notMainDev>
git diff --name-only <mainDev>
Ini akan menunjukkan kepada Anda hanya nama file yang berbeda antara dua cabang.
<mainDev>
sejak cabang bercabang. Anda mungkin ingin menggunakan git diff --name-only <sha-of-branch-point>
sebagai gantinya, atau melihat jawaban alternatif yang saya posting yang menghindari checkout.
notMainDev
akan tetap up to date dengan komit mainDev ... Saya biasanya merasa berguna untuk melihat perbedaan itu juga.
<sha-of-branch-point>
dengangit rev-parse <branch-name>
kagum ini belum dikatakan sejauh ini!
git diff master...branch
Jadi lihat perubahan hanya pada branch
Untuk memeriksa penggunaan cabang saat ini
git diff master...
Terima kasih untuk jqr
Ini tangan pendek untuk
git diff $(git merge-base master branch) branch
jadi dasar gabungan (komit umum terbaru antara cabang) dan ujung cabang
Juga menggunakan asal / master alih-alih master saja akan membantu jika master lokal Anda diberi tanggal
git diff --name-only master..
jika Anda hanya ingin nama-nama file yang berbeda antara dua cabang.
Saya tidak percaya ada begitu banyak cara untuk melakukan ini. Saya menggunakan whatchanged sebagai seseorang yang diposting sebelumnya, hanya dengan argumen berikut:
git whatchanged --name-only --pretty="" origin..HEAD
Ini hanya mencantumkan nama file, dan hanya yang berubah pada cabang saat ini.
Saya sangat menyukai jawaban @ twalberg tetapi saya tidak ingin harus mengetikkan nama cabang saat ini setiap saat. Jadi saya menggunakan ini:
git diff --name-only $(git merge-base master HEAD)
git diff master... --name-only
saat dijalankan pada cabang target dan mendapatkan hasil yang sama. Bisakah Anda berbaik hati memberikan umpan balik tentang apa yang baik vs buruk antara jawaban Anda dan perintah yang saya berikan?
git diff master.. --name-only
(perhatikan hanya ada 2 titik, bukan 3). Untuk memahami apa yang dimaksud dengan titik-titik, lihat jawaban ini
git diff --name-only master...branch-name
yang ingin kita bandingkan.
Bagaimana jika ini semudah ini?
git changed
Jika Anda mau berasumsi bahwa cabang utama disebut "master", dan bahwa Anda membuat cabang lain dari master, maka Anda dapat menambahkan alias ini ke ~/.gitconfig
file Anda agar mudah:
cbranch = !"git branch | grep '*' | cut -f2 -d' '"
changed = !"git diff --name-only $(git cbranch) $(git merge-base $(git cbranch) master)"
Asumsi-asumsi itu akan bekerja untuk kebanyakan orang di kebanyakan situasi, tetapi Anda harus sadar bahwa Anda membuatnya.
Anda juga harus menggunakan shell yang mendukung $()
. Sangat mungkin shell Anda mendukung ini .
git show --stat origin/branch_name
Ini akan memberi Anda daftar file yang telah ditambahkan atau dimodifikasi di bawah cabang ini.
Untuk beberapa alasan tidak ada yang disebutkan git-tree
. Lihat https://stackoverflow.com/a/424142/1657819
git-tree
lebih disukai karena ini perintah plumbing ; dimaksudkan untuk diprogram (dan, mungkin, lebih cepat)
(dengan asumsi cabang dasar adalah master
)
git diff-tree --no-commit-id --name-only -r master..branch-name
Namun ini akan menunjukkan kepada Anda semua file yang terpengaruh di cabang, jika Anda hanya ingin melihat file yang dimodifikasi secara eksplisit , Anda dapat menggunakan --diff-filter
:
git diff-tree --no-commit-id --name-only -r master..branch-name --diff-filter=M
Anda juga dapat menggunakan --name-status
alih-alih --name-only
melihat status file ( A
/ M
/ D
dan seterusnya)
rubocop --fail-level error $(git diff-tree --no-commit-id --name-only -r origin/master..HEAD --diff-filter=M)
Jawaban yang diterima - git diff --name-only <notMainDev> $(git merge-base <notMainDev> <mainDev>)
- sangat dekat, tetapi saya perhatikan bahwa statusnya salah untuk dihapus. Saya menambahkan file dalam cabang, namun perintah ini (menggunakan --name-status
) memberi file saya menghapus status "A" dan file yang saya tambahkan status "D".
Saya harus menggunakan perintah ini sebagai gantinya:
git diff --name-only $(git merge-base <notMainDev> <mainDev>)
Memperluas dari apa yang dimiliki @twalberg dan @iconoclast, jika Anda menggunakan cmd untuk alasan apa pun, Anda dapat menggunakan:
FOR /F "usebackq" %x IN (`"git branch | grep '*' | cut -f2 -d' '"`) DO FOR /F "usebackq" %y IN (`"git merge-base %x master"`) DO git diff --name-only %x %y
File batch berikut didasarkan pada jawaban twalberg tetapi akan bekerja di Windows:
@ECHO OFF
C: :: <== OR USE A DIFFERENT DRIVE
CD \path\to\where\git\files\are :: <== CHANGE TO THE ACTUAL PATH
SET /p b="Enter full path of an ALREADY MERGED branch to compare with origin/master: "
bash --login -i -c "git diff --name-only %b% $(git merge-base %b1% origin/drop2/master)"
PAUSE
Di atas mengasumsikan bahwa cabang utama adalah origin / master dan bahwa git bash dimasukkan ketika Git diinstal (dan lokasinya berada di lingkungan path). Saya sebenarnya perlu menunjukkan perbedaan yang sebenarnya menggunakan alat diff yang dikonfigurasi (kdiff3) sehingga menggantikan perintah bash berikut di atas:
bash --login -i -c "git difftool --dir-diff %b% $(git merge-base %b1% origin/drop2/master)"