git berbeda antara repositori jarak jauh asli dan kloning

170

Saya telah mengkloning repositori github dan tidak membuat perubahan secara lokal. Repositori Github bergerak maju dengan komit di cabang yang sama.

  1. Bagaimana cara menemukan perbedaan antara repositori lokal saya dan repositori github asli?
  2. Bagaimana cara menemukan perbedaan antara copy pekerjaan saya dan repositori github asli?
  3. Bagaimana cara menemukan perbedaan antara repositori lokal saya dan repositori github lain dari proyek yang sama?
Oleg Proudnikov
sumber
1
mungkin duplikat membandingkan cabang git lokal dengan cabang jarak jauh?
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
1
@CiroSantilli 新疆 改造 中心 六四 事件 法轮功: Saya pikir ini cukup berbeda: pertanyaan lain menanyakan tentang cabang jarak jauh generik, sedangkan ini mengacu pada GitHub, ditambah menanyakan tiga titik awal yang berbeda. Mereka pasti mirip, jadi tautan Anda tentu berguna.
jvriesem

Jawaban:

161

1) Tambahkan repositori jarak jauh yang ingin Anda bandingkan:

git remote add foobar git://github.com/user/foobar.git

2) Perbarui salinan remote Anda:

git fetch foobar

Ambil tidak akan mengubah copy pekerjaan Anda.

3) Bandingkan cabang apa pun dari repositori lokal Anda dengan remote yang Anda tambahkan:

git diff master foobar/master
dbyrne
sumber
Apakah saya perlu git fetch sebelum diff? Saya kira tidak ada cara untuk berbeda tanpanya.
Oleg Proudnikov
Ini sebenarnya hanya menjawab pertanyaan 3 (berbeda dengan repo github lain).
Ruslan Kabalin
5
Tidak ada yang membedakan "repositori github asli" dari repositori jarak jauh lainnya. Atau apakah saya salah paham akan sesuatu?
dbyrne
Ketika saya mencobanya dengan git 2.7.4 "git diff master foobar / master" tidak menunjukkan perbedaan. Saya melihat saya membandingkan salinan lokal saya ("master") dengan repo yang diberikan sebagai argumen 1 ("master") dan di sana hanya berbeda "path / file" "foobar / master". Tetapi perintah "diff foobar / master" bekerja untuk saya, membandingkan master lokal saya dengan foobar / master.
user2081279
Alih-alih fetch(no. 2) sebagai alternatif: git remote update- ia akan memperbarui semua cabang Anda yang diatur untuk melacak yang jauh, tetapi tidak menggabungkan perubahan apa pun di; ataugit pull
Timo
49

Balasan lain untuk pertanyaan Anda (dengan asumsi Anda menguasai dan sudah melakukan "git fetch origin" untuk membuat Anda sadar tentang perubahan jarak jauh):

1) Berkomitmen pada cabang jarak jauh sejak saat cabang lokal dibuat:

git diff HEAD...origin/master

2) Saya berasumsi dengan "copy pekerjaan" yang Anda maksud cabang lokal Anda dengan beberapa komit lokal yang belum pada remote. Untuk melihat perbedaan apa yang Anda miliki di cabang lokal Anda tetapi itu tidak ada pada menjalankan cabang jarak jauh:

git diff origin/master...HEAD

3) Lihat jawabannya oleh dbyrne.

Ruslan Kabalin
sumber
Terima kasih atas HEAD..origin/mastersintaksnya! Kami telah mendapatkan kesalahan dengan origin / HEAD tidak ada, dan ini menyelesaikannya.
Dan Bechard 6-15
@ruslan: apa artinya ketika git diff HEAD...origin/mastertidak mengembalikan apa-apa jika saya telah mengkloning direktori jarak jauh saya berwenang untuk melakukan perubahan?
Mona Jalal
Terjadi kesalahan ketika saya kloning menggunakan Windows GUI maka saya bertanya-tanya apakah klon melalui sepenuhnya. Saya melihat folder ada di sini di direktori saya tetapi saya ingin memastikan itu sama dengan remote. Namun dalam git shell, git diff tidak menghasilkan apa-apa. Saya bingung apakah klon saya berhasil atau tidak?
Mona Jalal
@OnaJalal itu berarti bahwa tidak ada perubahan hulu sejak Anda mengkloningnya.
Ruslan Kabalin
21

Contoh ini dapat membantu seseorang:

Catatan " origin" adalah alias saya untuk jarak jauh "Apa yang ada di Github"
Catatan " mybranch" adalah alias saya untuk cabang saya "apa lokal" yang saya
selaraskan dengan github - nama cabang Anda adalah 'master' jika Anda tidak membuat satu. Namun, saya menggunakan nama yang berbeda mybranchuntuk menunjukkan di mana parameter nama cabang digunakan.


Apa sebenarnya repo jarak jauh saya di github?

$ git remote -v
origin  https://github.com/flipmcf/Playground.git (fetch)
origin  https://github.com/flipmcf/Playground.git (push)

Tambahkan "repositori github lain dari kode yang sama" - kami menyebutnya garpu:

$ git remote add someOtherRepo https://github.com/otherUser/Playground.git

$git remote -v
origin  https://github.com/flipmcf/Playground.git (fetch)
origin  https://github.com/flipmcf/Playground.git (push)
someOtherRepo https://github.com/otherUser/Playground.git (push)
someOtherRepo https://github.com/otherUser/Playground.git (fetch)

pastikan repo lokal kami mutakhir:

$ git fetch

Ubah beberapa barang secara lokal. katakanlah file ./foo/bar.py

$ git status
# On branch mybranch
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   foo/bar.py

Tinjau perubahan yang tidak dikomit saya

$ git diff mybranch
diff --git a/playground/foo/bar.py b/playground/foo/bar.py
index b4fb1be..516323b 100655
--- a/playground/foo/bar.py
+++ b/playground/foo/bar.py
@@ -1,27 +1,29 @@
- This line is wrong
+ This line is fixed now - yea!
+ And I added this line too.

Berkomitmen secara lokal.

$ git commit foo/bar.py -m"I changed stuff"
[myfork 9f31ff7] I changed stuff
1 files changed, 2 insertions(+), 1 deletions(-)

Sekarang, saya berbeda dari remote saya (di github)

$ git status
# On branch mybranch
# Your branch is ahead of 'origin/mybranch' by 1 commit.
#
nothing to commit (working directory clean)

Bedak dengan remote - fork Anda: (ini sering dilakukan dengan git diff master origin)

$ git diff mybranch origin
diff --git a/playground/foo/bar.py b/playground/foo/bar.py
index 516323b..b4fb1be 100655
--- a/playground/foo/bar.py
+++ b/playground/foo/bar.py
@@ -1,27 +1,29 @@
- This line is wrong
+ This line is fixed now - yea!
+ And I added this line too.

(git push untuk menerapkan ini ke remote)

Apa perbedaan cabang jarak jauh saya dengan cabang master jarak jauh?

$ git diff origin/mybranch origin/master

Apa perbedaan barang lokal saya dengan cabang master jarak jauh?

$ git diff origin/master

Bagaimana barang saya berbeda dari garpu orang lain, cabang utama dari repo yang sama?

$git diff mybranch someOtherRepo/master
FlipMcF
sumber
5
Sebelum kita melakukan 'git diff', saya pikir perlu melakukan 'git fetch' untuk memastikan salinan remote kita yang terbaru sudah mutakhir.
Don
1
Saya telah membaca mungkin 20 postingan tentang cara membandingkan remote dan lokal. Saya baru saja memikirkannya sendiri: git fetch DIBUTUHKAN lebih dulu. git benar-benar kode perakitan RCS. yesus. Terima kasih sudah mengkonfirmasi, Don!
Terence Parr
baru ditambahkan git fetchke jawaban ini.
FlipMcF
1
Hummm ... Saya tidak suka bagaimana saya menggunakan 'myfork' sebagai nama cabang saya. Itu bisa membingungkan seseorang (Seperti saya, yang baru saja kembali untuk jawaban ini)
FlipMcF
Diedit - kejelasan dan menjawab pertanyaan 'perbedaan fork' # 3
FlipMcF