Git push gagal, "Pembaruan non-fast forward ditolak"

99

Saya telah mengedit repositori GIT saya melalui Git Online. Setelah saya mencoba mendorong perubahan kode lokal saya, saya mendapat kesalahan:

Git push failed, To prevent from losing history, non-fast forward updates were rejected.

Bagaimana cara memperbaikinya?

Sarath
sumber

Jawaban:

137

Tarik perubahan terlebih dahulu:

git pull origin branch_name
iafonov
sumber
1
Jika itu tidak menyelesaikan masalah Anda, pastikan bahwa Anda mendorong ke cabang yang sama dengan yang sedang Anda kerjakan. Periksa di cabang mana Anda berada dengan "status git".
afilina
1
Perintah ini berhasil bagi saya, namun saya ingin tahu, mengapa ini tidak git pull:? Remote sama dengan origin, sehingga benar-benar berjalan: git pull origin. Bukankah seharusnya itu memperbarui semua cabang?
Karlen Kishmiryan
83

Tambahkan --force ke baris perintah Anda jika Anda yakin ingin mendorong. Misalnya gunakan git push origin --force(Saya merekomendasikan baris perintah karena Anda akan menemukan lebih banyak dukungan dari pengguna lain dengan baris perintah. Juga ini mungkin tidak dapat dilakukan dengan SmartGit.) Lihat situs ini untuk informasi lebih lanjut: http://help.github.com/ remote /

Matt
sumber
8
- force akan menyelesaikan masalah Anda tetapi berpotensi membahayakan orang lain. Ini harus digunakan hanya dengan banyak perhatian (dan pengetahuan)
schoetbi
7
-1 karena memaksa mendorong secara umum adalah ide yang buruk.
joshin4colours
6
+1 karena 5 orang setuju dengan @ joshin4colours untuk memberi -1. Tetapi meskipun dorongan paksa tidak selalu merupakan ide terbaik (yang dijelaskan oleh git dengan menolak dorongan Anda), jika itu 100% merupakan ide yang buruk, opsi tersebut tidak akan ada. Saran Matt disini tentu bisa bermanfaat bagi orang lain.
pengguna1271772
2
Jangan ragu untuk menggunakan --forcejika Anda adalah satu-satunya yang menggunakan cabang itu. Itu memang menyebabkan masalah saat berbagi cabang dengan pengembang lain.
Robert Brisita
22

Sebelum mendorong, lakukan git pull dengan opsi rebase. Ini akan mendapatkan perubahan yang Anda buat secara online (dalam asal Anda) dan menerapkannya secara lokal, lalu menambahkan perubahan lokal Anda di atasnya.

git pull --rebase

Sekarang, Anda dapat mendorong ke jarak jauh

git push 

Untuk informasi lebih lanjut, lihat penjelasan Git rebase dan Bab 3.6 Git Branching - Rebasing .

satishgoda
sumber
2
Dalam kasus saya git pull --rebaseberakhir denganThere is no tracking information for the current branch. Please specify which branch you want to rebase against.
trejder
17

Saya mengalami kesalahan yang sama, cukup tambahkan "--force" ke perintah, itu berhasil

git push origin master --force
Wen Qi
sumber
6
apakah ada konsekuensi untuk ini?
jayunit100
8
kehilangan komitmen orang lain.
Giovanni Toraldo
1
Saya mengalami situasi aneh di mana ini persis seperti yang ingin saya lakukan ... meniup isi dari cabang master jarak jauh yang baru saja dibuat dengan sesuatu yang baru. Ini memecahkan masalah saya. Meskipun ini bukan solusi untuk semua orang, --forcedapat membantu.
Brad
1
Saya rasa jawaban ini tidak pantas untuk diturunkan voting sebanyak 6 kali. Ini adalah solusi yang valid untuk masalah yang diberikan, namun, penulis bisa saja sedikit lebih deskriptif mengenai keadaan di mana perintah ini akan berguna. Jika perlu disebutkan karena layak untuk ditulis (fungsi untuk --force)
Aiden Strydom
5

Saya punya masalah yang sama.
Alasannya adalah, bahwa cabang lokal saya entah bagaimana kehilangan pelacakan ke cabang jarak jauh.

Setelah

git branch branch_name --set-upstream-to=origin/branch_name
git pull

dan menyelesaikan konflik penggabungan, saya bisa mendorong.

hardmooth
sumber
Sepertinya Anda melewatkan perubahan di cabang jarak jauh
ozma
5

Anda dapat menambahkan --force-with-lease ke perintah, itu akan berhasil.

git push --force-with-lease

--force bersifat merusak karena tanpa syarat menimpa repositori jarak jauh dengan apa pun yang Anda miliki secara lokal. Tapi --force-with-lease memastikan Anda tidak menimpa pekerjaan orang lain.

Lihat info selengkapnya di sini .

igorjosesantos
sumber
1

(Satu) Solusi untuk Netbeans 7.1: Coba tarik. Ini mungkin juga akan gagal. Sekarang lihat log (biasanya sekarang ditampilkan di IDE). Ada satu baris / lebih yang berbunyi:

"Penarikan gagal karena file ini:"

Cari file itu, hapus (buat backup sebelumnya). Biasanya ini adalah file .gitignore, jadi Anda tidak akan menghapus kode. Ulangi dorongan tersebut. Semuanya harus bekerja dengan baik sekarang.

Sliq
sumber
1

Menggunakan --rebaseopsi ini berhasil untuk saya.

  • git pull <remote> <branch> --rebase

Lalu dorong ke repo.

  • git push <remote> <branch>

Misalnya

git pull origin master --rebase

git push origin master

CyberDemic
sumber
0

Saya memiliki masalah yang sama. Saya diselesaikan dengan

git checkout <name branch>
git pull origin <name branch>
git push origin <name branch>
Andrea Perdicchia
sumber
3
OP mengatakan tentang mendorong perubahan kode lokal. checkoutakan menimpa perubahan ini atau setidaknya tidak akan menyertakannya dalam push.
trejder
0

Inilah yang berhasil bagi saya. Itu bisa ditemukan di dokumentasi git sini

Jika Anda berada di cabang yang Anda inginkan, Anda dapat melakukan ini:

git fetch origin
# Fetches updates made to an online repository
git merge origin YOUR_BRANCH_NAME
# Merges updates made online with your local work
CodeChops
sumber
0

Menemukan masalah yang sama, untuk mengatasinya, jalankan gitperintah berikut .

  • git pull {url} --rebase
  • git push --set-upstream {url} master

Anda harus sudah membuat repositori di github terlebih dahulu.

blackFoxCoder
sumber
0

Terkadang, saat menarik diri dari git Anda, HEAD terlepas. Anda dapat memeriksanya dengan memasukkan perintah:

git branch 
  • (HEAD terlepas dari 8790704)

    menguasai

    mengembangkan

Lebih baik pindah ke cabang Anda dan lakukan penarikan baru dari cabang Anda masing-masing.

git checkout develop

git pull origin develop

git push origin develop
Abhinav
sumber