Ketika Anda berjalan git pull
di master
cabang, itu biasanya menarik dari origin/master
. Saya berada di cabang berbeda yang dipanggil newbranch
, tetapi saya perlu menjalankan perintah yang melakukan git pull
dari origin/master
ke master
tetapi saya tidak dapat menjalankan git checkout
untuk mengubah cabang yang dipilih sampai setelah penarikan selesai. Apakah ada cara untuk melakukan ini?
Sebagai latar belakang, repositori menyimpan sebuah situs web. Saya telah membuat beberapa perubahan newbranch
dan menerapkannya dengan mengalihkan situs web ke newbranch
. Sekarang perubahan tersebut telah digabungkan ke dalam master
cabang, saya mencoba untuk mengalihkan situs web kembali ke master
cabang juga. Pada titik ini, newbranch
dan origin/master
identik, tetapi master
tertinggal origin/master
dan perlu diperbarui. Masalahnya, jika saya melakukannya dengan cara tradisional:
$ git checkout master
# Uh oh, production website has now reverted back to old version in master
$ git pull
# Website is now up to date again
Saya perlu mencapai hal yang sama seperti di atas ( git checkout master && git pull
), tetapi tanpa mengubah direktori kerja ke revisi sebelumnya selama proses tersebut.
sumber
newbranch
dan tidak ada apa-apa di sana untuk disimpan!git fetch; git merge origin/master
dari dalamnewbranch
. Tidak ada manfaatnya menggandakan seluruh salinan kedua dari repositori.Jawaban:
Anda memiliki pohon kerja yang tidak ingin Anda sentuh, jadi gunakan yang lain. Clone itu murah, dibuat untuk ini.
Masalah dengan semua jawaban lain di sini adalah, mereka tidak benar-benar melakukan tarikan. Jika Anda membutuhkan merge atau rebase yang telah Anda siapkan pull, Anda memerlukan worktree lain dan prosedur di atas. Kalau tidak, hanya
git fetch; git checkout -B master origin/master
akan dilakukan.sumber
git checkout master
Anda akan memeriksamaster
cabang lama karena Anda belum melakukangit pull
dimain
folder untuk menyinkronkannya dengan origin / master. Inilah yang saya coba hindari.master
kembali keorigin
, tetapi saya tidak percaya pembayaran akhir Anda adalah dari pembaruan inimaster
. Tidak adagit pull
pembaruanmaster
cabang dimain
direktori, jadi kecuali saya kehilangan sesuatu, perintah Anda tidak berbeda dengan hanya berjalangit checkout master
sendiri dan mendapatkanmaster
pohon lama . Jika Anda melihat lebih dekat, Anda tidak menjalankan perintah apa pun dimain
direktori yang berkomunikasi ke upstream (selain baris 1, yang dijalankan sebelum Anda membuat perubahan apa pun ke repo upstream.)Langsung: Memperbarui dari cabang jarak jauh menjadi master cabang yang saat ini tidak diperiksa :
di mana asal adalah remote Anda dan Anda saat ini diperiksa di beberapa cabang misalnya dev .
Jika Anda ingin memperbarui cabang Anda saat ini selain cabang yang ditentukan sekaligus:
sumber
Ini dijawab di sini: Gabungkan, perbarui, dan tarik cabang Git tanpa menggunakan pembayaran
sumber
git fetch origin master:master
.git fetch
dengan sendirinya akan menganggap Anda bermaksud memperbarui cabang saat ini dan bukan cabang lain.Ternyata, jawabannya sederhana saja:
Hal ini memungkinkan Anda untuk memperbarui
master
cabang tanpa beralih untuk itu sampai setelah itu telah diperbarui.sumber
Anda khawatir tentang sesuatu yang tidak dapat diperbaiki, karena operasi Git tidak bersifat atomik. Anda akan selalu memiliki lubang di mana direktori kerja Anda berada di tengah jalan antar cabang, bahkan jika Anda memperbarui master tanpa terlebih dahulu beralih ke sana. Inilah mengapa Git bukanlah alat penerapan .
Karena Anda tidak benar-benar memasukkan kode di lingkungan produksi Anda (saya harap), Anda tidak perlu memeriksa cabang. Anda cukup melakukan a
git fetch
untuk memperbarui referensi jarak jauh Anda, dan kemudiangit checkout origin/master
memindahkan direktori kerja langsung ke komit yang saat ini ditunjukkan olehorigin/master
. Ini akan menempatkan Anda dalam status kepala terpisah, tetapi sekali lagi, karena Anda tidak melakukan kode, ini tidak masalah.Ini adalah lubang terkecil yang akan Anda dapatkan, tetapi seperti yang saya katakan, lubang masih ada;
checkout
tidak atom.sumber
origin/master
, itu mungkin hanya melakukan trik.git fetch
sebelum Anda melakukan hal lain dan singkirkan transfer data yang sebenarnya.Anda dapat menggunakan update-ref untuk ini:
Perhatikan bahwa ini akan membuang semua komit lokal di cabang master. Dalam kasus Anda tidak akan ada jadi ini tidak apa-apa. Bagi orang lain yang mencoba melakukan ini di mana ada komit lokal, menurut saya tidak mungkin, karena penggabungan hanya dapat dijalankan di cabang saat ini.
sumber
git branch --force master origin/master
? Ini memaksa kepala lokalmaster
untuk menunjuk ke kepalaorigin
smaster
Solusi Malvineous berhasil untuk saya
Hanya di beri kesalahan
Jadi saya menjalankan dengan opsi -D
Terima kasih
sumber
git fetch origin master:master
master
.master
yang belum didorong,origin/master
digabungkan ke master Anda.sumber