Saya menghadapi masalah yang saya tidak yakin bagaimana menyelesaikannya.
Saya melakukan rebase terhadap master dari cabang saya:
git rebase master
dan mendapatkan kesalahan berikut
First, rewinding head to replay your work on top of it...
Applying: checkstyled.
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Auto-merging AssetsLoader.java
CONFLICT (content): Merge conflict in AssetsLoader.java
Failed to merge in the changes.
Patch failed at 0001 checkstyled.
Jadi saya pergi ke editor favorit saya, memperbaiki konflik 1 baris, menyimpan file dan melakukan status git dan mendapatkan output berikut:
# Not currently on any branch.
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: PassengerContactHandler.java
#
# Unmerged paths:
# (use "git reset HEAD <file>..." to unstage)
# (use "git add/rm <file>..." as appropriate to mark resolution)
#
# both modified: AssetsLoader.java
#
Saya melakukan git add AssetsLoader.java dan status git dan mendapatkan yang berikut:
# Not currently on any branch.
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: AssetsLoader.java
# modified: PassengerContactHandler.java
#
dan ketika saya melakukan git rebase - lanjutkan saya mendapatkan:
git rebase --continue
You must edit all merge conflicts and then
mark them as resolved using git add
Saya tahu saya bisa melewati patch dan melanjutkan rebase, tapi saya tidak yakin apakah perubahan di PassengerContactHandler.java akan di-rebase ke cabang saya atau tidak.
jadi saya tidak yakin, Bagaimana saya harus melanjutkan?
Sunting: Mungkinkah file dengan konflik yang diselesaikan persis seperti versi aslinya?
Terima kasih banyak, Lucas
Sunting, itu baru saja terjadi pada saya lagi:
Itu baru saja terjadi pada saya lagi,
(307ac0d...)|REBASE)$ git status
# Not currently on any branch.
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: assets/world/level1/Level-1.xml
# modified: George.java
# modified: DefaultPassenger.java
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# mb-art/originalAssets/27dec/
((307ac0d ...) | REBASE) $ git rebase - lanjutkan
You must edit all merge conflicts and then
mark them as resolved using git add
git --version
git version 1.7.1
git status
, bukan? Tidak ada bagian yang hilang di bawahnya?git-rebase
tidak boleh melaporkan bahwa ada konflik yang belum terselesaikan jika tidak ada. Jika Anda dapat mereproduksi masalah dalam kasus uji yang lebih sederhana, akan lebih mudah untuk men-debug, tetapi tetap saja, jika Andagit status
tidak melaporkan konflik saatgit rebase --continue
melakukannya, dan versi Git Anda saat ini, Anda dapat mencoba mengirim email ke Git dev milis di [email protected] dengan informasi diagnostik sebanyak yang Anda bisa.Jawaban:
Hal ini terjadi karena saat memperbaiki konflik, Anda menghapus semua kode dalam tambalan yang diterapkan ke cabang tempat Anda melakukan rebasing. Gunakan
git rebase --skip
untuk melanjutkan.Sedikit lebih detail:
Biasanya, saat memperbaiki konflik selama rebasing, Anda akan mengedit file yang bentrok, menyimpan beberapa atau semua kode dalam tambalan yang saat ini sedang diterapkan ke cabang tempat Anda melakukan rebase. Setelah memperbaiki tambalan dan melakukan
Anda akan mendapatkan baris (biasanya hijau) yang menunjukkan file yang dimodifikasi
git rebase --continue akan berfungsi dengan baik dalam situasi ini.
Namun, terkadang, saat menyelesaikan konflik, Anda menghapus semua yang ada di tambalan baru Anda, hanya menyimpan kode dari cabang tempat Anda menjadi basis. Sekarang ketika Anda menambahkan file, itu akan persis seperti yang Anda coba rebase. Status git tidak akan menunjukkan garis hijau yang menampilkan file yang dimodifikasi. Sekarang, jika Anda melakukannya
git akan mengeluh
Apa yang sebenarnya ingin Anda lakukan dalam situasi ini adalah menggunakan
untuk melewati tambalan. Sebelumnya saya tidak pernah melakukan ini, karena saya selalu tidak yakin apa yang sebenarnya akan dilewati jika saya melakukannya, tidak jelas bagi saya apa arti sebenarnya "lewati tambalan ini". Tetapi jika Anda tidak mendapatkan garis hijau dengan
setelah mengedit file yang konflik, menambahkannya, dan melakukan status git, maka Anda dapat yakin telah menghapus seluruh tambalan, dan Anda dapat menggunakan
untuk melanjutkan.
... tapi jangan mengandalkan ini (dan pastikan untuk tidak menambahkan file sisa di folder repositori Anda)
sumber
git add ...
menjadi sangat menjengkelkan untuk mengetik setelah mengubah tumpukan file dengan jalur yang panjang. Apakah ada yanggit add --all-the-files-i-changed
bisa saya jalankan sebelumnyagit rebase continue
?Sepertinya ada bug di Git 1.7
Berikut artikel bagus tentang cara mengatasi ini .
Pada dasarnya ini harus berhasil, jika Anda melakukan a
setelah menyelesaikan konflik Anda dan kemudian
harus bekerja.
sumber
Saya mendapat peringatan ini ketika saya memiliki file yang tidak diatur. Pastikan Anda tidak memiliki file yang tidak diatur. Jika Anda tidak ingin file tidak bertahap berubah, buang perubahan dengan
sumber
Coba jalankan ini di baris perintah Anda:
Harus memunculkan editor interaktif yang memungkinkan Anda menyelesaikan konflik. Lebih mudah daripada mencoba melakukannya secara manual, dan juga git akan mengenali saat Anda melakukan penggabungan. Juga akan menghindari situasi di mana Anda tidak sepenuhnya bergabung secara tidak sengaja yang dapat terjadi ketika Anda mencoba melakukannya secara manual.
sumber
Setelah menyelesaikan konflik, pastikan file yang diubah ditambahkan ke file bertahap Anda. Ini memecahkan masalah saya.
sumber
Anda melewatkan konflik penggabungan di AssetsLoader.java. Buka dan cari penanda konflik (">>>>", "====", "<<<<<") lalu lakukan git add lagi. Lakukan 'git diff --staged' jika Anda kesulitan menemukannya.
sumber
git diff --staged
mengungkapkan sesuatu yang berguna? Ini menunjukkan perubahan mana yang akan Anda lakukan untuk menyelesaikan konflik penggabungan pada saat ini di rebase. Harus ada "Ups, bukan itu yang ingin saya lakukan untuk menyelesaikan" bit ini di salah satu file.git add
membuat file bahkan dengan penanda konflik di dalamnya. Bagaimanapun, file semacam itu mungkin legal!Saya baru saja mengalami masalah ini, dan sementara saya pikir mungkin ada beberapa penyebab, inilah penyebab saya ...
Saya memiliki hook pra-komit git yang menolak komit dalam kondisi tertentu. Ini baik-baik saja saat melakukan secara manual, karena ini akan menampilkan keluaran dari hook, dan saya dapat memperbaikinya atau memilih untuk mengabaikannya menggunakan commit --no-verifikasi.
Masalahnya adalah ketika rebasing, rebase --continue juga akan memanggil hook (untuk melakukan perubahan terakhir). Tetapi rebase tidak akan menampilkan output hook, itu hanya akan melihat bahwa itu gagal, dan kemudian mengeluarkan kesalahan yang kurang spesifik yang mengatakan 'Anda harus mengedit semua konflik penggabungan dan kemudian menandainya sebagai diselesaikan menggunakan git add'
Untuk memperbaikinya, lakukan tahapan semua perubahan Anda, dan alih-alih melakukan 'git rebase --continue', coba 'git commit'. Jika Anda menderita masalah hook yang sama, Anda harus melihat alasan mengapa gagal.
Menariknya, meskipun git rebase tidak menampilkan keluaran dari git hook, ia menerima --no-verifikasi untuk melewati hook.
sumber
git rebase
menerima--no-verify
opsi. Namun, ini hanya menghilangkanpre-rebase
hook, tetapi opsi ini tidak diterapkan pada panggilan berikutnya kegit commit
.Setelah Anda memperbaiki perubahan Anda, Anda mungkin lupa menjalankan 'git add -A'
sumber
Saya baru saja tersandung pada masalah ini. Saya tidak akan
git rebase --skip
karenagit status
jelas menunjukkan modifikasi stagged, yang ingin saya pertahankan. Meskipun saya memiliki beberapa file tambahan yang datang secara tidak terduga. Saya diselesaikan denganuntuk menghapus modifikasi tak bertanda, lalu
git rebase --continue
berhasil.sumber