(푸쉬한) 잘못된 커밋 메시지를 init에서 편집하려면 어떻게 해야 합니까?
나는 더 깊은 역사 속에서 커밋 메시지를 수정하고 싶고 많은 새로운 커밋을 추진했습니다.
커밋 메시지를 변경하려면 어떻게 해야 합니까?가능합니까?
리누스 토르발스가 보내온 메시지가 여러분의 질문에 대답해줄 것입니다.
단답: (밀리면) 할 수 없습니다.
extract(Linus는 BitKeeper를 BK라고 함):
참고로, 단지 역사적인 흥미로: BK에서는 당신이 할 수 있습니다.
그리고 익숙하다면 (나처럼) 정말 실용적이었습니다.앤드류가 가져온 패치 폭탄을 바르고 뭔가 잘못되었다는 것을 알아차리고 그것을 밀어내기 전에 수정할 것입니다.
나도 깃으로 그렇게 할 수 있었습니다.커밋 메시지만 이름의 일부가 아닌 것으로 만들고, 역사가 손상되지 않았음을 보장하고 "댓글 나중에 수정"하는 것을 허용하는 것은 충분히 쉬웠을 것입니다.
안 했어요.
그것의 일부는 순전히 "내부적인 일관성"입니다.Git는 SHA1으로 보호되는 모든 것과 객체 유형에 관계없이 모든 객체가 동일하게 취급되기 때문에 단순히 더 깨끗한 시스템입니다.네, 네 가지 종류의 객체가 있는데, 그것들은 모두 정말로 다릅니다. 그리고 그것들은 같은 방식으로 사용될 수는 없지만, 동시에 그것들의 인코딩이 디스크에서 다를지 몰라도 개념적으로 그것들은 모두 똑같이 작동합니다.
그러나 내부 일관성이 융통성이 없다는 핑계는 아니며, 실수가 발생한 후에 바로잡을 수 있다면 분명 매우 유연할 것입니다.그래서 그것은 그다지 강력한 논쟁이 아닙니다.
git이 커밋 메시지를 변경할 수 없는 진짜 이유는 매우 간단합니다. 그래야 메시지를 신뢰할 수 있습니다.나중에 사람들이 그것들을 바꾸도록 허락했다면, 그 메시지들은 본질적으로 매우 신뢰할 수 없습니다.
완료하려면 sykora가 제안한 대로 원하는 것을 반영하기 위해 로컬 커밋 기록을 다시 작성할 수 있습니다(몇 가지 기본 재설정 및 재설정 --hard, gasp!).
그러나 수정된 기록을 다시 게시하면 다음과 같이 표시됩니다.git push origin +master:master
,+
"빠른 방향으로" 커밋이 발생하지 않더라도 강제로 푸시를 수행하도록 사인을 표시합니다.문제가 생길 수도 있습니다.
다음 다른 SO 질문에서 발췌:
저는 사실 git.git 저장소에 힘을 주어 밀어붙인 적이 있는데, Linus BIG TIME에게 혼이 난 적이 있습니다. 다른 사람들에게 많은 문제를 일으킬 것입니다.간단한 대답은 "하지 마세요" 입니다.
상세 정보:임시 작업 분기 만들기
git checkout -b temp
교체 커밋으로 재설정
git reset --hard <sha1>
올바른 메시지로 커밋 수정
git commit --amend -m "<right message>"
이전 커밋을 새 커밋으로 바꿉니다.
git replace <old commit sha1> <new commit sha1>
당신이 있던 지점으로 돌아가세요.
git checkout <branch>
템프 브랜치를 제거합니다.
git branch -D temp
밀다
guess
다 했어요.
합니다.git rebase -i
(브랜치에서 분기한 지점을 against합니다) 대화형의 경우 'i'입니다.
교체pick
옆에hr
(또는reword
후할 수 .
git push
다시 한 번 말씀드리면 끝입니다!
다음과 같은 트리가 있다고 가정합니다.
dd2e86 - 946992 - 9143a9 - a6fd86 - 5a6057 [master]
,checkout
임시 나뭇가지:
git checkout -b temp
.temp
점,reset --hard
밋)예:예)946992
):
git reset --hard 946992
사용하다amend
메시지 변경하기
git commit --amend -m "<new_message>"
그 후 나무는 다음과 같이 나타납니다.
dd2e86 - 946992 - 9143a9 - a6fd86 - 5a6057 [master]
\
b886a0 [temp]
그리고나서,cherry-pick
앞에 946992
master
.temp
그리고 그들을 실행하고, 사용합니다.amend
그들의 메시지도 바꾸고 싶다면:
git cherry-pick 9143a9
git commit --amend -m "<new_message>
...
git cherry-pick 5a6057
git commit --amend -m "<new_message>
이제 트리는 다음과 같습니다.
dd2e86 - 946992 - 9143a9 - a6fd86 - 5a6057 [master]
\
b886a0 - 41ab2c - 6c2a3s - 7c88c9 [temp]
이제 임시 분기를 원격으로 강제 푸시합니다.
git push --force origin temp:master
master
에서,git fetch origin
나뭇가지를 잡아당기다master
다로 master
을 삭제합니다.temp
.
이제 로컬과 원격 모두 모든 메시지가 업데이트됩니다.
저희 가게에서 저는 잘못된 메시지를 가진 커밋에 눈에 잘 띄는 이름의 주석이 달린 태그를 추가하고 주석을 대체하는 관행을 소개했습니다.
이것이 일상적인 "깃로그" 명령을 실행하는 사람들에게 도움이 되지는 않지만, 댓글의 잘못된 버그 트래커 참조를 수정할 수 있는 방법을 제공하며, 모든 빌드 및 릴리스 도구는 이 규칙을 이해합니다.
이것은 분명히 일반적인 대답은 아니지만, 특정 지역사회 내에서 사람들이 채택할 수 있는 것일 수도 있습니다.이것이 더 큰 규모로 사용된다면, 그것에 대한 일종의 자기 지지물이 생겨날 것이고, 결국에는...
(http://git.or.cz/gitwiki/GitTips#head-9f87cd21bcdf081a61c29985604ff4be35a5e6c0) 부터)
커밋을 더 깊게 변경하는 방법
Git에서 기록은 불변이므로 가장 최근의 커밋(브랜치 헤드가 아닌 커밋)을 제외한 모든 것을 수정하려면 변경된 커밋에서 앞으로 기록을 다시 작성해야 합니다.
StGIT를 사용하여 필요한 경우 분기를 초기화하고, 변경할 커밋을 해제하고, 필요한 경우 팝업하고, 변경 후 패치를 새로 고치고(커밋 메시지를 수정하려면 -e 옵션을 사용), 모든 것을 푸시하고 stg 커밋을 수행할 수 있습니다.
아니면 리베이스를 이용해서 할 수도 있습니다.새 임시 분기를 만들고 git reset을 사용하여 변경할 커밋으로 되감기합니다. hard, 해당 커밋을 변경한 다음 변경된 커밋 위에서 git rebase를 사용하여 분기를 다시 설정합니다.
또는 gitrebase --interactive를 사용하여 패치 재정렬, 축소 등 다양한 수정이 가능합니다.
저는 그것이 당신의 질문에 답해야 한다고 생각합니다.그러나 코드를 원격 저장소로 푸시한 후 사용자가 원격 저장소에서 가져온 경우에는 코드 기록은 물론 수행한 작업도 엉망이 됩니다.그러니까 조심해서 하세요.
Git Extensions를 사용하는 경우: Commit 화면으로 들어가십시오. 아래에서 볼 수 있듯이 하단에 "Amend Commit"(수정 커밋)이라고 표시된 확인란이 있어야 합니다.
언급URL : https://stackoverflow.com/questions/457379/how-do-i-edit-an-incorrect-commit-message-in-git-that-ive-pushed
'programing' 카테고리의 다른 글
알 수 없는 초기 문자 집합 인덱스 '255'가 서버에서 수신됨 (0) | 2023.09.25 |
---|---|
유형 열거형의 IBInspectable을 작성하는 방법 (0) | 2023.09.25 |
어떻게 하면 유튜브 비디오의 음소거를 해제하고 자동 재생을 해제할 수 있습니까? (0) | 2023.09.25 |
프로젝트에 새 글꼴을 가져오는 방법 - Angular 5 (0) | 2023.09.25 |
PowerShell의 가변 범위 지정 (0) | 2023.09.25 |