Bagaimana saya bisa melihat komit lokal yang saya buat, yang belum didorong ke repositori jarak jauh? Kadang-kadang, git status
akan mencetak bahwa cabang saya adalah X melakukan di depan origin/master
, tetapi tidak selalu.
Apakah ini bug dengan instalasi Git saya, atau apakah saya kehilangan sesuatu?
git log @{push}..
. Lihat pintasan baru itu@{push}
(merujuk cabang pelacak jarak jauh yang Anda dorong) dalam jawaban sayagit status --all
seharusnya muncul pada 2010; ataugit status -v
harus benar-benar memberikan output verbal yang mencakup informasi tambahan.Jawaban:
Anda juga dapat melihat diff menggunakan sintaks yang sama
sumber
git config --global alias.ahead "log origin/master..HEAD --oneline"
sehingga saya dapat dengan cepat mengetahui di mana saya berada. Bahkan lebih banyak permen:for i in *; do echo $i && git ahead 2>/dev/null; done
git log --stat origin/master..HEAD
untuk sedikit kedahsyatan ekstra@{u}
sintaks belum tersedia, hanya tersedia pada 12 Februari 2010 . Juga,@{u}
tidak akan berfungsi jika cabang lokal tidak dikonfigurasikan dengan upstream. Akhirnya,@{u}
saat ini tidak memiliki dukungan penyelesaian tab,<remote>/<branch>
dengan penyelesaian tab tetap menjadi salah satu cara tercepat untuk mendapatkan informasi ini, dan itu akan berfungsi apakah upstream dikonfigurasi atau tidak.Jika Anda ingin melihat semua komit di semua cabang yang belum didorong, Anda mungkin mencari sesuatu seperti ini:
Dan jika Anda hanya ingin melihat komit terbaru di setiap cabang, dan nama-nama cabang, ini:
sumber
git log master..HEAD
tidak akan berhasil karena ada beberapa upstreams. Posting ini mengarahkan saya untukgit log MyBranch --not --remotes
menunjukkan semua komitmen yang belum didorong ke hulu dalam satu cabang.--decorate
menunjukkan cabang juga.--graph
membuatnya lebih jelas.Anda dapat menunjukkan semua komit yang Anda miliki secara lokal tetapi tidak di hulu
@{u}
atau@{upstream}
berarti cabang hulu dari cabang saat ini (lihatgit rev-parse --help
ataugit help revisions
untuk detail).sumber
git log @{u}.. -p
Salah satu opsi yang paling berguna adalah -p , yang menunjukkan perbedaan yang diperkenalkan pada setiap konfirmasi.Ini bekerja untuk saya:
Seperti yang ditunjukkan di Git: Lihat semua komitmen atau komitmen yang tidak dicemari yang tidak ada di cabang lain .
sumber
Anda dapat melakukan ini dengan
git log
:Anggap itu
origin
adalah nama hulu Anda, tinggalkan nama revisi apa pun setelah..
menyiratkanHEAD
, yang mencantumkan komit baru yang belum didorong.sumber
git log
dan "2-dots-not-3", selalu mengingatkan saya pada stackoverflow.com/questions/53569/… ;)git branch --set-upstream master origin/<branch>
untuk menyiapkan upstream jika Anda cenderung menggunakan perintah ini untuk melihat komit yang dipentaskan.Semua jawaban lain berbicara tentang "hulu" (cabang tempat Anda menarik).
Tetapi cabang lokal dapat mendorong ke cabang yang berbeda dari cabang yang ditariknya.
master
mungkin tidak mendorong ke cabang pelacakan jarak jauh "origin/master
".The hulu cabang untuk
master
mungkinorigin/master
, tetapi bisa mendorong ke cabang pelacakan terpencilorigin/xxx
atau bahkananotherUpstreamRepo/yyy
.Mereka ditetapkan oleh
branch.*.pushremote
untuk cabang saat ini bersama denganglobal remote.pushDefault
nilai.Hal ini yang cabang terpencil-pelacakan jumlah yang ketika mencari komit unpushed: salah satu yang trek
branch at the remote
di mana cabang lokal akan mendorong untuk.The
branch at the remote
bisa, sekali lagi,origin/xxx
atau bahkananotherUpstreamRepo/yyy
.Git 2.5+ (Q2 2015) memperkenalkan pintasan baru untuk itu:
<branch>@{push}
Lihat komit 29bc885 , komit 3dbe9db , komit adfe5d0 , komit 48c5847 , komit a1ad0eb , komit e291c75 , komit 979cb24 , komit 1ca41a1 , komit 3a429d0 , komit a9f9f8c , komit 8770e6f , komit da66b27 , komit f052154 , komit 9e3751d , berkomitmen ee2499f [semua 21 Mei 2015], dan melakukan e41bf35 [01 Mei 2015] oleh Jeff King (
peff
) .(Digabung oleh Junio C Hamano -
gitster
-dalam komit c4a8354 , 05 Jun 2015)Commit adfe5d0 menjelaskan:
Commit 29bc885 menambahkan:
Jika Anda ingin melihat berapa banyak komit cabang lokal Anda di depan / belakang dibandingkan dengan cabang yang Anda dorong untuk:
sumber
Alias git praktis untuk mencari komitmen yang tidak dicabut di cabang saat ini :
Apa yang dilakukan dasarnya:
tetapi juga menentukan nama cabang saat ini.
sumber
git alias <alias-name> <command>
Dalam hal ini, perintah harus dikelilingi oleh tanda kutip tunggal, untuk menghindari karakter khusus dari shell.git config --global alias.unpushed '!GIT_CURRENT_BRANCH=$(git name-rev --name-only HEAD) && git log origin/$GIT_CURRENT_BRANCH..$GIT_CURRENT_BRANCH --oneline'
Kamu bisa mencoba....
Saya tahu ini bukan opsi baris perintah murni tetapi jika Anda telah menginstalnya dan menggunakan sistem GUI, ini adalah cara yang bagus untuk melihat apa yang Anda cari dan lebih banyak lagi.
(Aku sebenarnya agak terkejut tidak ada yang menyebutkan sejauh ini.)
sumber
gitk --all
untuk melihat semua cabang.tig
adalah alternatif ncurses.gitk
luar biasa! Tidak pernah tahu ini ada! Berguna untuk menelusuri perubahan di UI yang bagus.tig
paling berguna dalam situasi 'terminal saja' - di mana Anda tidak mendapatkan akses GUI desktop. Belajar tentang itu untuk pertama kalinya! MENARIK:tig
adalah REVERSE darigit
!git branch -v
akan menunjukkan, untuk setiap cabang lokal, apakah itu "di depan" atau tidak.sumber
devel
, baris yang sesuai akan* devel 8a12fc0 [ahead 1] commit msg
(*
hanya akan pada baris yang sesuai dengan cabang yang diperiksa).ahead 1
berarti "di depan dengan satu komit", yaitu ada satu komit yang tidak dicuri.git branch -vv
? Lih docs: "Jika diberikan dua kali, cetak nama cabang hulu, juga (lihat juga git remote show <remote>)."behind
dan / atauahead
untuk setiap cabang lokal, yang cukup untuk menyelesaikan masalah OP (mendeteksi komitmen yang tidak dicuri).git branch -v
sudah cukup untuk itu, baru diuji lagi dengan Git 2.16.2 :)Saya memiliki komitmen yang dilakukan sebelumnya, tidak didorong ke cabang apa pun, atau jauh atau lokal. Hanya komit. Tidak ada jawaban lain yang berfungsi untuk saya, tetapi dengan:
Di sana saya menemukan komit saya.
sumber
Saya menggunakan alias berikut ini untuk mendapatkan daftar file (dan status) yang telah dikomit tapi belum didorong (untuk cabang saat ini)
maka lakukan saja:
sumber
Saya percaya cara paling umum untuk melakukan ini adalah menjalankan sesuatu seperti:
Namun, saya pribadi lebih suka menjalankan:
yang memperlihatkan komit dari semua cabang yang tidak digabung hulu, ditambah komit terakhir di hulu (yang ditampilkan sebagai simpul akar untuk semua komit lainnya). Saya sering menggunakannya sehingga saya telah membuat alias
noup
untuk itu.sumber
Saya sarankan Anda melihat skrip https://github.com/badele/gitcheck , saya telah mengkodekan skrip ini untuk memeriksa dalam satu pass semua repositori git Anda, dan itu menunjukkan siapa yang belum berkomitmen dan siapa yang tidak mendorong / menarik.
Di sini hasil sampel
sumber
Ini akan mencantumkan riwayat komentar lokal Anda (belum didorong) dengan pesan yang sesuai
sumber
Itu bukan bug. Yang mungkin Anda lihat adalah status git setelah penggabungan otomatis yang gagal saat perubahan dari jarak jauh diambil tetapi belum digabungkan.
Untuk melihat komit antara repo lokal dan jarak jauh lakukan ini:
Ini 100% aman dan tidak akan membuat tiruan copy pekerjaan Anda. Jika ada perubahan,
git status
akan ditampilkanX commits ahead of origin/master
.Anda sekarang dapat menampilkan log komit yang ada di remote tetapi tidak di lokal:
sumber
Ini bekerja lebih baik untuk saya:
atau:
sumber
@{upstream}
itu literal (upstream
adalah kata ajaib), sementararemotebranch
itu hanya nama cabang Anda.Ada alat bernama unpushed yang memindai semua repositori Git, Mercurial, dan Subversion di direktori kerja yang ditentukan dan memperlihatkan daftar file yang ucommited dan commit yang tidak di -ush. Instalasi sederhana di Linux:
atau
untuk menginstal seluruh sistem.
Penggunaannya juga sederhana:
Lihat
unpushed --help
atau deskripsi resmi untuk informasi lebih lanjut. Ini juga memiliki skrip cronjobunpushed-notify
untuk notifikasi di layar tentang perubahan yang tidak dikomit dan yang tidak di-hapus.sumber
Untuk mendaftar semua komit yang tidak dicopot di semua cabang dengan mudah, Anda dapat menggunakan perintah ini:
sumber
Mirip: Untuk melihat cabang yang tidak dipindahkan:
Itu bisa dicurigai tetapi saya merekomendasikan jawabannya oleh cxreg
sumber
Jika jumlah komit yang belum dikeluarkan adalah angka satu digit, yang sering kali demikian, cara termudah adalah:
git merespons dengan memberi tahu Anda bahwa Anda "di depan N melakukan" relatif asal Anda. Jadi sekarang ingat nomor itu saat melihat log. Jika Anda "meneruskan dengan 3 komitmen", 3 komitmen teratas dalam sejarah masih bersifat pribadi.
sumber
salah satu cara melakukan hal-hal adalah dengan mendaftar komitmen yang tersedia di satu cabang tetapi tidak yang lain.
sumber
Seperti dikatakan di atas:
git beda asal / master..KEPALA
Tetapi jika Anda menggunakan git gui
Setelah membuka antarmuka gui, Pilih "Repositori" -> Di bawah itu " Visualisasikan Sejarah "
Catatan: Beberapa orang suka menggunakan CMD Prompt / Terminal sementara beberapa orang suka menggunakan Git GUI (untuk kesederhanaan)
sumber
Inilah solusi portabel saya (skrip shell yang berfungsi pada Windows juga tanpa pemasangan tambahan) yang menunjukkan perbedaan dari asal untuk semua cabang: git-fetch-log
Contoh output:
Parameter dilewatkan untuk log, misalnya
--oneline
atau--patch
dapat digunakan.sumber
akan menampilkan semua perbedaan dalam komit lokal Anda.
akan menampilkan id komit lokal dan nama komit.
sumber
git show
hanya menampilkan komit terbaru, apakah itu didorong ke remote atau tidak, itu tidak akan menunjukkan semua komitmen Anda yang belum dicopot.Dengan asumsi cabang Anda diatur untuk melacak asal, maka itu akan menunjukkan kepada Anda perbedaannya.
Akan memberi Anda ringkasan komitmen.
sumber
git log origin
akan menunjukkan kepada Anda komit yang sudah didorong , tetapi itu tidak akan menunjukkan komit yang belum didorong , yang lebih sesuai dengan apa yang diminta oleh poster asli.