Bagaimana cara memeriksa perubahan pada repositori Git (asal) jarak jauh?

249

Pertanyaan

Apa perintah Git untuk melakukan alur kerja berikut?

Skenario

Saya kloning dari repositori dan melakukan beberapa komitmen saya sendiri ke repositori lokal saya. Sementara itu, kolega saya membuat komit ke repositori jarak jauh. Sekarang, saya ingin:

  1. Periksa apakah ada komit baru dari orang lain di repositori jarak jauh, yaitu origin?

  2. Katakanlah ada 3 komit baru pada repositori jarak jauh sejak tarikan terakhir saya, saya ingin membedakan komit repositori jarak jauh, yaitu HEAD~3dengan HEAD~2, HEAD~2dengan HEAD~1dan HEAD~1dengan HEAD.

  3. Setelah mengetahui apa yang berubah dari jarak jauh, saya ingin mendapatkan komitmen terbaru dari yang lain.

Temuan saya sejauh ini

Untuk langkah 2: Saya tahu notasi caret HEAD^, HEAD^^dll. Dan notasi tilde HEAD~2, HEAD~3dll.

Untuk langkah 3: Yaitu, saya kira, hanya a git pull.

Lernkurve
sumber
3
Kemungkinan duplikat Cek jika diperlukan tarikan di Git
Daniele Orlando
@Aniele yang menjawab tautan Anda luar biasa dan bahkan dilengkapi dengan skrip bash yang dapat disesuaikan. +1
gorbysbm

Jawaban:

255

Anda bisa git fetch originmemperbarui cabang jarak jauh di repositori Anda untuk menunjuk ke versi terbaru. Untuk perbedaan terhadap remote:

git diff origin/master

Ya, Anda dapat menggunakan notasi tanda sisipan juga.

Jika Anda ingin menerima perubahan jarak jauh:

git merge origin/master
Alan Haggai Alavi
sumber
34
Perbedaannya terlihat terbalik. Saya merasa lebih mudah digunakan git diff HEAD origin/mastersehingga diff menunjukkan apa yang akan diterapkan jika saya menerima perubahan jarak jauh.
cbliard
2
"git fetch origin" dan "git show-branch * master" bermanfaat bagi saya.
Léa Massiot
159
git remote update && git status 

Menemukan ini pada jawaban untuk Memeriksa apakah tarikan diperlukan di Git

git remote updateuntuk memperbaharui referensi jarak jauh Anda. Kemudian Anda dapat melakukan salah satu dari beberapa hal, seperti:

  1. git status -unoakan memberi tahu Anda apakah cabang yang Anda lacak ada di depan, di belakang atau telah menyimpang. Jika tidak mengatakan apa-apa, lokal dan remote adalah sama.

  2. git show-branch *master akan menunjukkan kepada Anda komit di semua cabang yang namanya berakhir pada master (mis. master dan asal / master).

Jika Anda menggunakan -vdengan git remote updateAnda dapat melihat cabang mana yang diperbarui, sehingga Anda tidak benar-benar membutuhkan perintah lebih lanjut.

Rajani Karuturi
sumber
Tidak cukup. Saya harus melakukan git pull <remote> <branch>setelah itu segera setelah saya perlu mendorong, karena ujung cabang lokal saya ada di belakang rekan jauh.
Overdrivr
3
@Overdrivr pertanyaan meminta cara untuk memeriksa perubahan sebelum mendapatkan komit ke cabang lokal. jadi, ya, Anda harus memperbarui cabang lokal Anda setelah memeriksa perubahan.
Rajani Karuturi
Apakah ini untuk asal yang jauh atau hulu?
vikramvi
1
Opsi -v itu tidak berfungsi. Karena git remote update -vsaya dapaterror: unknown switch `v'
Shad
1
@Shad, Anda seharusnya git remote -v updatetidak melakukannyagit remote update -v
Rajani Karuturi
34

Cara yang baik untuk memiliki pandangan sintetis tentang apa yang terjadi "asal" adalah:

git remote show origin
perasaan
sumber
11
Tetapi perintah itu tidak menunjukkan kepada saya berapa banyak komit yang ada di "asal" sejak tarikan terakhir saya, bukan? Cara saya memahaminya "git remote show origin" adalah operasi lokal dan tidak pergi ke jaringan untuk mengambil informasi.
Lernkurve
24

Saya hanya menggunakan

git remote update
git status

Yang terakhir kemudian melaporkan berapa banyak komit di belakang lokal saya. (jika ada)

kemudian

git pull origin master

untuk memperbarui informasi lokal saya :)

Paul 501
sumber
13

Pertanyaan rutin saya agak "sesuatu yang baru atau diubah dalam repo" jadi whatchanged berguna. Ditemukan di sini .

git whatchanged origin/master -n 1
iceCode
sumber
1
tidak pernah ada perintah baru ini. Terima kasih. inilah yang saya cari
Saurabh Jain
11

Salah satu solusi potensial

Terima kasih atas solusi Alan Haggai Alavi saya menemukan alur kerja potensial berikut:

Langkah 1:

git fetch origin

Langkah 2:

git checkout -b localTempOfOriginMaster origin/master
git difftool HEAD~3 HEAD~2
git difftool HEAD~2 HEAD~1
git difftool HEAD~1 HEAD~0

Langkah 3:

git checkout master
git branch -D localTempOfOriginMaster
git merge origin/master
Lernkurve
sumber
13
Mengapa Anda perlu membuat cabang sementara untuk perbedaan antar revisi remote? Anda bisagit diff origing/master^ origing/master^^
Pablo Marin-Garcia
@ PabloMarin-Garcia: Terima kasih. Saya tidak tahu itu saat itu.
Lernkurve
2

git statustidak selalu menunjukkan perbedaan antara master dan asal / master bahkan setelah pengambilan. Jika Anda ingin kombinasi git fetch origin && git statusberfungsi, Anda perlu menentukan informasi pelacakan antara cabang lokal dan asal:

# git branch --set-upstream-to=origin/<branch> <branch>

Untuk cabang master:

git branch --set-upstream-to=origin/master master
serigala
sumber
0

karena belum disarankan sejauh ini ... dan saya merasa cukup berguna ...

saya hanya menggunakan

git fetch origin

untuk mengambil perubahan jarak jauh, dan kemudian saya melihat komit jarak jauh lokal dan yang tertunda (dan perubahan terkait) dengan alat gitk yang bagus ( https://git-scm.com/docs/gitk ) yang melibatkan argumen --semua seperti

gitk --all
raphael
sumber