Egit ditolak non-fast-forward

89

Saya mendapatkan pesan ini saat mendorong ke repositori github. Bisakah Anda memberi tahu saya prosedur langkah demi langkah untuk memperbaikinya? Saya hanya mendorong sekali dan berhasil. Tapi, ketika saya memperbarui proyek dan mencoba untuk mendorong komit kedua saya, itu menunjukkan "master menolak non-percepat-maju" dan tidak mengizinkan saya untuk mendorong. Tolong jelaskan prosedurnya.

Jay
sumber
Saya mendapat masalah yang sama setelah membuat repo baru dengan "Inisialisasi repositori ini dengan README". Saya menghapus yang satu itu dan membuatnya lagi tanpa chechbox ini.
Andrew
@andrew benar
Dany Wehbe

Jawaban:

227

Saya memiliki masalah yang sama dan saya bisa memperbaikinya. afk5min benar, masalahnya adalah cabang tempat Anda menarik kode telah berubah pada repositori jarak jauh. Sesuai dengan praktik git standar ( http://git-scm.com/book/en/Git-Basics-Working-with-Remotes ), Anda perlu (sekarang) menggabungkan perubahan tersebut di repositori jarak jauh ke dalam perubahan lokal Anda sebelum Anda bisa berkomitmen. Ini masuk akal, ini memaksa Anda untuk mengambil perubahan lain dan menggabungkannya ke dalam kode Anda, memastikan bahwa kode Anda terus berfungsi dengan perubahan lain yang ada.

Pokoknya, ke tangga.

  1. Konfigurasikan 'ambil' untuk mengambil cabang yang awalnya Anda tarik.

  2. Ambil cabang jarak jauh.

  3. Gabungkan cabang jarak jauh itu ke cabang lokal Anda.

  4. Lakukan perubahan (gabung) di repo lokal Anda.

  5. Dorong perubahan ke repo jarak jauh.

Secara terperinci...

  1. Dalam gerhana, buka tampilan 'Git Repositories'.

  2. Pastikan Anda melihat repositori lokal Anda dan dapat melihat repositori jarak jauh sebagai subfolder. Dalam versi saya, ini disebut Remote, dan kemudian saya dapat melihat proyek jarak jauh di dalamnya.

  3. Cari panah hijau yang menunjuk ke kiri, ini panah 'ambil'. Klik kanan dan pilih 'Configure Fetch'.

  4. Anda harus melihat URI, pastikan bahwa itu mengarah ke repositori jarak jauh.

  5. Lihat di bagian pemetaan referensi dari pop-up. Punyaku kosong. Ini akan menunjukkan referensi jarak jauh mana yang ingin Anda ambil. Klik 'Tambahkan'.

  6. Ketik nama cabang yang perlu Anda ambil dari repositori jarak jauh. Milik saya adalah 'master' (btw, dropdown di sini akan bagus !!, untuk saat ini, Anda harus mengetiknya). Lanjutkan melalui pop-up, akhirnya mengklik 'Selesai'.

  7. Klik 'Simpan dan Ambil'. Ini akan mengambil referensi jarak jauh itu.

  8. Lihat di folder 'Cabang' dari repositori lokal Anda. Anda sekarang harus melihat cabang jarak jauh itu di folder jarak jauh. Sekali lagi, saya melihat 'master'.

  9. Klik kanan pada cabang lokal di folder 'Lokal' dari 'Cabang', yang diberi nama 'master'. Pilih 'Merge', lalu pilih cabang jarak jauh, yang diberi nama 'origin / master'.

  10. Proses melalui penggabungan.

  11. Lakukan perubahan apa pun ke repositori lokal Anda.

  12. Dorong perubahan Anda ke repositori jarak jauh.

  13. Pergi dan nikmati minuman yang enak, beri selamat pada dirimu sendiri. Ambil sisa hari libur.

Robert Bender
sumber
7
Ini harus ditandai sebagai jawabannya. Bekerja seperti pesona. Masalah ini terjadi meskipun saya tidak menambahkan file apa pun (file README biasa) setelah pembuatan repo di GitHub untuk proyek saya di Eclipse. Terima kasih banyak atas penjelasan langkah demi langkah yang mudah diikuti.
rbaleksandar
Masalah ini membutuhkan waktu satu tahun untuk saya selesaikan, sampai saya membaca posting Anda. Dalam kasus saya, saya tidak memiliki remote tetapi Eclipse membuat yang default yang disebut 'origin'.
Eugene van der Merwe
Manis, akhirnya saya bisa bergabung dengan Eclipse. Poin utama di sini adalah menggunakan tampilan Git Repositories untuk melakukan penggabungan, dan bukan tampilan Sinkronisasi Tim yang biasa. Akan lebih baik jika dalam tampilan sinkronisasi tim eGit bisa menonaktifkan semua opsi yang tidak melakukan apa-apa.
dan carter
1
Sementara ini berhasil, ini membuat komit gabungan yang tidak perlu. Anda harus menggunakan rebase di sini, yang tidak masalah karena perubahan Anda hanya lokal sehingga Anda tidak mengubah riwayat yang diterbitkan (dan jika Anda melakukannya, git akan tetap berteriak pada Anda untuk dorongan non-percepat-maju). Saya suka jawaban MYN.
nyuszika7h
1
Klik kanan pada proyek dan kemudian Mergedi master dan kemudian klik kanan lagi pada proyek push branch Masterbekerja
pengguna1207289
17

Dalam kasus saya, saya memilih Force Updatekotak centang sambil mendorong. Ini bekerja seperti pesona.

BSeitkazin
sumber
Ini berhasil juga untuk saya. Saya memiliki kondisi OP setelah "mengubah" sebuah komit. Dan pengambilan memberi saya "tidak ada yang bisa diambil"
Twilite
11

Sementara itu (saat Anda memperbarui proyek Anda), komit lain telah dibuat ke cabang 'master'. Oleh karena itu, Anda harus menarik perubahan tersebut terlebih dahulu untuk dapat mendorong perubahan Anda.

afk5min
sumber
4
dalam hal ini git cukup bodoh, saya mendorong semua perubahan ke remote. dan saya satu-satunya yang mengerjakan proyek ini. Mengapa saya harus menarik remote sebelum saya dapat mendorong lagi ???? perubahan yang ditarik akan datang dari lokal saya awalnya
Junchen Liu
7

Berlaku untuk Eclipse Luna + Eclipse Git 3.6.1

SAYA,

  1. repositori git kloning
  2. membuat beberapa perubahan dalam kode sumber
  3. perubahan bertahap dari Git Staging View
  4. akhirnya, lakukan dan Dorong!

Dan saya menghadapi masalah ini dengan EGit dan inilah cara saya memperbaikinya ..

Ya, seseorang melakukan perubahan sebelum saya melakukan perubahan saya. Jadi perubahannya ditolak. Setelah kesalahan ini, perubahan benar-benar dilakukan ke repositori lokal. Saya tidak ingin hanya Pullmengubah karena saya ingin mempertahankan linear historyseperti yang ditunjukkan dalam - Dalam kasus apa `git pull` bisa berbahaya?

Jadi, saya melakukan langkah-langkah berikut

  1. dari perspektif Repositori Git, klik kanan pada
    proyek Git yang bersangkutan
  2. pilih Fetch from Upstream- itu mengambil pembaruan jarak jauh (referensi dan objek) tetapi tidak ada pembaruan yang dibuat secara lokal. untuk info lebih lanjut lihat Apa perbedaan antara 'git pull' dan 'git fetch'?
  3. pilih Rebase...- ini membuka popup, klik untuk Preserve merges during rebasemelihat mengapa
    Apa sebenarnya yang dilakukan "rebase --preserve-merges" git (dan mengapa?)
  4. klik Rebase button
  5. jika ada / ada conflict(s), lanjutkan ke langkah 6 lagi langkah 11
  6. sebuah Rebase Resultpopup akan muncul, klik padaOK
  7. file comparatorakan terbuka, Anda perlu memodifikasi left side file.
  8. setelah Anda selesai menggabungkan perubahan dengan benar, buka Git Stagingtampilan
  9. stage the changes. yaituadd to index
  10. pada tampilan yang sama, klik Rebase-> Continue. ulangi 7 sampai 10 sampai semua konflik diselesaikan.
  11. dari Historytampilan, pilih baris komit Anda dan pilihPush Commit
  12. pilih Rebase Commits of local.......kotak centang dan klik berikutnya. rujuk mengapa - Git: rebase ke cabang pengembangan dari hulu
  13. klik Finish

Catatan: jika Anda memiliki beberapa komit repositori lokal, Anda perlu memadatkannya dalam satu komit untuk menghindari banyak penggabungan.

Yogesh Manware
sumber
Saya setuju dengan menggunakan rebase, bukan merge. Lebih baik karena tidak membuat komit gabungan yang tidak perlu. (Di luar topik: Stack Overflow sepenuhnya konyol dan menolak komentar saya semata-mata karena saya awalnya menulis "+1 untuk". Komentar saya sangat konstruktif, terima kasih.)
nyuszika7h
4

Konfigurasi Setelah menekan kode ketika Anda mendapatkan pesan yang ditolak, klik pada konfigurasi dan klik Tambah spesifikasi seperti yang ditunjukkan pada gambar ini

Sumber ref dan tujuan ref Drop down dan klik pada ref / heads / yourbranchname dan klik Add Spec lagi

masukkan deskripsi gambar di sini Pastikan Anda memilih pembaruan paksa

masukkan deskripsi gambar di sini Terakhir simpan dan dorong kode tersebut ke repo

Vineela Thonupunuri
sumber
3

Buka tampilan git:

1- pilih proyek Anda dan pilih gabung 2- Pilih pelacakan jarak jauh 3- klik ok

Git akan menggabungkan cabang jarak jauh dengan repositori lokal

4 - lalu dorong

dafali
sumber
2

Kesalahan ini berarti bahwa repositori jarak jauh memiliki komit lain dan telah melangkah lebih cepat dari cabang lokal Anda.
Saya mencoba melakukan git pull diikuti dengan git push. Jika Tidak ada perubahan yang bertentangan, git pull mendapatkan kode terbaru ke cabang lokal saya sambil menjaga perubahan saya tetap utuh.
Kemudian git push mendorong perubahan saya ke cabang master.

Pushkin
sumber
sepertinya banyak orang yang melewatkan resolusi sederhana ini: D
Black
0

Saya telah menemukan bahwa Anda harus melakukan commit terbaru dari git. Jadi ini adalah langkah-langkah yang harus diambil: 1) pastikan Anda belum mengerjakan file yang sama, jika tidak, Anda akan mengalami kesalahan DITY_WORK_TREE. 2) tarik perubahan terbaru. 3) lakukan pembaruan Anda.

Semoga ini membantu.

Elemental Perkasa
sumber
-1
  1. Masuk ke Github dan buat repo untuk kode baru Anda.
  2. Gunakan https atau url ssh baru di Eclise saat Anda melakukan push ke upstream;
adrian filipescu
sumber