IT story

Git에서 이전 커밋 메시지 변경

hot-time 2020. 7. 9. 08:01
반응형

Git에서 이전 커밋 메시지 변경


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

내가 실행하려고하면 문제는, 지금이다 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 rebasing 프로세스의 다음 작업으로 이동합니다 .

또한 Gregg Lind그의 대답 에서 다음 reword명령을git rebase 언급합니다 .

"pick"명령을 "edit"명령으로 바꾸면 git rebase해당 커밋을 적용한 후 중지하도록 지시하여 파일 및 / 또는 커밋 메시지를 편집하고 커밋을 수정 한 후 리베이스를 계속할 수 있습니다.

커밋에 대한 커밋 메시지를 편집하려면 pickrewordGit1.6.6 (2010 년 1 월) 이후로 " " 명령을 " " 명령으로 바꾸십시오 .

쉘에 제어를 반환하지 않고 커밋 메시지를 편집 할 수만 있다는edit 점을 제외하고는 대화식 리베이스 동안 ' ' 와 동일한 작업 을 수행합니다 . 이것은 매우 유용합니다.
현재 커밋 메시지를 정리하려면 다음을 수행해야합니다.

$ git rebase -i next

그런 다음 모든 커밋을 'edit'로 설정하십시오. 그런 다음 각각에 :

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

'사용 reword'대신하는 것은 ' edit'당신은 건너 뛸 수 git-commitgit-rebase통화를 .


FWIW, git rebase interactive는 이제 "reword"옵션을 가지고있어 훨씬 덜 고통 스럽습니다!


Gregg Lind가 제안한 것처럼 reword사용 하여 커밋 메시지 만 변경하라는 메시지를 표시 할 수 있습니다 (커밋은 그대로 유지).

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

이제 메시지를 편집하려는 커밋에 대해 pickreword바꾸십시오 .

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

파일을 저장 한 후 편집기를 종료하면 다음으로 reword 로 표시된 커밋에 대한 메시지를 메시지 당 하나의 파일 로 편집하라는 메시지가 표시 됩니다. 당신이 교체 할 때이 메시지를 커밋 바로 편집에 훨씬 간단 했 참고 pickreword하지만, 그 일을하는 것은 아무런 효과가 없습니다.

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


다른 옵션을 제공하고 싶었습니다. 제 경우에는 보통 개인 브랜치에서 일하고 나서 마스터로 합병하며, 현지에서하는 개인 커밋은 그렇게 중요하지 않습니다.

Jira에서 적절한 티켓 번호를 확인하지만 대소 문자를 구분하는 git hook으로 인해 코드를 푸시하지 못했습니다. 또한 커밋은 오래 전에 수행되었으며 리베이스에서 다시 커밋하는 커밋 수를 세고 싶지 않았습니다.

그래서 내가 한 일은 최신 마스터에서 새 분기를 만들고 문제 분기의 모든 커밋을 새 분기의 단일 커밋으로 스쿼시하는 것입니다. 저에게는 더 쉬웠으며 나중에 참조 할 수 있도록하는 것이 좋습니다.

최신 마스터에서 :

git checkout -b new-branch

그때

git checkout 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


다음은 가능한 모든 경우를 다루는 멋진 요지입니다. 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-on-git

반응형