Saya memiliki repositori telanjang TENGAH yang memiliki tiga repositori pengembang menarik dan mendorongnya secara normal.
Saya juga memiliki dua repositori lain yang menarik dari repo telanjang TENGAH: satu adalah server hidup, dan yang lainnya adalah server tes / tahap — masing-masing menarik dari cabang masing-masing.
Skenarionya adalah ini: Saya memiliki post-update
skrip kait pada repo TENGAH yang secara otomatis mengakses tes dan repo langsung dan menjalankan perintah tarik pada masing-masing. Ini memperbarui server uji dan langsung, semua tergantung pada cabang apa yang memiliki komitmen baru. Ini semua bekerja dengan baik.
Masalahnya adalah ini: mungkin ada saat-saat dalam keadaan darurat bahwa file dapat langsung diperbarui di server (melalui ftp atau apa pun) dan skrip post-update TENGAH kemudian akan gagal karena konflik gabungan / timpa akan terjadi. Tidak ada cara untuk menghindari skenario ini, dan itu tidak bisa dihindari.
Yang saya inginkan terjadi adalah ini: Saya ingin tarikan dari situs langsung dan pengujian selalu menimpa / menggabungkan tarikan. Selalu. Repo-repo ini hanya akan menarik karena tidak untuk pengembangan.
Dalam semua penelitian saya, saya tidak dapat menemukan solusi yang baik untuk memiliki daya tarik selalu memaksa menimpa file lokal. Apakah ini mungkin? Itu akan membuat skenario pengembangan yang bagus jika demikian.
Jawaban:
Sebenarnya cara ideal untuk melakukan ini adalah tidak menggunakan
pull
sama sekali, tetapi sebaliknyafetch
danreset
:(Mengubah
master
cabang apa pun yang ingin Anda ikuti.)pull
dirancang untuk menggabungkan perubahan bersama dalam beberapa cara, sedangkanreset
dirancang sekitar hanya membuat salinan lokal Anda cocok dengan komit tertentu.Anda mungkin ingin mempertimbangkan opsi yang sedikit berbeda
clean
tergantung pada kebutuhan sistem Anda.sumber
reset --hard
adalah perintah yang digunakan untuk memaksa keadaan direktori kerja (dan cabang saat ini) ke keadaan yang cocok dengan komit tertentu.FETCH_HEAD
adalah referensi yang secara otomatis dibuat olehfetch
untuk mewakili referensi yang diambil. Itu tidak digabung, hanya langsung ditimpa setiap kali Anda mengambil.clean
adalah perintah yang menghapus file yang tidak dilacakgit
,-df
flag memerintahkannya untuk menghapus direktori (-d
) dan benar-benar melakukan penghapusan (-f
).git clean -dn
sebelum menggunakangit clean -df
sehingga Anda akan melihat file / folder apa yang akan dihapus.git clean -df
hanya dapat dibalik jika Anda memiliki cadangangit clean -df
akan menghapus file gitignored juga, tetapi ternyata tidak.git clean --help
mengatakan "Biasanya, hanya file yang tidak dikenal ke Git yang dihapus, tetapi jika opsi -x ditentukan, file yang diabaikan juga dihapus. Ini dapat, misalnya, berguna untuk menghapus semua produk build."Anda bisa mencoba ini:
(dari Bagaimana cara memaksa "git pull" untuk menimpa file lokal? )
Gagasan lain adalah menghapus seluruh git dan membuat klon baru.
sumber
Saya tidak yakin bagaimana melakukannya dalam satu perintah tetapi Anda dapat melakukan sesuatu seperti:
atau bahkan
sumber
git reset --hard && git pull
. Atau, tetapi tidak lebih baikgit reset --hard; git pull
,. Menggunakan&&
hanya akan menjalankan perintah kedua jika perintah pertama berhasil.;
akan menjalankannya terlepas dari kode keluar dari perintah pertama.Untuk menarik salinan cabang dan memaksa menimpa file lokal dari asal gunakan:
Semua pekerjaan saat ini akan hilang dan kemudian akan sama dengan cabang asal
sumber
sumber
Anda dapat mengubah pengait untuk membersihkan semuanya.
sumber
git clean
sudah "Hapus file yang tidak terlacak dari pohon yang berfungsi" (bagian atas halaman). Biasanya, ini tidak termasuk file yang diabaikan, tetapi-x
memberitahugit clean
untuk memasukkan file yang diabaikan juga (kecuali ini tidak mempengaruhi file yang diabaikan oleh-e
opsi).Jika Anda belum melakukan perubahan lokal sejak penarikan / klon terakhir, Anda dapat menggunakan:
checkout
akan menghapus perubahan lokal Anda dengan komit lokal terakhir, danpull
akan mengautronkannya ke repositori jarak jauhsumber