Saya memiliki cabang git (disebut v4), yang dibuat dari master kemarin. Ada beberapa perubahan untuk master, yang saya ingin masuk ke v4. Jadi, di v4, saya mencoba melakukan rebase dari master, dan satu file terus mengacaukan: file teks satu baris, yang berisi nomor versi. File ini app/views/common/version.txt
, yang sebelum rebasing berisi teks ini:
v1.4-alpha-02
Inilah yang saya lakukan:
> git rebase master
First, rewinding head to replay your work on top of it...
Applying: new version, new branch
error: patch failed: app/views/common/version.txt:1
error: app/views/common/version.txt: patch does not apply
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Auto-merging app/views/common/version.txt
CONFLICT (content): Merge conflict in app/views/common/version.txt
Failed to merge in the changes.
Patch failed at 0001 new version, new branch
When you have resolved this problem run "git rebase --continue".
If you would prefer to skip this patch, instead run "git rebase --skip".
To restore the original branch and stop rebasing run "git rebase --abort".
The version.txt
sekarang terlihat seperti ini:
<<<<<<< HEAD:app/views/common/version.txt
v1.4-alpha-02
=======
v1.4-alpha-01
>>>>>>> new version, new branch:app/views/common/version.txt
Jadi, saya merapikannya dan terlihat seperti ini sekarang:
v1.4-alpha-02
dan kemudian saya mencoba untuk melanjutkan: pada awalnya saya mencoba melakukan:
> git commit -a -m "merged"
# Not currently on any branch.
nothing to commit (working directory clean)
Tidak beruntung disana. Jadi, saya mencoba menambahkan file:
git add app/views/common/version.txt
Tidak ada respon. Tidak ada berita adalah kabar baik, saya rasa. Jadi, saya mencoba melanjutkan:
> git rebase --continue
Applying: new version, new branch
No changes - did you forget to use 'git add'?
When you have resolved this problem run "git rebase --continue".
If you would prefer to skip this patch, instead run "git rebase --skip".
To restore the original branch and stop rebasing run "git rebase --abort".
Pada titik inilah, setelah berputar-putar dengan ini, saya membenturkan kepala saya dari meja.
Apa yang terjadi di sini? Apa yang saya lakukan salah? Adakah yang bisa meluruskan saya?
EDIT - untuk unutbu
Saya mengubah file seperti yang Anda sarankan dan mendapatkan kesalahan yang sama:
> git rebase master
First, rewinding head to replay your work on top of it...
Applying: new version, new branch
error: patch failed: app/views/common/version.txt:1
error: app/views/common/version.txt: patch does not apply
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Auto-merging app/views/common/version.txt
CONFLICT (content): Merge conflict in app/views/common/version.txt
Failed to merge in the changes.
Patch failed at 0001 new version, new branch
When you have resolved this problem run "git rebase --continue".
If you would prefer to skip this patch, instead run "git rebase --skip".
To restore the original branch and stop rebasing run "git rebase --abort".
git rebase master
dan membiarkannya gagal ; 2) kemudian Anda mengeditversion.txt
dan membuatnya sebagaimana mestinya pada titik itu, dan menyimpan hasil edit; 3) lalu Andagit add .../version.txt
; 4) maka Anda lakukangit rebase --continue
( bukan 'berkomitmen' )! Jikarebase --continue
berhasil di sini, itu sudah dilakukan (tidak perlu digit commit
sini!) - jadi yang perlu dilakukan hanyalahgit push
(jika Anda menggunakan repo jarak jauh). Semoga ini bisa membantu, jika saya melakukannya dengan benar:)
- selamat!Jawaban:
Saya mengalami masalah serupa dengan rebase. Masalah saya disebabkan karena salah satu komit saya hanya mengubah file, dan ketika menyelesaikan, saya membuang perubahan yang diperkenalkan dalam komit ini. Saya dapat memecahkan masalah saya dengan melewatkan commit (
git rebase --skip
) yang sesuai .Anda dapat mereproduksi masalah ini dalam repositori pengujian. Pertama buat repositori.
Kemudian lakukan konten asli
version.txt
dalam master.Buat
v4
cabang dan ubah kontenversion.txt
.Kembali ke
master
dan ubah kontenversion.txt
sehingga akan ada konflik selama rebase.Beralih kembali ke
v4
cabang dan coba rebase. Gagal dengan konflikversion.txt
seperti yang direncanakan.Kami menyelesaikan konflik dengan memilih
master
konten dariversion.txt
. Kami menambahkan file dan mencoba melanjutkan rebase kami.Gagal! Mari kita lihat perubahan apa yang
git
ada di repositori kita.Ah ah, tidak ada perubahan. Jika Anda membaca secara rinci pesan kesalahan sebelumnya,
git
beri tahu kami tentang ini dan direkomendasikan untuk digunakangit rebase --skip
. Dia mengatakan kepada kami, "Jika tidak ada yang tersisa ke tahap, kemungkinan besar sesuatu yang lain telah memperkenalkan perubahan yang sama; Anda mungkin ingin melewati tambalan ini." Jadi kita melewatkan komit dan rebase berhasil.Perhatian : Harap dicatat bahwa
git rebase --skip
akan benar-benar membatalkan komit yanggit
mencoba melakukan rebase. Dalam kasus kami, ini seharusnya baik-baik saja karenagit
mengeluh ini adalah komit kosong. Jika Anda merasa kehilangan perubahan setelah rebase selesai, Anda dapat menggunakangit reflog
untuk mendapatkan ID komit dari repositori Anda sebelum rebase, dan gunakangit reset --hard
untuk mengembalikan depot Anda ke status itu (ini adalah operasi destruktif lainnya).sumber
git rebase --skip
, Anda hanya melewatkan satu komit. Saya biasanya mengeluarkangit status
sebelum melewatkan komit untuk melihat apakah saya dalam situasi ini.rebase --skip
:).git reflog purge
ataugit reflog delete
Anda masih bisa mendapatkan perubahan Anda kembali dengan menggunakangit reflog
. Cobalah untuk memeriksa komit berbeda yang direferensikan di sana, salah satunya harus status pohon Anda sebelum Anda memulai keseluruhangit rebase
.Mengutip dari sini: http://wholemeal.co.nz/node/9
sumber
Pesan kesalahan itu adalah hasil dari Anda
git commit -a -m "merged"
. Jika Anda baru saja memperbaiki file, lalu jalankangit add <file>
, dangit rebase --continue
, seharusnya berfungsi dengan baik.git rebase --continue
mencoba melakukan komit, tetapi menemukan bahwa tidak ada perubahan tertunda untuk dilakukan (karena Anda sudah berkomitmen).sumber
git add <file>
tidak akan menyelesaikan masalah.git rebase --continue
masih melaporkanNo changes - did you forget to use 'git add'?
Ubah app / views / common / version.txt menjadi
Pada titik ini di rebase, ingatlah bahwa Anda sedang menyelesaikan konflik penggabungan untuk menunjukkan perkembangan cabang non-master .
Jadi, di rebasing dari
untuk
konflik yang Anda selesaikan adalah cara membuat A * pada cabang topik.
Jadi setelah melakukan
git rebase --abort
, perintahnya harussumber
Perilaku yang Anda lihat bukanlah yang saya harapkan dari sebuah rebase tipikal hanya dengan konflik ini. Pertimbangkan untuk menggunakan cabang terpisah untuk melakukan rebase ini (terutama jika Anda telah mendorong komit dari jarak jauh sehingga Anda melakukan percepatan). Juga,
git mergetool
dapat membantu untuk menyelesaikan konflik dan mengingat untuk mengeluarkan agit add
.Dalam contoh minimal ini, rebase berfungsi seperti yang diharapkan. Dapatkah Anda memberikan contoh yang menunjukkan perilaku yang Anda lihat?
sumber
Berikut beberapa ide:
rm -rf .git/rebase-apply
sumber