힘내- "손상된"대화식 rebase를 고치는 방법?


184

로컬 git 저장소에 약간의 혼란을 만들었습니다. 다음 지침 을 사용하여 깨진 커밋을 수정하려고했습니다 . "git commit --amend"을 실행하기 전에 (git rebase --interactive 후) 변경 사항이 잘못되었다고 판단하여 "git reset HEAD --hard"를 실행했습니다. 좋은 생각은 아닙니다.

이제 대화식 리베이스가 "고착"된 것 같습니다. 힘내 현재 분기를 (| REBASE-m)으로 표시합니다. 내 저장소 내의 모든 명령 (cd .., ls, git rebase ...)에는 다음 오류가 발생합니다.

cat : .git / rebase-merge / head-name : 해당 파일 또는 디렉토리가 없습니다.

git rebase --abort의 모습은 다음과 같습니다.

$ 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의 결과는 다음과 같습니다.

$ 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

어떤 아이디어? 잘 생각한 리베이스 작업을 시작하기 전의 상태로 상황을 다시 설정하고 싶습니다.

git log --oneline이 상황을 보여주는 방법은 다음과 같습니다.

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

그리고 이것은 괜찮습니다.

msysgit v1.7.0.2를 사용하고 있습니다.


60
git rebase --quit나를 위해 일한
후안 카이 세도

답변:


160

Git이 .git/rebase-merge디렉토리 를 제거하려고했지만 완전히 제거 할 수없는 것 같습니다 . 해당 폴더를 복사 해 보셨습니까? .git/rebase-apply폴더가 있으면 복사하십시오 .


7
지적 해 주셔서 감사합니다. 컴퓨터를 다시 시작하여 문제를 해결할 수있었습니다. .git \ rebase-merge 폴더에 대한 모든 액세스로 인해 "액세스 거부"오류가 발생하여 무엇이 잘못되었는지 잘 모르겠습니다.
Mikael Koskinen

20
재부팅이 나를 위해 작동하지 않았지만 git rebase --abort(에서 stackoverflow.com/a/4757777/146044 ) 했다 작품.
backus

3
git shell (windows)을 다시 시작하면 나를 위해 일했습니다 ( git rebase --abort작동하지 않았습니다)
mhand

4
경고 메시지 ... 손상된 rebase 오류를 발견했을 때 작업 디렉토리에서 4 시간 분량의 변경 사항이있었습니다. git rebase --abort그것을 시도했다 내 비 무대 변경을 닦아 ... 오류는 사라졌다
조지 아난다 Eman

117
재부팅하거나 git rebase --abort여전히 오류가 발생했습니다. git rebase --quit나를 위해 일했다.
Flávio Rodrigues

199

나는 이것에 갇혀있다. 헤드 이름 파일을 만든 다음 파일을 찾을 수 없다는 다른 오류가 발생하여 해당 파일을 만들었습니다. 그런 다음 '.git / rebase-apply / onto'를 읽을 수 없다는 또 다른 오류가 발생했습니다. 해당 파일이나 디렉토리가 없습니다.

그래서 rebasing 에 대한 자식 문서 를 보고 다른 명령을 찾았습니다.

git rebase --quit

이로 인해 변경 사항이없는 지점으로 다시 돌아 왔고 새베이스처럼 다시베이스를 시작할 수있었습니다.


51
git rebase --quit그 것이었다!
Steven Shaw

5
--quit일했다. --abortREBASE를 통해 반 방법을 취소하지 않았기 때문에
Kalob Taulien

1
다른 오류 메시지와 함께 비슷한 rebase 관련 오류가 발생했습니다. 시도 : $ git rebase --abort출력 : error: could not read '.git/rebase-apply/head-name': No such file or directory마지막 으로이 솔루션은 내 문제를 해결합니다.git rebase --quit
aff

공감. git rebase --quit절대적으로 나를 구했다. 설명 된 것과 같은 증상이지만 내 시도 git pull --rebase는 어떤 이유로 실패했습니다. 참고 autostash를 활성화하고 (git version 2.27.0.windows.1) VS2019를 동시에 실행 (해당 리포지토리에서)했습니다.이 조합이 엉망이 된 것 같습니다.
ErrCode

90

zombie vim.exe 프로세스로 인해 비슷한 문제가 발생했습니다. 작업 관리자에서 종료 한 다음 git rebase --abort수정했습니다.


이것은 나의 문제이기도했다. sysinternals handle명령을 사용 하여 프로세스 (sh.exe)에 파일이 잠겨 있음을 확인했습니다. pskill <pid>나를 위해 그것을 사용하여 고정.
Paul Oliver

나는 같은 문제가 있었지만 Sublime Text와 함께했습니다.
Toivo Säwén

35

귀하의 답변에 감사합니다 @Laura Slocum

rebasing하면서 물건을 엉망으로하고 분리 된 HEAD를 얻었습니다.

 error: could not read orig-head

리베이스를 끝내지 못했습니다.

분리 된 HEAD에 정확한 내 rebase 원하는 상태가 정확하게 포함 된 것 같습니다.

rebase --quit

그 후 나는 분리 된 헤드에 바인딩하기 위해 새로운 임시 분기를 체크 아웃했습니다.

리베이스하려는 지점과 비교하여 새 임시 지점이 내가 원하는 상태에 있음을 알 수 있습니다. 감사


7

이클립스에서도 같은 문제가있었습니다. 이클립스에서 리베이스 => 중단 할 수 없습니다.

Git Bash에서 git rebase --abort 실행 나를 위해 일했습니다.


7

Windows에서 컴퓨터를 다시 시작하지 않거나 다시 시작할 수없는 경우 아래를 참조하십시오.

프로세스 탐색기 설치 : https://technet.microsoft.com/en-us/sysinternals/bb896653.aspx

프로세스 탐색기에서 찾기> 파일 핸들 또는 DLL ...

오류에 언급 된 파일 이름을 입력하십시오 (내 오류의 경우 'git-rebase-todo'이지만 위의 질문에서는 'done'입니다).

프로세스 탐색기는 파일을 잠그는 프로세스를 강조 표시합니다 (나에게 'grep'였습니다).

프로세스를 종료하면 표준 방식으로 git 작업을 중단 할 수 있습니다.


5

이 이름으로 파일을 작성하십시오.

touch .git/rebase-merge/head-name

그리고 사용보다 git rebase


3

제 경우에는 여덟 살이 git rebase --abort되어 git rebase --continue던졌습니다.

오류 : '.git / rebase-apply / head-name'을 읽을 수 없습니다 : 해당 파일이나 디렉토리가 없습니다

.git\rebase-apply디렉토리 를 수동으로 제거 하여이 문제를 해결했습니다 .


2

을 사용하고 git version 2.19.2.windows.1있습니다.

나를 위해 일한 유일한 것은 .git/rebase-apply/디렉토리 를 제거하고 git reset --hard.


1

필자의 경우 각 Git 프로젝트에서 SmartGit의 Log를 열었고 각 프로젝트 디렉토리에서 Total Commander를 열었 기 때문입니다. 둘 다 닫았을 때 아무런 문제없이 리베이스 할 수있었습니다.

내가 그것에 대해 더 많이 생각할수록 Total Commander, 즉 git rebase가 열려고 한 디렉토리에 잠금이있는 Windows가 더 의심됩니다.

친절한 조언 : 무언가를 고치려고 할 때 항상 한 번에 하나씩 변경하십시오. ;)


1

위에서 언급 한 모든 단계를 시도했지만 아무것도 효과가 없었습니다. 마지막으로 컴퓨터를 다시 시작 하면이 문제가 발생했습니다 .D


1

Windows의 SublimeText 3에서는 대화식 커밋 에디션에 사용되는 Sublime 창을 닫음으로써 문제가 해결됩니다.


0

X 개의 커밋 수에 대해 만족스럽게 완료하면 마지막 명령이되어야합니다 git rebase --continue. 이것은 프로세스를 완료하고 rebase 모드를 종료합니다.


0

나는 같은 문제가 있었다. 다른 게시물에서 제안한대로 프로세스 탐색기를 사용하고 (그 게시물을 찾을 수 없음) 파일에 잠금이있는 프로세스를 찾아서 종료했습니다. 그런 다음 필요에 따라 --continue 또는 --abort를 실행하십시오.


0

내 경우에는이 모든 옵션을 테스트 한 후에도 여전히 문제가 발생했지만 sudo git rebase --abort모든 것을 시도 했습니다.


실제 리베이스 도중에이 작업을 수행하는 경우주의하십시오. 방금 변경 사항을 잃어 버렸습니다 : '(
Freeman L

그것은 "손상된"것으로 간주되었다, 그리고 당신은 rebase로 시작합니다
Dani.Rangelov

0

재부팅 이외의 다른 모든 것을 시도했지만 나를 위해 일한 것은 rm -fr .git/REBASE_HEAD


0

당신이 아래 상태에 도달하고 rebase가 더 이상 작동하지 않으면,

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

그런 다음 먼저 실행

$ git rebase -quit

그런 다음 reflog에서 이전 상태를 복원하십시오.

$ 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

사용하여,

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

-3

나는 일식에서 git을 사용하고 있으며 같은 문제가 있었다.

결국 "Rebase ..."메뉴 항목이 일시적으로 하위 메뉴로 변환 된 것을 발견했습니다.

팀-> 리베이스-> 중단

그것은 나를 위해 일했다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.