master ditolak -> master (non-fast-forward)

216

Saya mencoba untuk mendorong proyek saya (semua file di repositori baru). Saya mengikuti langkah-langkah tetapi ketika saya mendorong dengan git push -u origin mastersaya mendapatkan kesalahan ini:

! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to '[email protected]:asantoya/projectnewbies.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.

Saya mendapatkan kesalahan ini berkali-kali dan tidak tahu apa yang harus dilakukan.

Asantoya17
sumber
4
Jika Anda yakin master lokal Anda memiliki perubahan terbaru yang Anda inginkan pada remote, maka lakukan git push --force
IgorGanapolsky
34
git push --force <remote_repository>bekerja untukku.
Penyortir
@Sorter - Saya mengalami masalah yang sama sepanjang hari, ini membantu saya !! Terima kasih. Tapi itu tidak memberikan penjelasan mengapa masalah terjadi di tempat pertama dan mengapa perbaikannya bekerja.
Padawan
1
@ pmr, hanya sembari bertanya apakah OP "membaca pesan kesalahan" tidak membantu sama sekali. Jelas, pesan kesalahan itu tidak masuk akal bagi OP, sama seperti pesan itu tidak masuk akal bagi saya, atau 66 orang lainnya yang menaikkan jabatannya. Snarky, wittier-than-though tidak membantu orang sama sekali.
Padawan
3
@Padawan Anda juga akan melihat bahwa "orang yang snarky, lebih lucu daripada ini" memberikan jawaban yang diterima untuk pertanyaan ini dan 72 orang (mungkin termasuk Anda) merasa terbantu. Saya minta maaf karena komentar saya dianggap sombong, tetapi itu akan menjadi pertanyaan pertama saya jika Anda menanyakan pertanyaan itu dalam konteks profesional juga. Kadang-kadang berhenti dan meluangkan waktu sebentar untuk membaca pesan kesalahan dengan hati-hati. Saya lakukan untuk saya ketika saya melihat kesalahan itu untuk pertama kalinya.
sore

Jawaban:

160

Seperti yang dikatakan pesan kesalahan: git pull sebelum Anda mencoba git push. Tampaknya cabang lokal Anda tidak sinkron dengan cabang pelacakan Anda.

Bergantung pada aturan proyek dan alur kerja Anda, Anda mungkin juga ingin menggunakannya git pull --rebase.

sore
sumber
1
ini menunjukkan kepada saya README.md Penggabungan Otomatis penggabungan gagal; perbaiki konflik dan kemudian hasilkan.
Asantoya17
1
@ Asantoya17 Perubahan yang telah dilakukan pada konflik master jarak jauh dengan perubahan Anda. Tinjau file dan tinjau mereka. Kemudian komit hasil penyelesaian. Silakan dapatkan tutorial atau buku atau setidaknya baca pesan-pesannya.
sore
1
Apa artinya tarik? Memungkinkan Anda mendorong file atau mengambil dan mengunduh file dari situs web repositori? (mis. Bit Bucket)
David Dimalanta
4
@AndrewS git push --force origin master. Jika Anda mengalami masalah seperti itu lebih dari satu kali dalam hidup Anda, alur kerja proyek Anda rusak. Fitur harus dikembangkan di cabang dan digabung tanpa penerusan cepat dan jika fitur "gagal" Anda harus mengembalikan komit gabungan (sebaiknya lakukan pengujian di cabang integrasi terlebih dahulu sebelum Anda menggabungkan fitur untuk dikuasai). Tidak tahu tentang Eclipse.
sore
1
Apa yang harus dilakukan jika kesalahan itu dilaporkan git pull origin trunk:master?
Andry
175

PEMBERITAHUAN: Ini tidak pernah direkomendasikan penggunaan git. Ini akan menimpa perubahan pada remote. Hanya lakukan ini jika Anda tahu 100% bahwa perubahan lokal Anda harus didorong ke master jarak jauh.

Coba ini: git push -f origin master

shakhmatov
sumber
47
Tidak, jangan coba ini. Dari git help push: "Ini dapat menyebabkan repositori jarak jauh kehilangan komit; gunakan dengan hati-hati."
jcsahnwaldt Reinstate Monica
7
pasti tidak melakukan ini
Lluis
14
ini berhasil untuk saya. Saya pikir itu baik-baik saja karena komit saya pada github adalah yang dibuat dengan repo baru. Mungkin ide yang bagus untuk tidak menggunakannya setelah dimulainya proyek.
Matthew Moore
1
dapat bermanfaat jika Anda ingin memperbarui repo yang dibuat untuk tujuan pengiriman (jadi tidak ada perubahan baru di sisi jarak jauh)
HiB
Saya hanya menggunakan ini karena saya baru saja membuat komit, disinkronkan dengan GitHub, kemudian berharap saya telah menambahkan file lain ke komit itu. Jadi saya membuka kancingnya secara lokal, menjalankan perintah di atas untuk menghapusnya dari GitHub, kemudian melakukan lagi secara lokal, kemudian disinkronkan. Semuanya baik sekarang! Pikiran Anda, saya tahu pasti bahwa tidak ada komitmen lain yang dilakukan untuk cabang itu.
zeMinimalist
18

perintah ini bekerja dengan baik untuk saya

git push -f origin master
raed
sumber
3
Berhati-hatilah sebelum menggunakan perintah ini. Dengan menggunakan perintah ini, Anda akan kehilangan semua komitmen masa lalu Anda.
twenk11k
apakah -f berarti gaya dorong
maheshmnj
@maheshmnj Ya!
testuser
15

Saya baru saja menerima kesalahan ini.

Saya membuat repositori github setelah membuat repositori git lokal saya jadi saya harus menerima perubahan ke lokal sebelum mendorong ke github. Dalam hal ini satu-satunya perubahan adalah file readme yang dibuat sebagai langkah opsional saat membuat repositori github.

git pull https://github.com/*username*/*repository*.git master

URL repositori didapat dari sini di halaman proyek github:

masukkan deskripsi gambar di sini

Saya kemudian diinisialisasi ulang (ini mungkin tidak diperlukan)

git init
git add .
git commit -m "update"

Kemudian dorong:

git push
langit biru
sumber
3
Jawaban ini mencerminkan skenario kasus aktual.
kta
9

Saya telah membuat repo baru di github dan saya memiliki masalah yang sama, tetapi juga memiliki masalah saat menarik, jadi ini bekerja untuk saya.

tetapi ini tidak disarankan dalam repo yang sudah memiliki banyak kode karena ini dapat mengacaukan segalanya

git push origin master --force
Muneef M
sumber
Jawaban ini sudah diberikan: stackoverflow.com/a/16374574/1771479 , dan tidak disarankan untuk melakukannya.
agold
9

PERINGATAN:

Pergi untuk ' git pull' bukanlah SELALU solusi, jadi berhati-hatilah. Anda mungkin menghadapi masalah ini (masalah yang disebutkan dalam Q) jika Anda dengan sengaja mengubah riwayat penyimpanan Anda. Dalam hal itu, git membingungkan perubahan riwayat Anda dengan perubahan baru di repo jarak jauh Anda. Jadi, Anda harus memilih git push --force, karena panggilan git pullakan membatalkan semua perubahan yang Anda buat pada riwayat Anda, secara sengaja.

Gupta
sumber
8

Jika git pulltidak membantu, maka mungkin Anda telah mendorong perubahan Anda (A) dan setelah itu digunakan git commit --amenduntuk menambahkan beberapa perubahan lagi (B). Oleh karena itu, git berpikir bahwa Anda dapat kehilangan histori - ia mengartikan B sebagai komit yang berbeda walaupun berisi semua perubahan dari A.

             B
            /
        ---X---A

Jika tidak ada yang mengubah repo setelahnya A, maka Anda dapat melakukannyagit push --force .

Namun, jika ada perubahan setelah Adari orang lain:

             B
            /
        ---X---A---C

maka Anda harus mengubah kembali bahwa orang berubah dari Amenjadi B( C-> D).

             B---D
            /
        ---X---A---C

atau memperbaiki masalah secara manual. Saya belum memikirkan bagaimana melakukannya.

Alexander Volkov
sumber
7

gunakan perintah ini:

git pull --allow-unrelated-histories <nick name of repository> <branch name>

Suka:

git pull --allow-unrelated-histories origin master

kesalahan ini terjadi ketika proyek tidak memiliki leluhur yang sama.

Umar Farooq
sumber
7
git push -f origin master

gunakan brute force ;-) Kemungkinan besar Anda mencoba menambahkan folder lokal yang Anda buat sebelum membuat repo on git.

ngoni
sumber
2
Setiap dan semua jawaban termasuk ini harus memberi peringatan.
D. Ben Knoble
1
Saya mencoba ini dan itu menghabiskan banyak komitmen pada GitHub yang harus saya pulihkan dari klon lokal lain dari repo. Berbahaya.
Paflow
6

Ini karena Anda melakukan beberapa perubahan pada master Anda sehingga proyek meminta Anda untuk menarik terlebih dahulu. Jika Anda ingin mendorongnya, Anda dapat menggunakan brute force dengan mengetik ini:

git push -f origin master

Ingatlah untuk terlebih dahulu melakukan perubahan Anda:

git add .
git commit -m "Your commit message"
gtech
sumber
4

Yang perlu Anda lakukan

git branch

jika outputnya seperti:

* (no branch)
master

lalu lakukan

git checkout master

Pastikan Anda tidak memiliki komitmen yang tertunda karena memeriksa akan kehilangan semua perubahan yang tidak dilakukan.

kandang
sumber
4

! [ditolak] master -> master (non-fast-forward)

Jangan panik, ini sangat mudah diperbaiki. Yang harus Anda lakukan adalah mengeluarkan tarikan dan cabang Anda akan maju cepat:

$ git pull myrepo master

Kemudian coba lagi dorongan Anda dan semuanya akan baik-baik saja:

$ git push github master

pengguna3292712
sumber
4

Ini terjadi pada saya ketika saya sedang mengembangkan cabang dan cabang master saya tidak dengan pembaruan terbaru.

Jadi ketika saya mencoba untuk mendapatkan push dari mengembangkan cabang saya memiliki kesalahan itu.

Saya memperbaikinya dengan beralih ke cabang master, git pull, lalu kembali untuk mengembangkan cabang dan git push.

$ git fetch && git checkout master
$ git pull
$ git fetch && git checkout develop
$ git push
Jonn Marc Vistal
sumber
3

Saya punya masalah ini pada mesin pengembangan. The devcabang mendorong-baik saja tapi yang mastercabang memberi saya (sementara git pushing ketika berada di devcabang):

! [rejected]        master -> master (non-fast-forward)

Jadi saya mencoba:

git checkout master
git pull

Yang memberi saya:

You asked me to pull without telling me which branch you
want to merge with, and 'branch.master.merge' in
your configuration file does not tell me, either.

Saya menemukan cabang master hilang .git/configdan menambahkan:

[branch "master"]
    remote = origin
    merge = refs/heads/master

Setelah itu git pushjuga bekerja dengan baik di devcabang.

kqw
sumber
2

Remote saya tidak sinkron dengan lokal sehingga ini bekerja untuk saya

git pull --rebase

dan pastikan ketika Anda melakukan git pulllagi itu harus mengatakan Sudah up to date dan sekarang Anda siap untuk mendorong ke asal

dengan asumsi Anda sudah melakukannya git remote add origin remote repository URL

melakukan

`git push origin master`  

Tangkapan layar mengatakan itu semua masukkan deskripsi gambar di sini

Atau Anda dapat melakukan ini

  1. git stash (menyimpan pekerjaan yang tidak dikomit sementara)
  2. git pull (buat sinkronisasi lokal dan jarak jauh Anda)
  3. git stash pop (beri Anda perubahan yang tidak dikomit)
  4. git push
maheshmnj
sumber
1

Saya memiliki masalah yang sama. Saya menggunakan Git Totoise. Klik Kanan -> TotoiseGit -> Bersihkan. Sekarang Anda dapat mendorong ke Github. Ini bekerja dengan baik dengan saya: D

Son Nguyen Thanh
sumber
1

Ini karena Anda telah membuat perubahan yang bertentangan pada masternya. Dan server repositori Anda tidak dapat memberi tahu Anda dengan kata-kata ini, sehingga memberikan kesalahan ini karena bukan masalah dia yang menangani konflik ini untuk Anda, jadi dia meminta Anda untuk melakukannya sendiri. Sebagai ?

1- git pull Ini akan menggabungkan kode Anda dari repositori ke kode master situs Anda. Jadi konflik ditunjukkan.

2- memperlakukan konflik manual ini.

3 -

git push origin master

Dan presto, masalah Anda telah diatasi.

Paulo Linhares - Packapps
sumber
0

Satu-satunya yang saya dapat mengatasi masalah ini adalah menghapus repo lokal dan git dan membuat yang sama lagi di kedua ujungnya. Bekerja dengan baik untuk saat ini.

Akash Kumar Sharma
sumber
Saya selalu menyimpan cadangan repo git saya di Dropbox. Dengan begitu saya tidak perlu menghapus repo lokal, saya hanya menyalin dan menempel direktori yang relevan dari Dropbox ketika situasinya muncul.
IgorGanapolsky
0

Jika ada yang mengalami kesalahan ini ketika mencoba untuk mendorong ke heroku maka ganti 'asal' dengan 'heroku' seperti ini: git push -f heroku master

Vadim Malakhovski
sumber
0

Coba ini, dalam kasus saya ini berfungsi

git rebase --abort

Ahmer Afzal
sumber
0

Ini juga dapat disebabkan karena beberapa kesalahan nama yang disebabkan saat memberikan nama ke Repo. Jika salah satu dari jawaban di atas tidak berhasil. Ini bekerja untuk saya:

Hapus repo itu dan buat yang baru dan coba lagi perintah berikut:

cd 'Local Directory Path'
git remote add origin *your_git_name.git*
git push -u origin master

jika tambahkan asal acara sudah ada gunakan ini sebagai gantinya:

git remote set-url origin *your_git_name.git*
Harshal SG
sumber