Git push menolak "non-fast-forward"

90

Saya cukup baru untuk gitmenggunakannya untuk mengelola kode kita dalam lingkungan tim. Saya mengalami beberapa masalah rebasing dan saya memperbaikinya menggunakan

git checkout --ours filename.txt
git add filename.txt
git rebase --continue

Sekarang saya ingin mendorong perubahan saya, dan menjalankan perintah berikut

$ git push origin feature/my_feature_branch

beri saya kesalahan berikut:

To ssh://[email protected]:7999/repo/myproject.git
 ! [rejected]        feature/my_feature_branch -> feature/my_feature_branch (non-fast-forward)
error: failed to push some refs to 'ssh://[email protected]:7999/repo/myproject.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
hint: before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

Apa yang dapat saya lakukan untuk menghilangkan kesalahan tersebut?

PS: Saya menghindari untuk menggunakan --forceopsi sebanyak mungkin.

Frankline
sumber

Jawaban:

76

Tampaknya, seseorang mendorong komitmen baru antara yang terakhir git fetchdan git push. Dalam hal ini, Anda perlu mengulangi langkah Anda dan melakukan rebase my_feature_branchsekali lagi.

git fetch
git rebase feature/my_feature_branch
git push origin feature/my_feature_branch

Setelah git fetchsaya sarankan untuk memeriksa situasi dengan gitk --all.

Boris Brodski
sumber
Apa yang harus dilakukan untuk mengaktifkan git pull origin master: master yang seharusnya default untuk penggabungan. Apakah ini konflik gabungan atau tidak. Ini adalah satu-satunya pertanyaan yang ditanyakan.
mathtick
24

Mungkin Anda tidak mengambil perubahan jarak jauh sebelum rebase atau seseorang mendorong perubahan baru (saat Anda melakukan rebasing dan mencoba mendorong). Coba langkah-langkah ini:

#fetching remote 'feature/my_feature_branch' branch to the 'tmp' local branch 
git fetch origin feature/my_feature_branch:tmp

#rebasing on local 'tmp' branch
git rebase tmp

#pushing local changes to the remote
git push origin HEAD:feature/my_feature_branch

#removing temporary created 'tmp' branch
git branch -D tmp
Insinyur
sumber
Ini memecahkan masalah saya: ketika saya melakukan kode saya, saya melakukan rebase (terlambat, sudah ada perubahan, harus melakukannya sebelum berkomitmen). Kemudian meski tidak ada konflik, saya tidak bisa mendorong. Setelah menerapkan sihir di atas, itu berhasil. Terima kasih.
Jing Li
19

Saya punya masalah ini! Saya mencoba: git fetch + git merge, tetapi tidak terselesaikan! Saya mencoba: git pull, dan juga tidak terselesaikan

Kemudian saya mencoba ini dan menyelesaikan masalah saya (mirip dengan jawaban Engineer):

git fetch origin master:tmp
git rebase tmp
git push origin HEAD:master
git branch -D tmp
Aurelio A
sumber
7
Ini mengacaukan saya, saya mendorong hal-hal langsung ke master dan mendorong penerapan dari sepanjang hari ... dan semua orang kesal .... TIPS LUAR BIASA!
Mike Q
6
Mungkin ingin menjelaskan apa yang Anda lakukan secara ringkas sebelum memberikan alat berbahaya kepada seseorang.
Mirv - Matt
10

Saya memiliki masalah serupa dan saya mengatasinya dengan: git pull origin

William Rossier
sumber
1
Membantu saya ketika saya menerima kesalahan yang dimaksud saat menarik cabang jarak jauh.
GChuf
7

Saya terlambat ke pesta tetapi saya menemukan beberapa instruksi berguna di halaman bantuan github dan saya ingin membagikannya di sini.

Terkadang, Git tidak dapat membuat perubahan Anda ke repositori jarak jauh tanpa kehilangan komit. Jika ini terjadi, dorongan Anda ditolak.

Jika orang lain telah mendorong ke cabang yang sama dengan Anda, Git tidak akan dapat mendorong perubahan Anda:

$ git push origin master
To https://github.com/USERNAME/REPOSITORY.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'https://github.com/USERNAME/REPOSITORY.git'
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.

Anda dapat memperbaikinya dengan mengambil dan menggabungkan perubahan yang dibuat pada cabang jarak jauh dengan perubahan yang telah Anda buat secara lokal:

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

Atau, Anda dapat menggunakan git pulluntuk melakukan kedua perintah sekaligus:

$ git pull origin YOUR_BRANCH_NAME
# Grabs online updates and merges them with your local work
Bilal
sumber
4

coba perintah ini

$ git push -f -u origin <name of branch>

yaitu $ git push -f -u origin master

ivever timothy
sumber
Itu berhasil untuk kasus saya ketika yang lain tidak. Terkadang Anda hanya perlu memberi tahu git -f -u
gcr
1

Tulis kunci pada repositori lokal bersama

Saya memiliki masalah ini dan tidak ada saran di atas yang membantu saya. Saya bisa mengambil semuanya dengan benar. Tapi dorongan selalu gagal. Itu adalah repositori lokal yang terletak di direktori windows dengan beberapa klien yang bekerja dengannya melalui driver folder bersama VMWare. Tampaknya salah satu sistem mengunci repositori Git untuk menulis. Setelah menghentikan sistem VMWare yang relevan, yang menyebabkan kunci semuanya segera diperbaiki. Hampir tidak mungkin untuk mencari tahu, sistem mana yang menyebabkan kesalahan, jadi saya harus menghentikannya satu per satu sampai berhasil.

Boris Zinchenko
sumber
1

Saya menggunakan saran di sini dan itu mengacaukan saya karena menggabungkan kode lokal saya langsung ke master. .... jadi ambillah semuanya dengan sebutir garam. Rekan kerja saya mengatakan hal berikut membantu menyelesaikan masalah, perlu menunjuk kembali cabang saya.

 git branch --set-upstream-to=origin/feature/my-current-branch feature/my-current-branch
Mike Q
sumber
0

Di Eclipse lakukan hal berikut:

GIT Repositories> Remote> Origin> Klik kanan dan ucapkan ambil

GIT Repositories> Remote Tracking> Pilih cabang Anda dan ucapkan gabung

Buka proyek, klik kanan pada file Anda dan katakan Ambil dari hulu.

MansoorShaikh
sumber
0
  1. pindahkan kode ke cabang baru - git branch -b tmp_branchyouwantmergedin
  2. ubah ke cabang yang ingin Anda gabungkan - git checkout mycoolbranch
  3. setel ulang cabang yang ingin Anda gabungkan - git branch reset --hard HEAD
  4. gabungkan cabang tmp ke cabang yang diinginkan - git branch gabung tmp_branchyouwantmergedin
  5. dorong ke asal
richard
sumber
0

Berikut adalah solusi lain untuk mengatasi masalah ini

>git pull
>git commit -m "any meaning full message"
>git push
Sheo Dayal Singh
sumber
-1
  1. Batalkan komit lokal. Ini hanya akan membatalkan komit dan mempertahankan perubahan dalam copy pekerjaan
git reset --soft HEAD~1
  1. Tarik perubahan terbaru
git pull
  1. Sekarang Anda dapat melakukan perubahan Anda di atas kode terbaru
alk453
sumber