Cabang master jarak jauh kami entah bagaimana menjadi kacau balau. Kode pengembangan saat ini ada di cabang master bersama dengan komit terbaru. Jelasnya, kode pengembangan belum siap untuk cabang master.
Jadi di repositori lokal saya, saya melakukan reset ke tag terbaru git reset --hard (Tag)
,. Cabang master sekarang sudah benar di repositori lokal saya. Sekarang ketika saya mencoba untuk mendorong perubahan ke repositori jarak jauh git push origin master
,, saya mendapatkan kesalahan:
To (REMOTE GIT REPOSITORY LOCATION)
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to '(REMOTE GIT REPOSITORY LOCATION)'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again. See the
'Note about fast-forwards' section of 'git push --help' for details.
Jadi setelah melihat-lihat saya menemukan --force
opsi. Jadi saya melakukan push paksa ke repositori jarak jauh git push --force origin master
, dan saya masih mendapat kesalahan:
Total 0 (delta 0), reused 0 (delta 0)
remote: error: denying non-fast-forward refs/heads/master (you should pull first)
To (REMOTE GIT REPOSITORY LOCATION)
! [remote rejected] master -> master (non-fast-forward)
error: failed to push some refs to '(REMOTE GIT REPOSITORY LOCATION)'
Saya tidak bisa melakukan pull on master, karena mengandung kode pengembangan yang tidak bisa di master.
denyNonFastforwards = true
,. Saya mengubahnya menjadi salah, mendorong perubahan saya dan kemudian mengubahnya kembali menjadi benar. Sekali lagi terima kasih semuanya, atas bantuannya.Jawaban:
Pesan tersebut berarti Anda tidak diizinkan untuk melakukan push non-fast-forward.
Repositori jarak jauh Anda kemungkinan besar ada
denyNonFastforwards = true
di konfigurasinya. Jika Anda mengubahnya,git push --force
seharusnya berhasil.Untuk mengubah setelan, Anda memerlukan akses ke mesin dengan repositori jarak jauh. Dari sana, lakukan
git config receive.denynonfastforwards false
.sumber
git config
untuk server? Atau mungkin Anda menggunakan itu secara metaforis. Untuk bermain dengan ide-ide ini saya membuat repo percobaan di/opt/git
(ruang server git saya) dan kemudian saya mengubah pengaturan ini di/opt/git/the_repo/the_repo.git/config
. Tapi setelah selesaigit push --force origin SHA:branch
bekerja sesuai kebutuhan.Remote tidak memungkinkan non-fast-forward.
Pilihan terbaik Anda adalah melakukan
git revert
semua komitmen yang seharusnya tidak ada dan lebih berhati-hati di masa mendatang.git revert [commit]
akan membuat komit baru yang membatalkan apa pun yang[commit]
dilakukan.sumber
Langkah-langkah untuk secara permanen mengaktifkan dorongan paksa dengan gaya berikut
Edit file bernama "config" di folder yang diakhiri dengan ".git" di repositori jarak jauh Anda
Dalam keluaran baris perintah git dari dorongan yang gagal, cari baris yang mengatakan sesuatu seperti:
kemudian
Setel "denyNonFastforwards" ke false
Dalam "config", setel
Sekarang Anda dapat melakukan push dari mesin lokal Anda dengan -f
sumber
git revert
agak rumit jika Anda memiliki penggabungan. Untuk lebih rumitnya kasus saya memiliki 3 penggabungan, yang satu dengan yang sangat tua ~ 20 komit menyimpang dari pengembangan, kedua adalah jenis gabungan dari master - jelek sekali.Coba gunakan
-f
bendera dan letakkan setelah nama cabang jarak jauh.git push origin master -f
sumber
git push -f origin master
dan hasil yang sama. Kedua kali saya mencobanya, saya mendapat versi kedua dari pesan kesalahan.Anda tidak diizinkan melakukan git push yang tidak dipercepat.
Jika remote-nya adalah GitHub, buka
https://github.com/$USER/$REPO/settings/branches
dan batalkan perlindungan cabang yang dimaksud.Anda harus menjadi admin repo untuk melakukan itu.
Jika remote adalah server git Anda sendiri, jalankan di
git config receive.denynonfastforwards false
sana.sumber
Cara terbaik untuk mengatasinya adalah dengan menghapus cabang jarak jauh dan mengirimkannya kembali:
sumber
Masalahnya terjadi karena cabang saat ini tidak dikonfigurasi dengan benar untuk PULL . Pertama, periksa apakah cabang upstream dikonfigurasi dengan benar untuk penarikan menggunakan -
git remote show origin
. Anda dapat menemukannya di bawah bagian - cabang lokal dikonfigurasi untuk 'git pull': . Jika tidak, konfigurasikan menggunakan:Berikan nama cabang yang sesuai untuk placeholder - MYBRANCH
sumber
Saya menggunakan grup perintah ini untuk mengatur ulang repo jarak jauh saya, ini akan menginisialisasi ulang repo lokal Anda dan menautkan ulang dengan repo jarak jauh Anda kemudian memaksa mendorong pembaruan.
Saya pikir cara ini tidak akan berhasil dalam kasus Anda, tetapi mungkin berguna untuk orang lain
buka folder sumber lalu jalankan perintah: perhatikan bahwa
https://github.com/*.git
link repo jarak jauh Anda**Note: this will clear all your git history on your master branch**
sumber
Bagi saya, petunjuk @svick menunjuk ke arah yang benar. Karena server git yang ingin saya modifikasi sebenarnya adalah kotak saya, saya masuk ke dalamnya dan melakukan
git config --global receive.denynonfastforwards false
untuk mengubah semua repo untuk menerima dorongan non-ff paksa. Tidak berhasil di luar kotak. Apa yang saya temukan adalah bahwa dalam konfigurasi itu sudah adareceive.denynonfastforwards=true
, dan itu tidak dapat dihapus dengangit config --global --unset receive.denynonfastforwards
. Melakukan edit di repo secara manual (vi config
) berhasil.sumber
Saya menyelesaikannya dengan menghapus cabang master dari protected dan juga default yang lebih dari aturan cabang yang dilindungi dalam pengaturan repositori.
sumber