Ya, dan tidak ...
Saya mengerti bahwa Anda ingin salinan lokal Anda untuk "menimpa" apa yang ada di remote, tapi, oh, man, jika seseorang telah memodifikasi file di repo jarak jauh dengan cara yang berbeda , dan Anda mengabaikan perubahan mereka dan mencoba untuk "memaksa" perubahan Anda sendiri tanpa melihat kemungkinan konflik, yah, saya menangis untuk Anda (dan rekan kerja Anda) ;-)
Namun demikian, sangat mudah untuk melakukan "hal yang benar ..."
Langkah 1:
git stash
di repo lokal Anda. Itu akan menyimpan pembaruan lokal Anda ke dalam simpanan, kemudian mengembalikan file Anda yang dimodifikasi kembali ke status pra-edit.
Langkah 2:
git pull
untuk mendapatkan versi yang dimodifikasi. Sekarang, mudah-mudahan, itu tidak akan mendapatkan versi baru dari file yang Anda khawatirkan. Jika tidak, maka langkah selanjutnya akan bekerja dengan lancar. Jika tidak , maka Anda punya beberapa pekerjaan yang harus dilakukan, dan Anda akan senang Anda lakukan.
Langkah 3:
git stash pop
Itu akan menggabungkan versi modifikasi yang Anda simpan di Langkah 1 dengan versi yang baru saja Anda tarik di Langkah 2. Jika semuanya berjalan lancar, Anda akan siap!
Sebaliknya, jika ada konflik nyata antara apa yang Anda tarik di Langkah 2 dan modifikasi Anda (karena ada orang lain yang mengedit untuk sementara), Anda akan mengetahuinya dan diberitahu untuk menyelesaikannya. Lakukan.
Segala sesuatunya akan berjalan jauh lebih baik dengan cara ini - ini mungkin akan menyimpan perubahan Anda tanpa ada upaya nyata di pihak Anda, sambil mengingatkan Anda tentang masalah serius dan serius.
git commit
perubahan lokal sebelumnyagit pull
?Anda dapat menyimpan perubahan lokal Anda terlebih dahulu, lalu menarik, lalu meletuskan simpanan.
Apa pun yang menimpa perubahan dari jarak jauh akan mengalami konflik yang harus Anda selesaikan secara manual.
sumber
Jadi Anda telah berkomitmen terhadap perubahan lokal Anda ke repositori lokal Anda. Kemudian untuk mendapatkan perubahan jarak jauh ke repositori lokal Anda tanpa membuat perubahan pada file lokal Anda, Anda dapat menggunakan
git fetch
. Sebenarnyagit pull
adalah operasi dua langkah: non-destruktifgit fetch
diikuti oleh agit merge
. Lihat Apa perbedaan antara 'git pull' dan 'git fetch'? untuk diskusi lebih lanjut.Contoh rinci:
Misalkan repositori Anda seperti ini (Anda telah membuat perubahan
test2
:Dan
origin
repositori seperti ini (orang lain telah berkomitmentest1
):Pada titik ini, git akan mengeluh dan meminta Anda untuk menariknya terlebih dahulu jika Anda mencoba mendorong
test2
ke repositori jarak jauh. Jika Anda ingin melihat apa itu test1 tanpa mengubah repositori lokal Anda, jalankan ini:Repositori lokal hasil Anda akan seperti ini:
Sekarang Anda memiliki perubahan jarak jauh di cabang lain, dan Anda tetap menyimpan file lokal Anda.
Lalu apa selanjutnya? Anda dapat melakukan
git merge
, yang akan memiliki efek yang sama sepertigit pull
(jika digabungkan dengan sebelumnyagit fetch
), atau, seperti yang saya inginkan, lakukan agit rebase origin/master
untuk menerapkan perubahan Anda di atasorigin/master
, yang memberi Anda riwayat yang lebih bersih.sumber