Mereka bukan karyawan saya, mereka adalah kolega saya dan bukan mereka secara khusus seperti halnya orang pada umumnya. Tapi ya, membaca kembali posting ini sepertinya agak agro. :)
Raif
3
Bisakah Anda menggunakan github atau bitbucket, gitlab? Ada alat untuk mengelola situasi ini dengan tepat. Pengembang membuat permintaan tarik. Anda mendapatkan permintaan dan Anda akan memiliki akses ke antarmuka yang sangat baik yang akan menunjukkan kepada Anda perbedaan dari semua perubahan yang dibuat untuk setiap file. Anda bahkan dapat berkomentar, meminta perubahan, dll. Ketika perubahan baik, Anda dapat menerima permintaan yang akan menggabungkan perubahan ke cabang yang diminta (biasanya berkembang). Itu adalah cara praktik terbaik untuk menangani situasi ini.
Scott Wright
Jawaban:
168
Alternatif jawaban oleh @Marco Ponti, dan menghindari checkout:
ah! ini menyenangkan, sekarang bagaimana kalau saya ingin mengatakan <notMainDev> menjadi cabang saat ini. itu tidak harus menentukannya?
Raif
29
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.).
twalberg
hmmm, well, saya kira yang saya maksud adalah saya ingin melakukan git diff --name-only <notMainDev> $ (git merge-base <notMainDev> <MY_CURRENT_CO_BRANCH>) di mana MY_CURRENT_CO_BRANCH tentu saja akan menjadi cabang saya saat ini diperiksa cabang
Raif
Anda bisa melakukannya juga. Itu akan menemukan titik di mana <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-basediharapkan oleh dua argumen - tidak ada jalan pintas, setidaknya dalam versi saat ini.
twalberg
1
baik! Saya mendapatkannya. Atas perkenan rekan saya, siapa namanya. git merge-base <notMainDev> 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}')
wow cepat dan juga intinya. Terima kasih. tapi aku suka git. selalu cepat dan to the point
Raif
23
Saya percaya itu juga akan menunjukkan hal-hal yang telah berubah <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.
twalberg
Ya, itu benar @twalberg akan menunjukkan perubahan itu jika cabang-cabangnya berbeda. Saya berasumsi notMainDevakan tetap up to date dengan komit mainDev ... Saya biasanya merasa berguna untuk melihat perbedaan itu juga.
Marco Ponti
tidak bisakah Anda menentukan - hanya-hanya untuk menunjukkan file yang diubah di sisi kanan?
TheZenker
Anda dapatkan <sha-of-branch-point>dengangit rev-parse <branch-name>
fc9.30
69
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
Meskipun ini menunjukkan apa yang telah berubah, ini menunjukkan SEMUA perubahan, bukan ringkasan dari file yang diubah ... yang mana yang membawa saya ke halaman ini sejak awal :)
Chris Rutledge
1
kemudian tambahkan bendera --name-only untuk ini. atau --short-stat
exussum
2
git diff --name-only master..jika Anda hanya ingin nama-nama file yang berbeda antara dua cabang.
Adam
1
Ini tidak akan berfungsi dengan baik jika master Anda telah melakukan setelah Anda membuat cabang samping Anda.
simplylizz
2
@implylizz ya itu. itulah tepatnya yang sedang dipecahkan ini
exussum
45
Saya tidak percaya ada begitu banyak cara untuk melakukan ini. Saya menggunakan whatchanged sebagai seseorang yang diposting sebelumnya, hanya dengan argumen berikut:
Ini tampaknya menjadi jawaban termudah di sini karena tidak memerlukan informasi tambahan. Outputnya terlihat benar dan jauh lebih mudah diingat daripada jawaban yang diterima!
RickMeasham
1
Terima kasih, ini menarik, lebih banyak bertele-tele. Ini memberikan output dari setiap komit, dalam urutan terbalik. git-whatchanged - Tampilkan log dengan perbedaan setiap komit memperkenalkan git-scm.com/docs/git-whatchanged
nealmcb
Dari the git docs :New users are encouraged to use git-log instead. The whatchanged command is essentially the same as git-log but defaults to show the raw format diff output and to skip merges.
Derek S
21
Saya sangat menyukai jawaban @ twalberg tetapi saya tidak ingin harus mengetikkan nama cabang saat ini setiap saat. Jadi saya menggunakan ini:
Solusi Anda berfungsi untuk saya dan saya mendapatkan daftar file yang saya harapkan. Saya seorang pemula Git dan telah digunakan git diff master... --name-onlysaat 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?
hungerstar
Perintah Anda akan bekerja persis sama, jika master tidak memiliki komitmen baru sejak cabang Anda dibuat. Saya pikir perintah saya akan sama dengan git diff master.. --name-only(perhatikan hanya ada 2 titik, bukan 3). Untuk memahami apa yang dimaksud dengan titik-titik, lihat jawaban ini
Yep_It's_Me
Luar biasa! Terima kasih atas balasan dan wawasan yang cepat. Sangat dihargai.
hungerstar
12
git whatchanged tampaknya menjadi alternatif yang bagus.
Dari the git docs :New users are encouraged to use git-log instead. The whatchanged command is essentially the same as git-log but defaults to show the raw format diff output and to skip merges.
Variasi ini membandingkan KEPALA master dengan cabang saat ini. Jawaban yang diterima membandingkan keadaan master pada saat Anda bercabang . Entah mungkin memiliki jawaban yang Anda cari, tergantung pada apa yang ingin Anda ketahui.
Mark Stosberg
8
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 ~/.gitconfigfile Anda agar mudah:
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:
Ini hanya apa yang saya butuhkan untuk menyisir file yang diubah sambil mengecualikan file yang telah dihapus. rubocop --fail-level error $(git diff-tree --no-commit-id --name-only -r origin/master..HEAD --diff-filter=M)
HarlemSquirrel
1
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:
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:
Jawaban:
Alternatif jawaban oleh @Marco Ponti, dan menghindari checkout:
Jika shell khusus Anda tidak memahami konstruk $ (), gunakan kembali tanda centang.
sumber
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 yanggit 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:
Ini akan menunjukkan kepada Anda hanya nama file yang berbeda antara dua cabang.
sumber
<mainDev>
sejak cabang bercabang. Anda mungkin ingin menggunakangit 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!
Jadi lihat perubahan hanya pada
branch
Untuk memeriksa penggunaan cabang saat ini
Terima kasih untuk jqr
Ini tangan pendek untuk
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
sumber
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:
Ini hanya mencantumkan nama file, dan hanya yang berubah pada cabang saat ini.
sumber
New users are encouraged to use git-log instead. The whatchanged command is essentially the same as git-log but defaults to show the raw format diff output and to skip merges.
Saya sangat menyukai jawaban @ twalberg tetapi saya tidak ingin harus mengetikkan nama cabang saat ini setiap saat. Jadi saya menggunakan ini:
sumber
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 inigit whatchanged
tampaknya menjadi alternatif yang bagus.sumber
New users are encouraged to use git-log instead. The whatchanged command is essentially the same as git-log but defaults to show the raw format diff output and to skip merges.
yang ingin kita bandingkan.
sumber
Bagaimana jika ini semudah ini?
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: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 .sumber
Ini akan memberi Anda daftar file yang telah ditambahkan atau dimodifikasi di bawah cabang ini.
sumber
Untuk beberapa alasan tidak ada yang disebutkan
git-tree
. Lihat https://stackoverflow.com/a/424142/1657819git-tree
lebih disukai karena ini perintah plumbing ; dimaksudkan untuk diprogram (dan, mungkin, lebih cepat)(dengan asumsi cabang dasar adalah
master
)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
:Anda juga dapat menggunakan
--name-status
alih-alih--name-only
melihat status file (A
/M
/D
dan seterusnya)sumber
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:
sumber
Memperluas dari apa yang dimiliki @twalberg dan @iconoclast, jika Anda menggunakan cmd untuk alasan apa pun, Anda dapat menggunakan:
sumber
File batch berikut didasarkan pada jawaban twalberg tetapi akan bekerja di Windows:
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:
sumber
Saya menggunakan grep jadi saya hanya mendapatkan baris dengan diff --git yang merupakan path file:
sumber