Tidak dapat mendorong ke GitHub - terus mengatakan perlu digabung

743

Saya baru mengenal GitHub . Hari ini saya bertemu beberapa masalah ketika saya mencoba mendorong kode saya ke GitHub.

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

Saya belum memasukkan apa pun di repositori, jadi mengapa saya perlu menarik sesuatu?

pengguna1353717
sumber
6
Perhatikan bahwa ini juga dapat terjadi untuk cabang yang sebelumnya dikunjungi secara lokal, yang memiliki komit dalam repositori hulu. Apakah ada cara mudah untuk hanya memajukan cabang lama atau membiarkan git melupakannya di repositori lokal?
Thorbjørn Ravn Andersen
50
@ ThorbjørnRavnAndersen - Saya berhasil memperbaiki skenario ini menggunakan 'git push -f' yang sepertinya membuat git melupakan masalah imajinernya :)
Echelon
6
Terlihat mengeluh tentang ini dari pendatang baru git. Alasannya adalah ketika mereka membuat proyek baru di GitHub, mereka meninggalkan kotak centang "Inisialisasi dengan readme" atau memilih opsi .gitignore / GPL, sehingga proyek baru sudah memiliki komitmen yang tidak mereka miliki secara lokal, sehingga kebingungan yang disebabkan oleh kesalahan di atas.
Ruslan Kabalin
4
@Echelon opsi -f untuk memaksakan dorongan itu berbahaya. Saya hanya menggunakannya dalam proyek tim dan 6 komit "bergaris", cukup dihapus dari server dan tidak ada cara untuk mendapatkannya kembali!
Deleplace
42
Sangat trendi untuk memuji git. Tetapi hampir setiap pengembang yang saya ajak bicara, secara pribadi setuju bahwa mereka secara pribadi membenci git. Sekarang mereka menggunakan git, mereka menghabiskan lebih banyak waktu dalam kontrol sumber dibandingkan dengan apa yang mereka gunakan ketika mereka menggunakan perforce atau TFS.
developer747

Jawaban:

762

Ini dapat menyebabkan repositori jarak jauh kehilangan komit; gunakan dengan hati-hati.

Jika Anda tidak ingin menggabungkan cabang remote ke cabang lokal Anda (lihat perbedaan dengan git diff ), dan ingin melakukan push paksa, gunakan perintah push dengan -f

git push -f origin <branch>

di mana originnama repo jarak jauh Anda .

Biasanya, perintah tersebut menolak untuk memperbarui referensi jarak jauh yang bukan merupakan nenek moyang dari referensi lokal yang digunakan untuk menimpanya. Bendera ini menonaktifkan centang. Ini dapat menyebabkan repositori jarak jauh kehilangan komit; gunakan dengan hati-hati.

Nick Rolando
sumber
1
Ini bekerja untuk saya untuk repo yang saya miliki di Github tetapi, saya punya submodule dari Heroku dalam aplikasi saya. dan saya harus membawa file keluar dari submodule dan kemudian mendorong aplikasi yang diperbarui ke Heroku.
JGallardo
24
Pastikan Anda membaca baris terakhir dari komentar pada posting ini! "Ini dapat menyebabkan repositori jarak jauh kehilangan komit; gunakan dengan hati-hati." Melakukan dorongan kekuatan di lingkungan tim adalah hal yang berbahaya, dan biasanya harus dihindari.
Adam Kalnas
Ini juga dapat TAMBAH semua riwayat dari repositori asli ke remote menggunakan cherry-pick untuk memindahkan 'hanya' satu komit. Pulihkan dari cadangan yang diperlukan ...
rickfoosusa
Perlu juga disebutkan bahwa jika Anda menggunakan Github, ini dapat menggantikan Permintaan Tarik terbuka yang sebelumnya Anda buat dengan komitmen terbaru Anda. Dari Github Docs : "Memaksa mendorong dapat merusak permintaan tarik Anda".
Armfoot
Ini berhasil untuk saya. Saya sudah mencoba $ git pull origin master -vtetapi memberikan kesalahan fatal: refusing to merge unrelated histories. Kemudian saya mencoba ini dan itu berhasil dan file lokal saya muncul di repo github remote.
Vir
238

Seperti pesan memberitahu Anda,

Gabungkan perubahan jarak jauh (mis. 'Git pull')

Gunakan git pulluntuk menarik perubahan terbaru dari repositori jarak jauh ke repositori lokal Anda. Dalam hal ini, menarik perubahan akan membutuhkan penggabungan karena Anda telah membuat perubahan pada repositori lokal Anda.

Saya akan memberikan contoh dan gambar untuk menjelaskan. Mari kita asumsikan penarikan terakhir Anda dari asal / cabang di Komit B. Anda telah menyelesaikan dan melakukan beberapa pekerjaan (Komit C). Pada saat yang sama, orang lain telah menyelesaikan pekerjaan mereka dan mendorongnya ke asal / cabang (Komit D). Perlu ada penggabungan antara dua cabang ini.

local branch:                         --- Commit C 
                                    /
                                   /
                                  /
origin/branch: Commit A ------ Commit B ---- Commit D

Karena Andalah yang ingin mendorong, Git memaksa Anda untuk melakukan penggabungan. Untuk melakukannya, Anda harus terlebih dahulu menarik perubahan dari asal / cabang.

local branch:                         --- Commit C -- Commit E
                                    /               /           
                                   /               /             
                                  /               /               
origin/branch: Commit A ------ Commit B ---- Commit D 

Setelah menyelesaikan penggabungan, Anda sekarang akan diizinkan untuk memajukan asal / cabang ke Komit E dengan mendorong perubahan Anda.

Git mengharuskan Anda menangani penggabungan sendiri, karena penggabungan dapat menyebabkan konflik.

Jake Greene
sumber
7
Bagaimana jika Anda tidak ingin bergabung? Dan biarkan D sebagai cabang samping (setidaknya untuk saat ini). Kemudian, saya mungkin melakukan lebih banyak setelah C; orang lain mungkin melakukan lebih banyak setelah D. Apa terburu-buru untuk bergabung? Bagaimana saya bisa mendorong cabang samping tanpa bergabung? ~~~
Steve Pitchers
3
lokal / cabang dan asal / cabang dimaksudkan untuk mewakili cabang yang sama tetapi pada mesin yang berbeda (lokal vs asal); untuk mendorong lokal / cabang adalah memperbarui asal / cabang. Jika Anda ingin keadaan cabang Anda terlihat oleh orang lain (yaitu pada asal) tetapi Anda tidak ingin menggabungkan dengan asal / cabang, maka Anda harus membuat cabang baru dari lokal / cabang (cabang git [nama]) dan dorong cabang itu ke asal (git push -u asal [nama])
Jake Greene
1
Penjelasan yang bagus. Video ini menunjukkan demonstrasi singkat tentang masalah ini dan cara mengatasinya seperti yang dijelaskan oleh @JakeGreene, serta dua cara untuk menghindarinya saat mengatur repositori baru.
Kevin Markham
4
beberapa tahun kemudian, sepertinya jawaban ini sangat mirip dengan yang lain ini
superjos
1
Bagi saya git pulljuga dicetak Already up-to-date. Ternyata saya tidak di cabang saya meskipun saya, tapi cabang KEPALA terpisah (mungkin dari penggabungan gagal?). Ini jelas setelah berlari git branch. Setelah menjalankan git checkout mybranchsemuanya bekerja seperti yang diharapkan.
strider
200

Sudahkah Anda memperbarui kode sebelum mendorong?

Gunakan git pull origin mastersebelum Anda mendorong sesuatu.

Saya berasumsi bahwa Anda menggunakan originnama untuk remote Anda.

Anda perlu menarik sebelum mendorong, untuk membuat repositori lokal Anda mutakhir sebelum Anda mendorong sesuatu (kalau-kalau ada orang lain yang sudah memperbarui kode pada github.com). Ini membantu dalam menyelesaikan konflik secara lokal.

AYK
sumber
1
Bagaimana saya bisa tahu nama repositori? Ketika saya mengetik git pull origin mastergit mengeluh bahwa'origin' does not appear to be a git repository
ziyuang
3
'asal' adalah remote. Anda dapat menggunakan git remote --verboseuntuk melihat semua remote yang dikonfigurasi di bawah folder git Anda. Informasi yang ditampilkan di layar juga akan menyertakan jalur "[email protected]" atau jalur HTTPS, yang darinya Anda dapat mengidentifikasi ke mana harus mendorong. Semoga ini membantu !
AYK
16
git pull origin mastermenampilkan Sudah up-to-date. tetapi kemudian ketika mencoba untuk mendorong origin_branch ini mengatakan peringatan yang sama disebutkan dalam pertanyaan. Ada saran !!
CoDe
2
@ Shubh apakah Anda pernah memecahkan masalah ini? Saya mendapatkan hal yang sama!
Asli
3
@OriginalAlchemist ya..karena saya hanya pengembang yang bekerja pada cabang remote-local ... jadi saya memang memaksa mendorong cabang lokal ..dan yang menimpa semua perubahan cabang terbuka di server dengan perubahan saya dari sistem lokal. git push -f <remote> <branch>mis. git push origin <your_local_branch> periksa utas ini .
CoDe
122

Ini biasanya terjadi ketika Anda git commitdan mencoba untuk git pushmengubah sebelumnya git pullingdi cabang xtempat orang lain telah membuat perubahan.

Aliran normal akan seperti di bawah ini,

LANGKAH 1 : git stashPerubahan lokal yang tidak dikomit pada cabang itu.

LANGKAH 2 : git pull origin branch_name -vuntuk pull and mergeke perubahan yang dilakukan secara lokal pada cabang itu ( berikan gabungan ini beberapa pesan, dan perbaiki konflik jika ada. )

LANGKAH 3 : git stash popthe stashperubahan ed ( Kemudian Anda dapat membuat komit pada file Muncul jika Anda ingin atau mendorong sudah berubah berkomitmen (Step4) pertama dan membuat yang baru berkomitmen untuk file kemudian. )

LANGKAH 4 : git push origin branch_name -vperubahan yang digabungkan.

Ganti branch_namedengan master(untuk mastercabang).

prayagupd
sumber
3
dimana itu commit? Jika Anda tidak melakukan perubahan setelahnya stash pop?
mehmet
Saya harus. Saya biasanya mendorong kode yang digabungkan terlebih dahulu dan kemudian melakukan perubahan lokal saya yang tidak dikomit. Anda dapat melakukan dan mendorong sekaligus. Hanya preferensi.
prayagupd
51

Solusi pertama dan sederhana (Tidak Direkomendasikan)

  • Coba perintah ini git push -f origin master.
  • Perintah ini akan secara paksa menimpa repositori jarak jauh (GitHub)

Solusi yang disarankan

  • Jalankan perintah ini:
git pull --allow-unrelated-histories  //this might give you error but nothing to worry, next cmd will fix it
git add *
git commit -m "commit message"
git push

Jika ini tidak berhasil, ikuti 🔰

  • Hapus .gitdirektori dari folder.
  • Kemudian jalankan perintah-perintah ini:

    git init
    git add .
    git commit -m "First Commit"
    git remote add origin [url]
    git push -u origin master
    

ATAU

git push -f origin master 

Hanya gunakan git push -f origin masterjika -utidak bekerja untuk Anda.

Ini akan menyelesaikan hampir semua jenis kesalahan yang terjadi saat mendorong file Anda.

Smit Patel
sumber
4
Menghapus repo git Anda dan kehilangan seluruh riwayat komit Anda adalah solusi "Disarankan"? Sepertinya tergesa-gesa.
Nils Guillermin
@Nils Guillermin Tergantung pada situasi Anda. Jika saya bekerja pada proyek besar di mana saya harus memperbaiki semua konflik penggabungan maka saya akan menggunakan vscode untuk meninjau dan menggabungkan semua perubahan dengan mudah. Terima kasih atas pendapat Anda.
Smit Patel
47

Terkadang kami lupa menarik dan melakukan banyak pekerjaan di lingkungan lokal.

Jika seseorang ingin mendorong tanpa menarik,

git push --force

sedang bekerja. Ini tidak direkomendasikan ketika bekerja dengan orang lain, tetapi ketika pekerjaan Anda adalah hal yang sederhana atau proyek mainan pribadi, itu akan menjadi solusi cepat.

Teo
sumber
$ git push - force origin master
shaurya uppal
2
Ini berhasil untuk saya: proyek pribadi dengan 0 kolaborator lainnya. Saya telah mencoba beberapa "solusi" yang disarankan di sini pada SO, tidak ada yang memperbaiki apa yang merupakan masalah yang sangat sederhana: Saya telah melakukan lokal reset --hardke komit yang lebih lama dan kemudian melakukan beberapa lagi. Kemudian saya hanya ingin pushtetapi repo jarak jauh tidak siap untuk membiarkan saya. WarrenP sebenarnya bisa membantu git peserta didik dengan menjadi tidak terlalu rahasia. Mungkin dia tidak mau.
mike rodent
2
Entah tidak menggunakannya, atau belajar menggunakannya dengan benar. Jika Anda memaksakan push ke repositori pusat penting yang dibagikan oleh tim, Anda harus kehilangan semua akses push ke semua repo penting. Apa yang Anda lakukan pada repo pribadi Anda sendiri, untuk menghindari mempelajari jalan keluar alternatif, pada akhirnya akan memengaruhi kemampuan Anda untuk mengerjakan repo bersama. Jika Anda tahu apa yang terjadi sebelum force push, terkadang force push ok. Jika tidak, itu tidak akan apa-apa.
Warren P
35

Beberapa dari Anda mungkin mendapatkan kesalahan ini karena Git tidak tahu cabang mana yang Anda coba tekan.

Jika pesan kesalahan Anda juga termasuk

error: failed to push some refs to '[email protected]:jkubicek/my_proj.git'
hint: Updates were rejected because a pushed branch tip is behind its remote
hint: counterpart. If you did not intend to push that branch, you may want to
hint: specify branches to push or set the 'push.default' configuration
hint: variable to 'current' or 'upstream' to push only the current branch.

maka Anda mungkin ingin mengikuti tips praktis dari Jim Kubicek, Konfigurasikan Git ke Hanya Dorong Cabang Saat Ini , untuk mengatur cabang default menjadi saat ini.

git config --global push.default current
xiatica
sumber
32
git pull origin branch_name --rebase

Ini bekerja untuk saya - perintah git pull origin branch_name --rebaseakan menarik perubahan dari branch_name jarak jauh pada awalnya, kemudian rebasecabang saat ini di atasnya.

Pyuri Sahu
sumber
20

Selain jawaban di atas, berikut ini bekerja untuk saya: -

Skenario -

  1. Saya mendorong my_branch ke asal dengan sukses.
  2. Saya membuat beberapa perubahan lagi.
  3. Ketika saya mencoba untuk mendorong lagi, (setelah melakukan add, tentu saja melakukan), saya mendapatkan kesalahan yang disebutkan di atas.

Solusi -

 1. git checkout **my_branch**
 2. git add, commit your changes.
 3. git pull origin **my_branch** (not origin, master, or develop)
 4. git push origin **my_branch**

Bukti

Bhavuk Mathur
sumber
1
Anda telah membantu saya. Saya mengalami kesulitan untuk memperhatikan bahwa saya perlu checkout ke cabang lain dan menariknya dari jarak jauh, meskipun saya menarik cabang lain menggunakan --allbendera.
MZanetti
18

Saya memiliki masalah yang sama, apa yang saya lakukan adalah pertama kali saya mendorongnya secara paksa dengan menggunakan ini

git push --force

Saya melakukan ini setelah saya mengkomit file dan mendapatkan kesalahan saat Anda mendapatkannya. Itu melakukan semua file dan mendorong mereka. Kemudian waktu berikutnya saya mendorong ke github. Saya melakukan apa yang diminta dan tidak apa-apa. Semoga ini bekerja untuk Anda juga :)

Kailash Bhalaki
sumber
Ini akan berhasil tetapi mungkin bukan yang Anda inginkan! Itu berarti Anda pada dasarnya hanya mengabaikan perubahan yang sekarang akan hilang selamanya.
rolls
3
git push --set-upstream origin master --force
Legenda
1
Cara hebat untuk menghancurkan repositori. Jika Anda memaksa, Anda akan menghancurkan sejarah. Juga banyak basis kode git yang diatur secara profesional tidak memungkinkan Anda untuk melakukan ini.
Oliver Dixon
Ini adalah jawaban rangkap, dan yang asli juga bukan nasihat yang bagus.
moopet
Ini sebenarnya yang ingin saya lakukan tetapi saya baru saja mencoba dengan Gitlab, dan Gitlab tidak mengizinkan ini pada "cabang yang dilindungi" dengan desain
jeffery_the_wind
13

Saya menyebutkan ini dalam tutorial saya, Cara Menggunakan GitHub: Tutorial untuk pemula .

Saat Anda membuat repositori baru di GitHub, GitHub dapat meminta Anda untuk membuat file readme. Jika Anda membuat file readme langsung di GitHub, maka Anda harus terlebih dahulu membuat permintaan 'pull' sebelum permintaan 'push' berhasil. Perintah-perintah ini akan 'menarik' repositori jarak jauh, menggabungkannya dengan file Anda saat ini, dan kemudian 'mendorong' semua file kembali ke GitHub:

git pull https://github.com/thomas07vt/MyFirstRepo.git master

git push https://github.com/thomas07vt/MyFirstRepo.git master
Thomas07vt
sumber
Saya tahu ini setahun kemudian, tetapi dari semua jawaban ini, jawaban Anda adalah satu-satunya yang benar-benar menjelaskan mengapa saya sudah mengalami masalah hari 1 dengan github. Apa perbedaan antara tarikan dan pengambilan?
Xander Luciano
1
Ambil memungkinkan Anda untuk melihat-lihat dalam perubahan tanpa menggabungkannya ke cabang lokal Anda. Tarik adalah jalan pintas untuk mengambil dan kemudian bergabung. Saya yakin Anda tahu itu dalam 13 bulan terakhir. Saya hanya melewati karena saya telah membuat kekacauan saya sendiri. ;-)
wolfhoundjesse
6

Saya mendapatkan pesan kesalahan yang disebutkan di atas ketika saya mencoba untuk mendorong cabang saya saat ini foobar:

git checkout foobar
git push origin foo

Ternyata saya memiliki dua cabang lokal yang melacak cabang terpencil yang sama:

foo -> origin/foo (some old branch)
foobar -> origin/foo (my current working branch)

Ini berhasil bagi saya untuk mendorong cabang saya saat ini dengan menggunakan:

git push origin foobar:foo

... dan untuk pembersihan git branch -d

Marco
sumber
6

git push -f asal nama cabang

Gunakan perintah di atas hanya jika Anda yakin bahwa Anda tidak memerlukan kode cabang jarak jauh jika tidak bergabung dulu dan kemudian dorong kode tersebut

VIKAS KOHLI
sumber
5
Ini adalah duplikat dari jawaban yang buruk.
moopet
5

Jika Anda tidak ingin menarik ke proyek Anda saat ini (dan berpotensi menghadapi konflik yang tidak ingin Anda selesaikan) dan Anda tidak ingin membuat cabang lain (Ini akan membosankan untuk mengelola cabang lain), dan Anda tidak tidak ingin melakukan forceperintah git yang berisiko dan permanen (yang bahkan setelah membaca apa yang mereka lakukan, saya sering terkejut dengan implikasi melakukannya).

Solusi : Anda cukup, seret konten folder Anda ke folder lain, tarik proyek ke folder kosong sekarang, seret konten yang ditarik ke tempat sampah, lalu seret proyek Anda yang benar kembali ke folder. Anda harus bisa mendorong dengan benar dan mendapatkan hasil yang diinginkan. Saya benar-benar membutuhkan waktu kurang dari 10 detik untuk melakukan ini.

Bagi orang-orang yang akan mengatakan kepada saya ini tidak pantas tanpa mengutip konsekuensi apa pun, atau orang-orang mengatakan kepada saya untuk menggunakan perintah yang menyebabkan saya kesal di masa depan, saya mengatakan: "Metode ini secara harfiah membutuhkan waktu kurang dari 10 detik." Jika saya menemukan perintah git yang membutuhkan waktu kurang dari 10 detik untuk mengimplementasikan dan memiliki efek yang sama persis, saya akan mengadopsi itu. Sampai saat itu, saya menggunakan metode ini.

Salah satu kelemahan dari metode ini adalah bahwa riwayat komit Anda akan muncul linier ketika Anda benar-benar bergabung di cabang tanpa penggabungan tersebut didokumentasikan. Ini mungkin bukan metode terbaik saat bekerja dengan kelompok. Kerjakan cabang dalam kasus-kasus itu!

ScottyBlades
sumber
4

Hanya memiliki masalah yang sama tetapi dalam kasus saya, saya telah mengetik cabang yang salah pada remote. Jadi, tampaknya itu adalah sumber masalah ini ... periksa lagi Anda mendorong ke cabang yang benar.

longda
sumber
1
Dan saya memiliki hal serupa, di mana saya mengingat perintah sebelumnya, yang untuk repositori yang sama sekali berbeda!
Clare Macrae
4

Saya mengalami masalah yang sama dan ternyata saya berada di cabang (lokal) yang berbeda dari yang saya kira DAN cabang lokal yang benar ada di belakang dalam komit dari jarak jauh.

Solusi saya: checkout cabang yang benar, cherry-pick komit dari cabang lokal lainnya, git pull dan git push

Ramon Fincken
sumber
4

Saya memiliki masalah yang sama dan ternyata alur kerja saya untuk memperbarui cabang saya salah. Saya melakukan hal berikut:

Di 'tuan' lokal saya

git fetch upstream
git merge upstream/master --ff-only

lalu kembali ke cabang lokal saya

git rebase master

Ini bekerja dengan baik untuk aliran git sebelumnya tetapi tidak dengan github. The git rebaseadalah masalah di sini menyebabkan masalah dengan sinkronisasi (dan saya akan mengakui bahwa sesuatu yang sudah harus menerima tanpa sepenuhnya memahami) dan sayangnya menempatkan saya dalam posisi di mana git push -fmungkin menjadi pilihan termudah. Tidak baik.

Alur baru saya adalah memperbarui cabang secara langsung menggunakan git mergesebagai berikut:

Di cabang lokal saya

git fetch upstream
git merge upstream/master

Tidak maju cepat, karena saya akan membuat perubahan tentu saja di cabang lokal.

Seperti yang mungkin Anda tahu, saya bukan ahli git, tetapi saya diberi tahu dengan andal bahwa alur kerja ini mungkin akan menghindari masalah khusus yang saya miliki.

Komponen 10
sumber
3

Dalam kasus saya, saya sudah memeriksa "cabang saya", dan selesai git pull, jadi saya tidak tahu mengapa dorongan itu tidak berfungsi. Akhirnya, saya menyadari bahwa saya mendorong cabang yang salah. Saya mengetik git push origin masterbukan git push origin mybranch.

Jadi, jika Anda sudah selesai git pulldan masih menerima pesan ini, pastikan Anda mendorong cabang yang benar.

wisbucky
sumber
3

Apakah nama cabang Anda sama dengan nama cabang jarak jauh?

Jika tidak, Anda harus checkout cabang baru dengan nama yang sama dengan cabang jarak jauh dan coba dorong lagi.

Asumsikan cabang jarak jauh yang ingin Anda tekan adalah [ pengujian ] dan cabang lokal Anda dinamai [ tes ].

Jika Anda tidak berada di cabang tes , alihkan ke sana.

git checkout test

Kemudian buka cabang baru dan beri nama pengujian .

git checkout -b testing

Sekarang, saatnya untuk mendorongnya:

git push [remote repo] testing
fox323
sumber
2
Cukup gunakan $git branch -M <new_name>untuk mengubah nama cabang lokal.
com
3

Saya telah mengatasi masalah ini di repositori GIT saya. Tidak perlu rebaseatau forceberkomitmen dalam hal ini. Gunakan langkah-langkah di bawah ini untuk menyelesaikan ini -

local_barnch> git branch --set-upstream to=origin/<local_branch_name> 

local_barnch>git pull origin <local_branch_name>

local_barnch> git branch --set-upstream to=origin/master

local_barnch>git push origin <local_branch_name>

Semoga ini bisa membantu.

Sai prateek
sumber
2

Solusi lain adalah memajukan kepala remote dengan membuat komit lain jika Anda bisa. Setelah Anda menarik kepala maju ini ke subtree lokal maka Anda akan dapat mendorongnya lagi.

9swampy
sumber
2

Saya mendapatkan kesalahan serupa saat mendorong perubahan terbaru ke repositori telanjang Git yang saya gunakan untuk gitweb . Dalam kasus saya, saya tidak membuat perubahan apa pun di repositori telanjang, jadi saya hanya menghapus repositori telanjang dan dikloning lagi:

git clone --bare <source repo path> <target bare repo path>
Hemant
sumber
2

Jika Anda yakin tidak ada yang membuat perubahan pada repositori git Anda dan bahwa Anda bekerja pada versi terbaru, git pulltidak masuk akal sebagai solusi di hati Anda ...

Maka ini mungkin yang terjadi, Anda gunakan git commit --amend

Ini memungkinkan Anda menggabungkan perubahan bertahap dengan komit sebelumnya alih-alih melakukannya sebagai snapshot yang sama sekali baru. Itu juga dapat digunakan untuk mengedit pesan komit sebelumnya tanpa mengubah snapshot-nya.

Tutorial ATLASSIAN: penulisan ulang riwayat

Namun, tidak disarankan untuk melakukan git commit --amend jika Anda telah mendorong komit ke GitHub , ini karena "mengubah tidak hanya mengubah komit terbaru - itu menggantikannya sepenuhnya. Untuk Git, itu akan terlihat seperti komit baru" yang berarti bagi pengembang lain di GitHub Anda, riwayat tampak seperti A-> B-> C tetapi bagi Anda sepertinya A-> B-> D, jika GitHub mengizinkan Anda push, semua orang harus memperbaiki secara manual riwayat mereka.

Ini adalah alasan mengapa Anda mendapatkan pesan kesalahan ! [rejected] master -> master (non-fast-forward), jika Anda tahu bahwa tidak ada yang menarik perubahan terbaru Anda, Anda dapat melakukannya git push --force, ini akan mengubah sejarah git di repo publik Anda . Kalau tidak ... Anda dapat melakukan git pull, tetapi saya percaya ini akan memiliki hasil yang sama seperti Anda tidak pergi git commit --amend, itu akan membuat komit baru (yaitu: sejarah git setelah tarik git: A-> B-> C-> D )

untuk lebih detail: Bagaimana cara mengubah komit terbaru Anda

watashiSHUN
sumber
2

Opsi lain: ubah nama cabang Anda secara lokal menjadi sesuatu yang baru.

Anda kemudian dapat mendorongnya ke repositori jarak jauh, misalnya jika itu adalah cara Anda menyimpan salinan (cadangan) dan memastikan tidak ada yang hilang.

Anda dapat mengambil cabang jarak jauh untuk memiliki salinan lokal dan memeriksa perbedaan antara (i) apa yang dimiliki jarak jauh (dengan nama cabang lama) dan (ii) apa yang Anda miliki (dengan nama cabang baru), dan memutuskan apa yang harus dilakukan . Karena Anda tidak menyadari perbedaan remote di tempat pertama (maka masalahnya), hanya menggabungkan atau memaksa perubahan di suatu tempat terlalu brutal.

Lihatlah perbedaannya, pilih cabang mana yang ingin Anda kerjakan, ceri pilih perubahan yang Anda inginkan dari cabang lain, atau kembalikan perubahan yang tidak Anda inginkan pada cabang yang Anda miliki dll.

Maka Anda harus berada dalam posisi untuk memutuskan apakah Anda ingin memaksakan versi bersih Anda ke remote, atau menambahkan perubahan baru, atau apa pun.

Ivan
sumber
1

Masalah dengan perintah push adalah repositori lokal dan jauh Anda tidak cocok. JIKA Anda menginisialisasi readme secara default saat membuat repositori baru dari git hub, maka, cabang master secara otomatis dibuat. Namun, ketika Anda mencoba untuk mendorong yang tidak memiliki cabang. Anda tidak dapat mendorong ... Jadi, praktik terbaik adalah membuat repo tanpa inisialisasi readme default.

Suman Astani
sumber
1

Masalah ini biasanya disebabkan oleh membuat file readme.md, yang dihitung sebagai komit, tidak disinkronkan secara lokal pada sistem, dan kurang di belakang kepala, karenanya, itu menunjukkan permintaan git pull. Anda dapat mencoba menghindari file readme dan kemudian mencoba melakukan. Ini berhasil dalam kasus saya.

Aman Mishra
sumber
0

Penyebab lain dari masalah ini (tampaknya tidak begitu umum) ...

Server saya terlambat ~ 12 jam ketika saya melakukan push

Saya mengkonfigurasi NTP di server SYNC jam saya.

Saya mengeksekusi git push baru yang menyebabkan kesalahan yang dibahas dalam posting ini.

X MAN
sumber
0

Jika ada kesempatan git pullmencetak Already up-to-datemaka Anda mungkin ingin memeriksa global git push.defaultparam (In ~/.gitconfig). Setel ke simplejika sudah masuk matching. Jawaban di bawah ini menjelaskan mengapa:

Git - Apa perbedaan antara push.default "matching" dan "simple"

Juga, ada baiknya memeriksa apakah cabang lokal Anda sudah ketinggalan zaman menggunakan git remote show origindan melakukan penarikan jika diperlukan

Vikash Raja Samuel Selvin
sumber
0

menggunakannya git pull https://github.com/username/repository karena Github dan repositori jarak jauh tidak sinkron. Jika Anda pullrepo dan kemudian Pushsemuanya akan disinkronkan dan kesalahan akan hilang.

`

Mahi
sumber
0

git pull sudah cetak up-to-date

larutan:

Anda mungkin dibuat repositori / proyek di remote (server) dan menambahkan beberapa file di sana, Kemudian lagi membuat Folder di git lokal dan diinisialisasi git init- ini adalah kesalahan , Anda tidak boleh membuatgit init di lokal, bukan mengkloning proyek ke lokal Anda menggunakangit clone

lalu tarik

noob_no1
sumber