! [ditolak] master -> master (ambil dulu)


106

Adakah cara yang baik untuk menjelaskan cara menyelesaikan " ! [rejected] master -> master (fetch first)'" di Git?

Ketika saya menggunakan perintah $ git push origin masterini, pesan kesalahan ditampilkan.

! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'git@github.com:zapnaa/abcappp.git'

Jawaban:


137

Jawabannya ada, git memberi tahu Anda untuk mengambil dulu.

Mungkin orang lain telah mendorong untuk menguasai, dan komitmen Anda tertinggal. Oleh karena itu Anda harus mengambil, menggabungkan set perubahan, dan kemudian Anda akan dapat mendorong lagi.

Jika tidak (atau lebih buruk lagi, jika Anda memaksanya dengan menggunakan --forceopsi), Anda dapat mengacaukan riwayat komit.

EDIT: Saya menjelaskan lebih detail tentang poin terakhir, karena seorang pria di sini baru saja memberikan Saran Sangat Buruk untuk menggunakan --forceopsi.

Karena git adalah DVCS, idealnya banyak pengembang lain yang mengerjakan proyek yang sama dengan Anda, menggunakan repositori yang sama (atau percabangannya). Jika Anda menimpa secara paksa dengan set perubahan Anda, repositori Anda akan tidak cocok dengan orang lain, karena "Anda menulis ulang riwayat". Anda akan membuat orang lain tidak senang dan repositori akan menderita. Mungkin anak kucing di dunia akan menangis juga.

TL; DR

  1. Jika Anda ingin menyelesaikannya, ambil dulu (lalu gabungkan).
  2. Jika Anda ingin meretas, gunakan --forceopsi.

Tapi kau meminta yang pertama. Gunakan 1) selalu, meskipun Anda akan selalu menggunakan git sendiri, karena ini adalah praktik yang baik.


5
Tidak dapat mengambil, menghapus perubahan penting dalam file lokal?
Leonardo Castro

2
Itu tidak berubah setelah pengambilan
dhein

@dhein seperti yang saya tulis, pengambilan harus diikuti oleh penggabungan - intinya adalah Anda harus "menyelaraskan" pohon lokal dengan pohon jarak jauh (karenanya dengan penggabungan) --tapi terima kasih, saya menulisnya di TL; DR juga
linuxbandit

93

mencoba:

git fetch origin master
git merge origin master

Setelah menulis kode ini, saya menerima kesalahan lain: (non-fast-forward)

Saya menulis kode ini:

git fetch origin master:tmp
git rebase tmp
git push origin HEAD:master
git branch -D tmp

Dan menyelesaikan masalah saya


Sama untuk ku. Itu memecahkan masalah saya. Ada beberapa peringatan. Saya mengacaukan sub repositori, tetapi menyelesaikannya dengan ini: stackoverflow.com/questions/19584255/…
M. Beausoleil

1
@Aurelio A Perintah penggabungan Anda salah, seharusnya begitu git merge master.
mike

Mengapa kita perlu menggunakan git branch -D tmp?
Милош Вељковић

28

Anda harus menggunakan git pull, perintah itu melakukan a git fetchdan selanjutnya melakukan git merge.

Jika Anda menggunakan git push origin master --forceperintah, Anda mungkin mengalami masalah di masa mendatang.


1
Apakah benar bahwa Anda hanya boleh menggunakan --force jika Anda satu-satunya dalam proyek ini dan Anda merasa frustrasi saat mencoba melakukan dorongan pertama Anda?
chrips

20

pull selalu merupakan pendekatan yang tepat tetapi satu pengecualian mungkin terjadi saat Anda mencoba mengonversi sistem file none-Git ke repositori Github. Di sana Anda harus memaksakan commit pertama.

git init
git add README.md
git add .
git commit -m "first commit"
git remote add origin https://github.com/userName/repoName.git
git push --force origin master

bekerja untuk saya, saya memulai lagi proyek baru (repo yang sama) dan saya ingin menggantinya.
ucotta

18

Coba perintah git ini

git push origin master --force

atau kekurangan tenaga -f

git push origin master -f


2
Ini mengesampingkan pembatasan git push. Tidak direkomendasikan untuk kerja tim. Dari dokumentasi git push: Jika ada orang lain yang membuat di atas histori asli Anda saat Anda melakukan rebasing, ujung cabang di remote dapat melanjutkan dengan commitnya, dan secara membabi buta mendorong dengan --force akan kehilangan pekerjaannya .
Casey

10

Seperti yang dinyatakan dalam pesan Kesalahan, Anda harus "mengambil dulu". Ini berhasil untuk saya. Gunakan perintah:

  1. git fetch origin master

Kemudian ikuti langkah-langkah berikut untuk menggabungkan:

  1. git pull origin master
  2. git add .
  3. git commit -m 'your commit message'
  4. git push origin master

4

Silakan coba perintah ini untuk menyelesaikannya -

git push origin master --force

Atau

 git push origin master -f


3

Ikuti langkah-langkah yang diberikan di bawah ini karena saya juga memiliki masalah yang sama:

$ git pull origin master --allow-unrelated-histories 

(Untuk melihat apakah cabang lokal dapat dengan mudah digabungkan dengan yang jauh)

$ git push -u origin master 

(Sekarang dorong seluruh konten repositori git lokal ke repositori online Anda)


2

Sepertinya ada orang lain (mis. Kolega Anda) telah memasukkan komit ke origin/masteryang tidak ada di mastercabang lokal Anda , dan Anda mencoba mendorong beberapa komit dari cabang lokal Anda ke server. Dalam 99% kasus, dengan asumsi Anda tidak ingin menghapus pekerjaan mereka origin, Anda memiliki dua opsi:

2) Gabungkan perubahan mereka ke cabang lokal Anda, lalu dorong hasil gabungan. git checkout master git pull # resolve conflicts here git push

(Perhatikan bahwa git pullpada dasarnya hanya a git fetchdan a git mergedalam kasus ini.)

1) Ratakan basis cabang lokal Anda, sehingga sepertinya kolega Anda membuat komitmennya terlebih dahulu, lalu Anda membuat komitmen. Ini membuat riwayat komit bagus dan linier - dan menghindari "komit gabungan". Namun, jika Anda memiliki konflik dengan perubahan kolega Anda, Anda mungkin harus menyelesaikan konflik tersebut untuk setiap komitmen Anda (bukan hanya sekali) dalam kasus terburuk. Pada dasarnya ini lebih baik untuk orang lain tetapi lebih banyak usaha untuk Anda. git pull --rebase # resolve conflicts here git push

(Perhatikan bahwa git pull --rebasepada dasarnya adalah a git fetchdan a git rebase origin/master.)



1

Kesalahan Anda mungkin karena cabang gabungan.
Ikuti saja ini:

langkah 1: git pull origin master(jika Anda mendapatkan pesan apa pun, abaikan)
langkah 2: git add .
langkah 3: git commit -m 'your commit message'
langkah 4:git push origin master


1

Pertama, Anda harus menggunakan git pull, lalu perintah do a git fetchdan selanjutnya lakukan git merge.

Jika Anda menggunakan git push origin master --forceperintah, Anda mungkin mengalami masalah di masa mendatang.


1

Saya mengatasi ini dengan memeriksa cabang baru seperti ini:

# git checkout -b newbranch <SHA of master>

# git branch
* newbranch
  master

# git push -u <repo_url_alias> newbranch

Anda memiliki 2 cabang: Master dan cabang baru, yang dapat Anda gabungkan nanti.


0

Anda hanya perlu menyebutkan nama cabang Anda bersama dengan nama jarak jauh Anda.

git fetch origin
git merge origin/master

0

Alasan hal itu terjadi dalam kasus saya adalah saat membuat tautan perwakilan GitHub, saya menginisialisasinya dengan file README

Saat membuat Git remote jangan menginisialisasi dengan file README jika tidak maka akan menampilkan err

Jangan lakukan itu & itu pasti akan berfungsi dengan baik Alih-alih menginisialisasi dengan file readme jika Anda ingin setelah mendorong ke cabang master




0

masukkan deskripsi gambar di sini

! [ditolak] master -> master (ambil dulu) kesalahan: gagal mendorong beberapa referensi ke 'git@github.com:'

masukkan deskripsi gambar di sini

Berhasil menyelesaikan masalah menggunakan perintah --force. jadi, Anda harus menggunakan
git push origin master --force



-1

ini bekerja untuk saya

  1. git init

  2. git add --all

3. git commit -m "name"

4. git push origin master - force


-1

Ini berhasil untuk saya:

$ git add .
$ git commit -m "commit"
$ git push origin master --force

-1

Masalah Terselesaikan

Masalah yang saya miliki

! [rejected]        master -> master (non-fast-forward) error: failed to push some refs to 'https://github.com/repo_name/repo-hint: Updates were rejected because the tip of your current branch is behind hint: its remote counterpart. Integrate the remote changes (e.g.hint: 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details.

Saya juga punya masalah yang sama. Masalahnya adalah Anda commitsdi repositori lain tidak berhasil pushedsehingga Anda perlu menjalankan perintah berikut:

  1. git fetch origin master

    keluaran: From https://github.com/username/repo-name * branch master -> FETCH_HEAD

  2. git merge origin master

    keluaran: Merge made by the 'recursive' strategy. repo-name/ReadMe.md | 1 - 1 file changed, 1 deletion(-)

  3. git push

    keluaran: Enumerating objects: 8, done. Counting objects: 100% (8/8), done. Delta compression using up to 8 threads Compressing objects: 100% (6/6), done. Writing objects: 100% (6/6), 1.00 KiB | 1.00 MiB/s, done. Total 6 (delta 2), reused 0 (delta 0) remote: Resolving deltas: 100% (2/2), completed with 1 local object. To https://github.com/user_name/repo-name.git 0852d5vf..70v56d9 master -> master

Terima kasih banyak


-1

Saya pikir itu karena koneksi tetapi saya menggunakan ini:

git push - force origin master


--forceakan mengacaukan gitriwayat komit itu tidak akan baik untuk menggunakannya.
Chandan

-2

Sederhana gunakan perintah ini:

git push -f origin master

dan itu akan menyelesaikan pekerjaan Anda

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.