'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
):
- 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
'source' 카테고리의 다른 글
데이터 프레임을 추가하여 판다와 함께 사용할 수 있습니다. (0) | 2023.07.08 |
---|---|
전체 입력 문자열을 변환하기 전에 Oracle 날짜 형식 그림이 종료됩니다. (0) | 2023.07.08 |
HTML 파일에 다른 HTML 파일 포함 (0) | 2023.07.08 |
함수를 호출할 때 매개 변수의 이름을 강제로 지정하려면 어떻게 해야 합니까? (0) | 2023.07.08 |
빈 JavaScript 개체를 테스트하려면 어떻게 해야 합니까? (0) | 2023.07.08 |