Git - “Bozuk” etkileşimli rebase nasıl düzeltilir?


184

Yerel git depomda küçük bir karmaşa yaratmayı başardım. Aşağıdaki talimatları kullanarak kırık bir taahhüdü düzeltmeye çalışıyordum . "Git commit --amend" komutunu çalıştırmadan önce (ve git rebase - interactive sonrasında) Değişikliklerimin yanlış olduğuna karar verdim ve "git reset HEAD --hard" komutunu çalıştırdım. İyi bir fikir değil, size söylüyorum.

Şimdi etkileşimli rebase "sıkışmış" gibi görünüyor. Git, geçerli dalı (| REBASE-m) olarak gösterir. Depomdaki her komut (cd .., ls, git rebase ...) aşağıdaki hatayı verir:

cat: .git / rebase-merge / head-name: Böyle bir dosya veya dizin yok

Git rebase --abort şöyle görünüyor:

$ git rebase --abort
cat: c:/_work/project/src/git/.git/rebase-merge/quiet: No such file or directory
cat: c:/_work/project/src/git/.git/rebase-merge/head-name: No such file or directory
cat: c:/_work/project/src/git/.git/rebase-merge/orig-head: No such file or directory
HEAD is now at 4c737fb Revert "Modified file names"
rm: cannot remove `c:/_work/project/src/git/.git/rebase-merge/done': Permission denied
rm: cannot remove directory `c:/_work/project/src/git/.git/rebase-merge': Directory
not empty
cat: .git/rebase-merge/head-name: No such file or directory

Git Rebase --Continue sonucu:

$ git rebase --continue
cat: c:/_work/project/src/git/.git/rebase-merge/prev_head: No such file or directory
cat: c:/_work/project/src/git/.git/rebase-merge/end: No such file or directory
cat: c:/_work/project/src/git/.git/rebase-merge/msgnum: No such file or directory
cat: c:/_work/project/src/git/.git/rebase-merge/onto: No such file or directory
cat: c:/_work/project/src/git/.git/rebase-merge/quiet: No such file or directory
prev_head must be defined
cat: .git/rebase-merge/head-name: No such file or directory

Herhangi bir fikir? Durumu, iyi düşünülmüş rebase operasyonuma başlamadan önceki durumuna geri döndürmek istiyorum.

Git log --oneline durumu şu şekilde gösterir:

4c737fb Revert "Modified file names"
247ac02 Modified file names
33141e6 Message modifications
10a4a04 Modified db script

Ve bu iyi.

Msysgit v1.7.0.2 kullanıyorum.


60
git rebase --quitbenim için çalıştı
Juan Caicedo

Yanıtlar:


160

Görünüşe göre Git .git/rebase-mergedizini kaldırmaya çalıştı, ancak dizini tamamen kaldıramadı. Bu klasörü kopyalamayı denediniz mi? .git/rebase-applyVarsa klasörü de kopyalayın .


7
Bunu işaret ettiğiniz için teşekkürler. Bilgisayarımı yeniden başlatarak sorunumu çözebildim. Neyin yanlış gittiğinden emin değilim çünkü .git \ rebase-merge klasörüne her erişim bir şekilde "Erişim reddedildi" hatasına neden oldu.
Mikael Koskinen

20
Yeniden başlatma benim için çalışmadı ama git rebase --abort( stackoverflow.com/a/4757777/146044 adresinden ) işe yaradı .
backus

3
Sadece git kabuğu (windows) yeniden başlatmak benim için çalıştı ( git rebase --abortçalışma değildi)
mhand

4
Uyarı bir kelime ... bozuk rebase hatası fark zaman çalışma dizini değişiklikleri 4 saat değerinde vardı. denedi git rebase --abortbenim dengesiz değişiklikleri sildi ... hata yine de kayboldu
George Ananda Eman

117
yeniden başlatılıyor ya git rebase --abortda bana hala hataları verdi. git rebase --quitbenim için çalıştı.
Flávio Rodrigues

199

Buna takıldım. Head-name dosyasını oluşturdum ve sonra onto dosyasını bulamadığını söyleyen başka bir hatayla karşılaştım, bu yüzden bu dosyayı oluşturdum. Sonra '.git / rebase-Apply / onto' okunamadı diyerek başka bir hata var : Böyle bir dosya veya dizin yok.

Bu yüzden yeniden baslamak için git belgelerine baktım ve başka bir komut buldum:

git rebase --quit

Bu, beni hiçbir değişiklik yapmadan şubeme geri getirdi ve yeniden tabanımı yeniden başlatabilirim, yeni gibi.


51
git rebase --quitöylemiydi!
Steven Shaw

5
--quitçalıştı. --abortçünkü
Rebase

1
Rebase ile ilgili benzer bir hata aldım, sadece farklı hata mesajıyla. Denenmiş: $ git rebase --abortÇıktı: error: could not read '.git/rebase-apply/head-name': No such file or directorySon olarak, bu çözüm sorunumu giderir:git rebase --quit
aff

Upvoted. git rebase --quitbeni kesinlikle kurtardı. Açıklandığı gibi aynı belirtiler, ancak benimki bir git pull --rebasesebepten dolayı başarısız oldu. Not Autostash etkin (git sürüm 2.27.0.windows.1) vardı ve aynı anda VS2019 çalışan (o repo işaret) vardı - bunların bazı kombinasyonu berbat şüpheli.
ErrCode

90

Zombi vim.exe işlemi nedeniyle benzer bir sorun vardı. Görev Yöneticisi'nde öldürmek, ardından git rebase --abortdüzeltmek.


bu da benim sorunumdu. Sysinternals handlekomutunu kullandım ve bir işlemin (sh.exe) dosyanın kilitli olduğunu gördüm. pskill <pid>Bunu kullanmak benim için düzeltti.
Paul Oliver

Aynı sorunu yaşadım, ama benim için Yüce Metin ile.
Toivo Säwén

35

Cevabınız için @Laura Slocum'a teşekkürler

Yeniden basarken işleri berbat ettim ve bir

 error: could not read orig-head

bu da yeniden temellendirmeyi bitirmemi engelledi.

Müstakil HEAD tam olarak doğru rebase istenilen durumu içeriyor gibi görünüyor, bu yüzden koştum

rebase --quit

ve daha sonra ayrılan kafaya bağlamak için yeni bir geçici dal kontrol ettim.

Yeniden temellendirmek istediğim dal ile karşılaştırarak, yeni geçici dalın tam olarak ulaşmak istediğim durumda olduğunu görebiliyorum. Teşekkürler


7

Eclipse'de de aynı problem vardı. Rebase => Eclipse'den iptal edilemedi.

Git Bash'ten git rebase --abort çalıştırılıyor Benim için çalıştı.


7

Windows'ta, makineyi istemiyorsanız veya yeniden başlatamıyorsanız, aşağıya bakın.

İşlem Gezgini'ni kurun: https://technet.microsoft.com/en-us/sysinternals/bb896653.aspx

Process Explorer'da, Bul> Dosya tanıtıcısı veya DLL ...

Hatada belirtilen dosya adını yazın (hatam için 'git-rebase-todo' idi ancak yukarıdaki soruda 'tamamlandı').

İşlem Gezgini dosya üzerinde bir kilit tutan işlemi vurgulayacaktır (benim için 'grep' idi).

Süreci öldürün ve git eylemini standart şekilde iptal edebilirsiniz.


5

Bu adda bir dosya oluşturun:

touch .git/rebase-merge/head-name

ve kullanmaktan çok git rebase


3

Benim durumumda eighter git rebase --abortve git rebase --continuefırlatıyordu:

hata: '.git / rebase-Apply / head-name' okunamadı: Böyle bir dosya veya dizin yok

Bu .git\rebase-applydizini elle kaldırarak düzeltmeyi başardım: dizin.


2

Kullanıyorum git version 2.19.2.windows.1.

benim için .git/rebase-apply/işe yarayan tek şey dizini kaldırmak ve bir git reset --hard.


1

Benim durumumda, ilgili Git projesinde SmartGit'in Günlüğünü ve ilgili proje dizininde Total Commander'ı açmış olmamdı. Her ikisini de kapattığımda sorunsuz bir şekilde yeniden pazarlamayı başardım.

Ne kadar çok düşünürsem, Total Commander'dan o kadar şüpheliyim, yani Windows git rebase ile bir şey yapmaya çalıştığı açık bir dizine sahip.

Dostça tavsiye: Bir şeyi düzeltmeye çalıştığınızda, her seferinde bir değişiklik yapın. ;)


1

Yukarıdaki tüm adımları denedim ama hiçbir şey benim için çalıştı. Son olarak, bilgisayarı yeniden başlatmak bu sorun için çalıştı: D


1

Windows'ta SublimeText 3 ile sorun, yalnızca etkileşimli kesinleştirme sürümü için kullanılan Sublime pencereleri kapatılarak giderildi.


0

X sayısını tamamlama konusunda tatmin edici bir şekilde tamamladıktan sonra, son komut olmalıdır git rebase --continue. Bu işlemi tamamlar ve rebase modundan çıkar.


0

Ben de aynı problemi yaşadım. Diğer yazılarda önerildiği gibi süreç gezgini kullandım (bu yazıyı bulamıyorum) ve hangi işlemin dosya üzerinde bir kilit olduğunu ve onu öldürdüğünü anladım. daha sonra --continue veya --abort'u ihtiyaca göre yürütün


0

Benim durumumda tüm bu seçenekleri test ettikten ve hala denedikten sudo git rebase --abortsonra denedim ve her şeyi yaptı


Bunu gerçek bir rebase ortasında yapıyorsanız dikkatli olun. Değişikliklerimi yeni kaybettim: '(
Freeman L

"Bozuk" olarak kabul edildi, sonra yeniden başlangıç ​​ile başlayın
Dani.Rangelov

0

yeniden başlatma dışında her şeyi denedim, benim için işe yarayan şey rm -fr .git/REBASE_HEAD


0

Durumun altına düşerseniz ve rebase artık çalışmazsa,

$ git status
rebase in progress; onto (null)
You are currently rebasing.
  (all conflicts fixed: run "git rebase --continue")

Sonra ilk çalıştırma,

$ git rebase -quit

Ve sonra önceki durumu reflog'dan geri yükle,

$ git reflog
97f7c6f (HEAD, origin/master, origin/HEAD) HEAD@{0}: pull --rebase: checkout 97f7c6f292d995b2925c2ea036bb4823a856e1aa
4035795 (master) HEAD@{1}: commit (amend): Adding 2nd commit
d16be84 HEAD@{2}: commit (amend): Adding 2nd commit
8577ca8 HEAD@{3}: commit: Adding 2nd commit
3d2088d HEAD@{4}: reset: moving to head~
52eec4a HEAD@{5}: commit: Adding initial commit

kullanarak,

$ git checkout HEAD@{1} #or
$ git checkout master #or
$ git checkout 4035795 #or

-3

Tutulmada git kullanıyorum ve aynı sorunu yaşıyordum.

Sonunda "Rebase ..." menü girişinin geçici olarak bir alt menüye dönüştürüldüğünü gördüm.

Takım-> Rebase -> İptal

Benim için çalıştı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.