Saya baru di Git, jadi silakan memperlakukan saya seperti seorang pemula.
Alur kerja kami seperti itu. Kami memiliki cabang dev
yang bisa saya hubungi origin/dev
. Ketika kami melakukan perubahan, kami membuat cabang dari dev:
git checkout -b FixForBug asal / dev
Sekarang saya memiliki cabang bernama FixForBug
yang melacak (saya pikir itu kata yang tepat) origin/dev
. Jadi, jika saya melakukan git pull
itu akan membawa perubahan baru origin/dev
yang bagus. Sekarang, ketika saya selesai dengan perbaikan saya, saya mendorong ke cabang jauh yang disebut hal yang sama.
Pertama saya tarik ke bawah setiap perubahan dari origin/dev
dan melakukan rebase:
git pull --rebase
Lalu saya mendorong perubahan ke cabang jauh dengan nama yang sama:
git dorong asal FixForBug
Sekarang, ada cabang di server jarak jauh dan saya dapat membuat permintaan tarik agar perubahan disetujui dan bergabung kembali ke cabang dev. Saya tidak pernah mendorong apa pun pada origin/dev
diri saya sendiri. Saya menduga ini adalah alur kerja yang cukup umum.
Pertama kali saya melakukan git push
, itu berfungsi dengan baik dan membuat cabang jarak jauh. Namun, jika saya mendorong kedua kalinya (katakanlah saat peninjauan kode, seseorang menunjukkan masalah), saya mendapatkan kesalahan berikut:
kesalahan: gagal mendorong beberapa referensi ke ' https://github.limeade.info/Limeade/product.git ' petunjuk: Pembaruan ditolak karena ujung cabang Anda saat ini berada di belakang petunjuk: mitra jarak jauh. Integrasikan perubahan jarak jauh (mis. Petunjuk: 'git pull ...') sebelum mendorong lagi. petunjuk: Lihat 'Catatan tentang maju cepat' di 'git push --help' untuk detailnya.
Namun, jika saya melakukan git status
itu mengatakan saya di depan origin/dev
oleh 1 komit (yang masuk akal) dan jika saya mengikuti petunjuk dan lari git pull
, katanya semuanya up to date. Saya pikir ini karena saya mendorong ke cabang yang berbeda dari cabang hulu saya. Saya dapat memperbaiki masalah ini dengan menjalankan:
git push -f origin FixForBug
Dalam hal ini, itu akan mendorong perubahan ke cabang jarak jauh, mengatakan (pembaruan paksa) dan semuanya tampak baik di cabang jarak jauh.
Pertanyaan saya:
Mengapa -f
diperlukan dalam skenario ini? Biasanya ketika Anda memaksa sesuatu, itu karena Anda melakukan sesuatu yang salah atau setidaknya bertentangan dengan praktik standar. Apakah saya boleh melakukan ini, atau akankah itu mengacaukan sesuatu di cabang terpencil atau membuat kerumitan bagi siapa pun yang akhirnya harus menggabungkan barang-barang saya menjadi dev?
git pull origin FixForBug
sebelum saya mendorong itu? Ok itu masuk akal. Jangan ragu untuk menambahkan sebagai jawaban!Jawaban:
The
-f
adalah benar-benar diperlukan karena rebase. Setiap kali Anda melakukan rebase, Anda perlu melakukan push force karena cabang jarak jauh tidak dapat diteruskan dengan cepat ke komit Anda. Anda selalu ingin memastikan bahwa Anda melakukan tarikan sebelum mendorong, tetapi jika Anda tidak suka memaksa push to master atau dev dalam hal ini, Anda dapat membuat cabang baru untuk mendorong dan kemudian menggabungkan atau membuat PR .sumber
Untuk memastikan FixForBug cabang lokal Anda tidak mendahului FixForBug cabang jarak jauh, tarik dan gabungkan perubahan sebelum mendorong.
sumber
Jika Anda ingin menghindari harus menggunakan
-f
, maka Anda bisa menggunakan sajadari pada
Non-rebase akan mengambil perubahan dari
origin/dev
dan menggabungkannya keFixForBug
cabang Anda . Kemudian, Anda akan bisa berlaritanpa menggunakan
-f
.sumber
-f
karena Anda mengganti komit (s) pada repositori hulu dengan yang berbeda yang memiliki riwayat (rebased) yang berbeda. Jika Anda menggunakan produk seperti Gerrit maka itu mendukung semacam ini alur kerja tinjauan ulang kode tanpa harus menggunakan-f
saat mendorong. Kami menggunakan Gerrit di tempat kerja dengan cara ini dan itu bekerja dengan sangat baik.the tip of your current branch is behind its remote counterpart
berarti bahwa ada perubahan pada cabang jarak jauh yang tidak Anda miliki secara lokal. dan git memberitahu Anda mengimpor perubahan baru dariREMOTE
dan menggabungkannya dengan kode Anda dan kemudianpush
ke jarak jauh.Anda dapat menggunakan perintah ini untuk memaksa perubahan ke server dengan repo lokal ().
dengan
-f
tag Anda akan menimpaRemote Brach code
dengan kode Anda.sumber
Perintah yang saya gunakan dengan Azure DevOps ketika saya menemukan pesan "pembaruan ditolak karena ujung cabang Anda saat ini ada di belakang" adalah perintah ini:
git tarik master asal
(atau dapat mulai dengan folder baru dan melakukan Kloning) ..
Jawaban ini tidak menjawab pertanyaan yang diajukan, khususnya, Keif telah menjawab ini di atas, tetapi menjawab pertanyaan judul / judul teks dan ini akan menjadi pertanyaan umum bagi pengguna Azure DevOps.
Saya mencatat komentar: "Anda selalu ingin memastikan bahwa Anda melakukan tarikan sebelum mendorong" dalam jawaban dari Keif di atas!
Saya juga menggunakan alat Git Gui selain alat baris perintah Git.
(Saya tidak yakin bagaimana melakukan yang setara dengan perintah baris perintah "git pull origin master" di dalam Git Gui jadi saya kembali ke baris perintah untuk melakukan ini).
Diagram yang menunjukkan berbagai perintah git untuk berbagai tindakan yang mungkin ingin Anda lakukan adalah yang ini:
sumber
Ini baru saja terjadi pada saya.
Solusi: Tarik cabang saya sendiri sehingga saya mendapatkan komit ekstra. Kemudian dorong kembali ke cabang jarak jauh saya.
apa yang saya lakukan di cabang saya adalah:
sumber
Inilah bagaimana saya memecahkan masalah saya
Anggaplah cabang hulu adalah cabang yang Anda gunakan untuk bercabang dan asal adalah repo Anda dan Anda ingin mengirim MR / PR ke cabang hulu.
Anda sudah mengatakan sekitar 4 komit dan Anda mulai
Updates were rejected because the tip of your current branch is behind.
Inilah yang saya lakukan
Pertama, remas semua 4 komitmen Anda
Anda akan mendapatkan daftar commit yang
pick
tertulis di dalamnya. (dibuka di editor)contoh
untuk
Setelah itu, Anda dapat menyimpan komit gabungan Anda
Lanjut
Anda harus menyimpan komit Anda
Begini caranya
sekarang rebase dengan cabang hulu Anda
Sekarang pop komit simpanan Anda
komit perubahan ini dan dorong mereka
sumber
Itu pasti karena komitmen ada di depan dorongan Anda saat ini.
1) git pull asal "nama cabang yang ingin Anda tekan"
2) git rebase
jika git rebase berhasil, maka bagus. Jika tidak, Anda telah menyelesaikan semua konflik penggabungan secara lokal dan tetap melanjutkannya hingga rebase dengan remote berhasil.
3) git rebase --continue
sumber
Saya mengalami masalah ini ketika mencoba untuk mendorong setelah rebase melalui Visual Studio Code, masalah saya diselesaikan dengan hanya menyalin perintah dari jendela keluaran git dan menjalankannya dari jendela terminal di Visual Studio Code.
Dalam kasus saya, perintahnya adalah seperti:
git push origin NameOfMyBranch:NameOfMyBranch
sumber
Anda harus menambahkan file baru di komit Anda yang belum didorong. Periksa file dan dorong file itu lagi dan coba tarik / dorong itu akan berhasil. Ini bekerja untuk saya ..
sumber