Mengapa saya tidak bisa mendorong komit kosong?

35
  git commit --amend --allow-empty

kemudian

  git push origin master

si git mengatakan itu

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

Mengapa? Bagaimana cara memperbaikinya?


sumber

Jawaban:

56

Masalahnya bukan bahwa Anda mendorong komit kosong .
Ini adalah tentang mendorong komit yang berbeda (satu dengan SHA1 berbeda) dari yang komit sudah didorong.
Itulah yang git commit --amenddilakukannya: itu memodifikasi komit terakhir, itu tidak membuat yang baru.

Itu berarti Anda mendorong sejarah yang berbeda dari yang lainnya mungkin sudah dikloning.
Jika Anda yakin itu tidak akan menjadi masalah, Anda harus memaksakan dorongan:

git push -f origin master

Haruskah Anda melakukan:

git commit --allow-empty

Anda akan menciptakan baru (kosong) komit, yang Anda bisa mendorong tanpa masalah apapun.

VONC
sumber
5

Jika Anda ingin membuat permintaan tarik di Github. Kamu bisa:

git commit --allow-empty -m "make pull request"

Kemudian buat permintaan tarik tanpa perubahan.

1 badak
sumber
3

Untuk memperjelas jawaban yang diterima, karena saya tidak memiliki reputasi yang cukup untuk berkomentar:

Saat Anda menggunakan

git commit --amend

itu tidak membuat komitmen baru. Namun, itu tidak menambahkannya ke komit saat ini, itu menambahkannya ke induk dari komit saat ini. Secara visual, itu akan terlihat seperti garpu.

  O (old commit)
 /
O-O (amended commit)

Git mengartikan ini sebagai penyimpangan dari remote. Itu sebabnya ia tidak akan membiarkan Anda mendorongnya tanpa memaksa.

Dustin
sumber
0

Pastikan cabang jarak jauh yang Anda coba tekan tidak sedang diperiksa. Saya membuat repositori git pada salah satu server saya sekali dan tidak tahu mengapa saya tidak bisa mendorongnya. Setelah sehari atau lebih pemecahan masalah, saya menemukan bahwa saya tidak bisa mendorong ke repositori (atau cabang yang saya inginkan) ketika sedang diperiksa di repositori server. Jadi, saya hanya membuat cabang baru yang saya checkout ketika saya selesai membuat perubahan pada server, dan kemudian saya bisa mendorong ke server. Ini mungkin bukan masalah Anda, tetapi saya mendapatkan kesalahan yang mirip dengan ini ketika saya mengalami masalah mendorong ke git kosong di server saya.

PRaven
sumber