Berikut adalah dua pertanyaan yang berbeda tetapi saya pikir mereka saling berhubungan.
Saat menggunakan Git, bagaimana cara menemukan perubahan yang telah saya lakukan secara lokal, tetapi belum mendorong ke cabang jauh? Saya mencari sesuatu yang mirip dengan perintah Mercurial
hg outgoing
.Saat menggunakan Git, bagaimana cara menemukan perubahan apa yang dimiliki cabang jauh sebelum melakukan tarikan? Saya mencari sesuatu yang mirip dengan perintah Mercurial
hg incoming
.
Untuk yang kedua: apakah ada cara untuk melihat apa yang tersedia dan kemudian memilih perubahan yang ingin saya tarik?
hg incoming
danhg outgoing
sebenarnya yang dilakukan. Setara Git terdekat yang saya temukan adalah--dry-run
opsi. Hanyagit pull --dry-run
dan Anda akan melihat daftar semua hal yang perlu terjadi.Jawaban:
Git tidak dapat mengirim informasi semacam itu melalui jaringan, seperti Hg bisa. Tetapi Anda dapat menjalankan
git fetch
(yang lebih sepertihg pull
daripadahg fetch
) untuk mengambil komit baru dari server jauh Anda.Jadi, jika Anda memiliki cabang yang dipanggil
master
dan remote dipanggilorigin
, setelah menjalankangit fetch
, Anda juga harus memiliki cabang yang dipanggilorigin/master
. Anda kemudian bisa mendapatkangit log
semua komitmen yangmaster
perlu menjadi supersetorigin/master
dengan melakukangit log master..origin/master
. Balikkan keduanya untuk mendapatkan yang sebaliknya.Seorang teman saya, David Dollar, telah membuat beberapa skrip git shell untuk disimulasikan
hg incoming/outgoing
. Anda dapat menemukannya di http://github.com/ddollar/git-utils .sumber
Dimulai dengan Git 1.7.0, ada sintaks khusus yang memungkinkan Anda untuk merujuk secara umum ke cabang upstream:
@{u}
atau@{upstream}
.Untuk meniru
hg incoming
:Untuk meniru
hg outgoing
:Saya menggunakan yang berikut
incoming
danoutgoing
alias untuk membuat yang di atas lebih mudah digunakan:sumber
git branch --set-upstream foo origin/foo
.git log @{u}..
daftar setiap perubahan dalam repo untuk saya. Tidak mungkin mereka belum ada.git rev-parse --symbolic-full-name @{u}
mencetak referensi jarak jauh yang sesuai. Juga,git log @{u}..
memperlihatkan komit yang tidak dapat dijangkau oleh cabang hulu, yang dapat menyertakan komit yang sudah ada di repositori jarak jauh (jika mereka dapat dijangkau dengan referensi yang berbeda). Ini akan terjadi tepat setelah Anda bergabung dengan cabang yang sudah didorong.checkout <somebranch>
danmerge <otherbranch>
. Pada titik ini, saya melakukanlog @{u}..
dan melihat setiap perubahan terdaftar.Bukan jawaban penuh tetapi git fetch akan menarik repo jarak jauh dan tidak melakukan penggabungan. Anda kemudian dapat melakukan
sumber
git diff origin/master master
Gunakan "git log origin..HEAD"
Gunakan "git fetch" diikuti oleh "git log HEAD..origin". Anda dapat memilih komit individu menggunakan id komit yang terdaftar.
Tentu saja, asumsi di atas mengasumsikan bahwa "asal" adalah nama cabang pelacak jarak jauh Anda (jika Anda telah menggunakan klon dengan opsi default).
sumber
Ada juga ini, untuk membandingkan semua cabang:
Inilah yang dikatakan halaman manual git log tentang ini:
Di atas adalah untuk
outgoing
. Untukincoming
, cukup tukar:sumber
Saya akan lakukan
untuk
hg incoming
danuntuk
hg outgoing
.sumber
git-out adalah skrip yang ditiru dengan
hg outgoing
cukup akurat. Ini mem-parsing pada output "push -n", sehingga menghasilkan output yang akurat jika Anda perlu menentukan argumen tambahan untuk mendorong.sumber
masuk git
git keluar
sumber
Ketika "git log" dan @ {u} jawaban awalnya memberi saya kesalahan "revisi tidak dikenal", saya mencoba saran Chris / romkyns dari
git push --dry-run
.Anda akan mendapatkan output seperti "5905..4878 master-> master". 5905 adalah komit terbaru yang dimiliki dan dikomit melalui remote (dan termasuk) 4878 akan diterapkan ke remote.
Anda kemudian dapat menggunakan 5905..4878 sebagai argumen untuk beberapa perintah git lain untuk mendapatkan detail lebih lanjut:
sumber
Ketika Anda melakukan git fetch, semua konten termasuk cabang, tag (ref) disimpan sementara di .git / FETCH_HEAD yang isinya dapat dilihat dengan perintah: git log FETCH_HEAD Jika Anda tidak menggunakan akhiran -a dengan git fetch maka secara default , Konten FETCH_HEAD akan ditimpa oleh konten baru. Dari konten ini, Anda dapat melihat dan memutuskan cabang mana yang ingin Anda gabungkan jika Anda melakukannya atau Anda dapat memilih sakura sederhana jika Anda ingin hanya beberapa komit dari apa yang telah diambil dengan mengambil.
sumber