git: pembaruan ditolak karena remote berisi pekerjaan yang tidak Anda miliki secara lokal

114

Saya bekerja dalam sebuah tim dengan beberapa pengembang yang menggunakan git di BitBucket. Kami semua sedang mengerjakan satu devcabang, tidak mendorong mastersampai rilis.

Salah satu pengembang melakukan kesalahan kode yang menimpa kode saya sendiri secara tidak sengaja, dan sekarang saya mencoba untuk memasukkan kode yang benar kembali ke repo. Saya telah membaca kesalahan ini selama beberapa hari sekarang, saya tidak dapat mendorong ke repo lagi karena saya mendapatkan kesalahan berikut:

 ! [rejected]        master -> dev (fetch first)
error: failed to push some refs to 'https://[email protected]/repo_user/repo_name.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

Saya mengikuti instruksi dan pull, tapi kemudian saya menerima konflik gabungan. Setelah memasukkan pesan untuk konflik penggabungan, kode lokal saya sekarang adalah kode yang salah yang diunggah oleh pengembang lain secara tidak sengaja (seperti yang diharapkan dari pull). Jadi saya mengganti kode yang salah dengan cadangan yang saya salin sebelum melakukan, dan ketika saya mencoba mendorong lagi, saya mendapatkan kesalahan yang sama.

Sungguh membuat frustrasi, saya benar-benar ingin membantu tim saya dan berkontribusi, tetapi saya tidak bisa karena kesalahan ini. Adakah yang tahu bagaimana mengatasi masalah ini? Saya akan sangat menghargai bantuan apapun.

Ini adalah perintah yang saya jalankan untuk melakukan, jika itu membantu siapa pun:

git pull remotename master:dev
git add --all
git commit -m "some message"
git pull remotename master:dev
git push remotename master:dev

Saya akan berpikir bahwa jika saya menjaga pesanan ini, saya tidak akan menerima konflik penggabungan. Saya kira saya salah. Terima kasih lagi

Pembaruan: Saya harus menambahkan bahwa saya telah mencari beberapa jam di Google dan stackoverflow, dan mengikuti instruksi yang berbeda, tetapi saya masih tidak bisa pushke devcabang.

delos
sumber

Jawaban:

42

git pull <remote> master:devakan mengambil remote/mastercabang dan menggabungkannya kelocal/dev cabang .

git pull <remote> dev akan mengambil remote/dev cabang, dan menggabungkannya ke cabang Anda saat ini.

Saya pikir Anda mengatakan komit yang bertentangan sedang aktif remote/dev , jadi itu adalah cabang yang mungkin ingin Anda ambil dan gabungkan.

Dalam kasus tersebut, Anda sebenarnya tidak menggabungkan konflik ke dalam cabang lokal Anda, yang agak aneh karena Anda mengatakan Anda melihat kode yang salah dalam copy pekerjaan Anda. Anda mungkin ingin memeriksa apa yang sedang terjadi remote/master.

Jeff
sumber
1
Wow ... Saya tidak pernah tahu itu. Tapi sekarang sangat masuk akal. Cabang master juga salah, jadi jawaban Anda menjawab seluruh pertanyaan saya. Saya masih agak baru mengenal git. Terima kasih banyak telah memberi tahu saya perbedaan antara keduanya!
delos
6
Pilihan terbaik bagi saya adalah git pull --rebase.
derekmx271
154

Gunakan perintah ini di terminal

git push -f origin master

Donal
sumber
49
Menggunakan bendera force push (-f) sangat berbahaya dan tidak boleh menjadi bagian dari alur kerja rutin Anda
Spaideri
5
Tidak dipilih karena saya melewatkan beberapa peringatan dalam jawaban ini.
Melebius
2
Ooh! Ini memaksa repositori untuk menulis ulang sendiri.
Azarsa
3
Saya memiliki kesalahan yang sama dengan github dan saya memperbaikinya dengan perintah ini, @theeastcoastwest mengapa Anda mengatakan ini berbahaya? apa alasanmu "
simon
3
@simon ini berbahaya karena mengabaikan pekerjaan yang ada di jarak jauh dan memaksa perubahan Anda ke repo. Jadi, jika Anda tidak ingin mengacaukan kerja tim Anda, JANGAN memaksa.
Gásten
42

Itu terjadi ketika kita mencoba untuk mendorong ke repositori jarak jauh tetapi telah membuat file baru di jarak jauh yang belum ditarik, katakanlah Readme. Dalam kasus seperti kesalahan mengatakan

git menolak pembaruan

karena kami belum memperbarui jarak jauh di lingkungan lokal kami. Jadi Ambil tarik dulu dari jarak jauh

git pull

Ini akan memperbarui repositori lokal Anda dan menambahkan Readmefile baru . Kemudian Dorong perubahan yang diperbarui ke jarak jauh

git push origin master
Himanshu
sumber
Saya melakukan git pull origin developke cabang pengembangan lokal saya, tetapi sekarang, hanya melakukannya git pullbekerja dengan baik bagi saya, saya tidak tahu mengapa.
Alex
karena secara default jika cabang lokal Anda disinkronkan dengan cabang jarak jauh dan Anda diperiksa di cabang itu, Anda tidak perlu menentukan cabang saja git pullsudah cukup
Himanshu
11

Ini biasanya terjadi ketika repo berisi beberapa item yang tidak ada secara lokal. Jadi untuk mendorong perubahan kita, dalam hal ini kita perlu mengintegrasikan perubahan jarak jauh dan kemudian mendorong.

Jadi buat tarikan dari jarak jauh

git pull origin master

Kemudian dorong perubahan ke remote itu

git push origin master
Sravya
sumber
10

Paksa untuk mendorong

git push -f origin master

Samir Poudel
sumber
2
Ini mungkin harus disertai dengan peringatan.
Chris
7

Saya memperbaikinya, saya tidak yakin apa yang saya lakukan. Saya mencoba hanya mendorong dan menarik menggunakan:

git pull <remote> dev dari pada git pull <remote> master:dev

Semoga ini membantu seseorang jika mereka mengalami masalah yang sama.

delos
sumber
6

Anda perlu memasukkan:

$ git pull
$ git fetch 
$ git merge

Jika Anda menggunakan git push origin master --force, Anda akan mendapatkan masalah besar.

gaoyehua
sumber
5
Mengapa Anda perlu menggunakan git fetchdan git mergelagi secara manual setelah menjalankan git pullyang berisi mereka ?
Melebius
6

Anda bisa mencoba ini: git pull origin master --rebase

Eduardo Ramos
sumber
2
Hai Eduardo! Ini berhasil untuk saya. Tapi bisakah Anda menjelaskan mengapa itu berhasil? Apa tepatnya yang dilakukan perintah ini?
Akshaya Natarajan
4

Sebenarnya github jauh lebih sederhana dari yang kita pikirkan dan ini benar-benar terjadi setiap kali kita mencoba untuk mendorong bahkan setelah kita secara eksplisit memasukkan beberapa file ke dalam repositori git kita jadi, untuk memperbaiki masalah ini cukup coba ..

: git pull

lalu..

: git push

Catatan: jika Anda secara tidak sengaja terjebak di editor vim setelah menarik repositori Anda daripada jangan khawatir, tutup saja editor vim dan coba push :)

d337
sumber
4

Saya telah melakukan langkah-langkah di bawah ini. akhirnya itu bekerja dengan baik.

Langkah

1) git init

2) status git (untuk memeriksa status)

3) git add. (tambahkan semua file perubahan (.))

4) git commit -m "<pass your comment>"

5) git remote add origin "<pass your project clone url>"

6) git pull --allow-unrelated-histories "<pass your project clone url>"master

7) git push -u "<pass your project clone url>"master

Prabhat
sumber
2

Saya mengalami kesalahan ini dan itu karena ada pembaruan di server tetapi SourceTree tidak menunjukkan pembaruan apa pun yang tersedia (mungkin karena saya sedang offline saat terakhir diperiksa). Jadi saya melakukan penyegaran di pohon sumber dan sekarang ini menunjukkan 2 item untuk didorong, bukan 1 item.

Jadi pastikan untuk menekan segarkan atau tarik jika Anda mendapatkan kesalahan ini dan kemudian coba lagi.

1,21 gigawatt
sumber
1

git pull --rebase origin master

git push origin master


git push -f origin master

Peringatan git push -f origin master

  • memaksa secara paksa pada repositori yang ada dan juga menghapus repositori sebelumnya jadi jika Anda tidak membutuhkan versi sebelumnya dari ini mungkin bisa membantu
Bhavesh Chand
sumber
1

Kesalahan mungkin terjadi karena perbedaan struktur kode yang Anda lakukan dan yang ada di GitHub. Anda dapat merujuk ke: Cara menangani kesalahan " menolak untuk menggabungkan riwayat yang tidak terkait ":

$ git pull --allow-unrelated-histories
$ git push -f origin master
Kourosh Neyestani
sumber
1

Pilihan terbaik untuk saya dan bekerja dan sederhana

git pull --rebase

kemudian

git push

semoga berhasil

Omar Abusabha
sumber
1

Beginilah cara saya memecahkan masalah ini:

  1. git pull origin master
  2. git push origin master

Ini biasanya terjadi ketika cabang jarak jauh Anda tidak diperbarui. Dan setelah ini jika Anda mendapatkan kesalahan seperti "Silakan masukkan pesan komit" Lihat ini (Bagi saya jawaban xiaohu Wang berfungsi :))

SalomiEdward
sumber
0

Saya memiliki proyek SSDT VS terlebih dahulu. Saya ingin mendorong proyek seperti yang saya miliki ke Github. Saya ingin dorongan itu menjadi versi awal repo saya yang memulai cabang master. Saran Donal tentang git push -f origin master adalah cara termudah (yang saya lihat) untuk mencapai ini. Karena saya tidak perlu khawatir untuk menulis ulang apa pun, sepertinya masuk akal.

cromastro
sumber
0

Saya memiliki masalah yang sama. Kebetulan saya telah membuat file .Readme di repositori tanpa menariknya terlebih dahulu.

Anda mungkin ingin menghapus file .Readme atau menariknya sebelum mendorong.

Martin Oputa
sumber
Saya tidak yakin jawaban atas pertanyaan lama 5 tahun ini memberikan nilai tambahan, plus Tidak memberikan solusi untuk masalah spesifik OP. Karena Anda adalah kontributor baru, harap lihat panduan tentang cara menjawab pertanyaan: stackoverflow.com/help/how-to-answer
Sotiris Koukios-Panopoulos
0

kamu bisa memakai

git pull --rebase <your_reponame> <your_branch>

ini akan membantu jika Anda memiliki beberapa perubahan yang belum terdaftar di repo lokal Anda. terutamaREADME.md

braspy
sumber