source

'gitrebase'를 사용하여 이전 커밋 메시지 변경

nicesource 2023. 7. 8. 10:58
반응형

'gitrebase'를 사용하여 이전 커밋 메시지 변경

여기에 설명된 것처럼 이전 커밋 메시지를 편집하려고 했습니다.

문제는 지금 내가 도망치려고 할 때rebase -i HEAD~5라고 씌어 있습니다interactive rebase already started.

그래서 저는 노력합니다.git rebase --continue하지만 다음 오류가 발생했습니다.

error: Ref refs/heads/master is at 7c1645b447a8ea86ee143dd08400710c419b945b but expected c7577b53d05c91026b9906b6d29c1cf44117d6ba
fatal: Cannot lock the ref 'refs/heads/master'.

아이디어 있어요?

다음과 같이 표시됩니다.

편집기를 저장하고 종료하면 해당 목록의 마지막 커밋으로 되돌아가고 다음 메시지와 함께 명령줄에 표시됩니다.

$ git rebase -i HEAD~3
Stopped at 7482e0d... updated the gemspec to hopefully work better
You can amend the commit now, with

이는 다음을 의미하지 않습니다.

다시 타이핑합니다.git rebase -i HEAD~3

입력하지 않음git rebase -i HEAD~3편집기를 종료하면 정상적으로 작동합니다.
(따라서, 당신의 특정한 상황에서,git rebase -i --abort모든 것을 재설정하고 다시 시도할 수 있도록 허용해야 할 수도 있습니다.)


Dave Vogt가 댓글에서 언급했듯이,git rebase --continue번째 커밋을 수정한 기본 프로세스의 다음 작업으로 이동합니다.

또한 Gregg Lind는 답변에서 다음과 같은 명령을 언급합니다.

"pick" 명령을 "edit" 명령으로 대체하면 다음을 알 수 있습니다.git rebase파일 및/또는 커밋 메시지를 편집하고 커밋을 수정한 후 다시 기본 설정을 계속할 수 있도록 해당 커밋을 적용한 후 중지합니다.

커밋에 대한 커밋 메시지만 편집하려면 Git1.6.6(2010년 1월) 이후 명령 pick""를 ""reword로 대체합니다.

그것은 같은 일을 합니다.edit에서는 셸에 제어 권한을 반환하지 않고 커밋 메시지만 편집할 수 있다는 점을 제외하고는 대화형 기본 재배치 중에 수행됩니다.이것은 매우 유용합니다.
현재 커밋 메시지를 정리하려면 다음 작업을 수행해야 합니다.

$ git rebase -i next

그런 다음 모든 커밋을 '편집'으로 설정합니다.그리고 각각의 경우:

# Change the message in your editor.
$ git commit --amend
$ git rebase --continue

''edit 대신 ''을 사용하면 reword호출을 건너뛸있습니다.

Gregg Lind가 제안한 대로, 커밋 메시지만 변경하라는 메시지가 표시되도록 리워드를 사용할 수 있습니다(그 외에는 커밋을 그대로 유지합니다).

git rebase -i HEAD~n

여기서,n마지막 n개 커밋 목록입니다.

예를 들어 다음을 사용하는 경우git rebase -i HEAD~4다음과 같은 것을 볼 수 있습니다.

pick e459d80 Do xyz
pick 0459045 Do something
pick 90fdeab Do something else
pick facecaf Do abc

이제 다음 메시지를 편집할 커밋에 대한 선택을 다시 단어로 대체합니다.

pick e459d80 Do xyz
reword 0459045 Do something
reword 90fdeab Do something else
pick facecaf Do abc

파일을 저장한 후 편집기를 종료하면 다시 단어로 표시한 커밋에 대한 메시지를 메시지당 하나의 파일로 편집하라는 메시지가 표시됩니다.교체할 때 커밋 메시지를 편집하는 것이 훨씬 더 간단했을 것입니다.pick와 함께reword하지만 그렇게 하는 것은 아무런 효과가 없습니다.

GitHub의 커밋 메시지 변경 페이지에서 자세히 알아보십시오.

FWIW, gitrebase interactive를 있습니다.reword이것을 훨씬 덜 고통스럽게 만드는 옵션!

이에 대한 다른 옵션을 제공하고 싶을 뿐입니다.저의 경우, 저는 보통 개별 지점에서 작업한 후 마스터로 병합하며, 로컬에서 수행하는 개별 커밋은 그다지 중요하지 않습니다.

Jira에서 적절한 티켓 번호를 확인하는 깃 후크 때문에 대소문자를 구분하여 코드를 푸시할 수 없었습니다.또한 커밋은 오래 전에 완료되었으며, 저는 다시 베이스로 돌아갈 커밋의 수를 세고 싶지 않았습니다.

그래서 제가 한 일은 최신 마스터에서 새 브랜치를 만들고 문제 브랜치의 모든 커밋을 새 브랜치에서 단일 커밋으로 압축하는 것이었습니다.저는 그게 더 쉬웠고 앞으로 참고할 수 있도록 여기에 두는 것이 좋을 것 같습니다.

최근 마스터로부터:

git checkout -b new-branch

그리고나서

git merge --squash problem-branch
git commit -m "new message" 

참조: https://github.com/rotati/wiki/wiki/Git:-Combine-all-messy-commits-into-one-commit-before-merging-to-Master-branch

기록의 임의 위치에서 커밋 메시지를 변경하려면 다음과 같이 하십시오.

1-git rebase -i <commit_sha><commit_sha>는 변경할 커밋 이전의 SHA 하나의 커밋입니다(여기서는:eb232eb6b): enter image description here

- 2 - 변경 2 - 변경pick에서 (으)로 ~reword 번째에서 (자체를 ) " " (메시지 자체를 편집하지 않음)"

3 - 저장 후 종료

4- 다음에는 이전 커밋 메시지 행만 있는 편집기를 다시 볼 수 있으므로 편집한 다음 저장하고 종료합니다.

그리고 그게 다야, 이제 역사는 수정되었고 그리고.git push --force-with-lease합니다.

여기 가능한 모든 사례를 다루는 매우 좋은 Gist가 있습니다: https://gist.github.com/nepsilon/156387acf9e1e72d48fa35c4fabef0b4

개요:

git rebase -i HEAD~X
# X is the number of commits to go back
# Move to the line of your commit, change pick into edit,
# then change your commit message:
git commit --amend
# Finish the rebase with:
git rebase --continue

언급URL : https://stackoverflow.com/questions/1884474/change-old-commit-message-using-git-rebase

반응형