힘내 : 이전 커밋 메시지 만 편집


12

게으른 이유로 기본 메시지로 많은 커밋을 푸시했으며 각 커밋에서 변경된 내용을 알지 못하므로 번거로워졌습니다.

이전 커밋 메시지 만 편집하고 가능한 경우 커밋 트리를 유지하려면 어떻게해야합니까?


10
공공 역사의 변화를 조심하십시오!
D. Ben Knoble

2
나는 여기의 대답이 당신에게 거의 무서운 경고를주지 않는 것을 두려워합니다. 이 됩니다 다른 사람이 그 동안 당신의 역사를 가져온 경우 큰 혼란을 생성 - 모든있는 moreso를 그들이 그 위에 새로운 일을 저지른 적이 있다면!
Eevee December

나는 원인과 함께 사용할 것이고, 여기에 더 간단한 경우가 있으며, 나는이 레포를 사용하는 유일한 사람입니다.
Tuyen Pham

3
정보 : 이것은 이미 스택 오버플로 에 대해 묻습니다 (아마도 여러 번) .
user202729

답변:


20

일련의 커밋의 커밋 메시지를 편집하기 위해

git rebase -i firstsha

firstsha편집하려는 첫 번째 커밋의 부모 커밋에 대한 식별자는 어디에 있습니까 ? (여기서 유효한 참조를 사용할 수 있으므로 git rebase -i HEAD~4마지막 4 개의 커밋이 표시됩니다.)

열리는 편집기에서 수정하려는 커밋에서 모든 "pick"항목을 "reword"로 변경 한 다음 편집기를 닫습니다. 그런 다음 선택한 모든 커밋에 대해 커밋 메시지를 입력하라는 메시지가 표시됩니다.

이 점에 유의 한다 커밋의 해시가 변경되므로, 커밋 트리를 변경합니다. 새 트리를 강제로 푸시하거나 새 브랜치로 푸시해야합니다. 또한 병합을 엉망으로 만들므로 병합 커밋을 편집하지 마십시오.

마지막 커밋 만 빠르게 편집하려면 다음을 실행하십시오.

git commit --amend

(하지만 커밋을 위해 준비된 모든 것을 조심하십시오).


커밋 트리에 어떤 영향을 미치나요? 커밋 트리에 중간 세로선을 만들까요? 현재 세로 줄 커밋 트리가 하나뿐이므로 100 개가 넘는 메시지를 변경해야합니다.
Tuyen Pham

3
커밋 트리에 새로운“줄”을 만들지 않고 모든 커밋을 변경합니다. 히스토리가 현재 선형 인 경우 선형으로 유지됩니다.
Stephen Kitt

때에 따라 다르지. 서버를 직접 사용하지 않고 직접 사용하고 있습니까? 그런 다음 하나의 "라인"만 있습니다. 그러나 그렇지 않으면 두 가지가있을 수 있으며 첫 번째 두 가지에 대한 답변을 바탕으로 이전 "라인"을 제거하는 데 도움을 줄 수 있습니다.
Captain Man

1
REBASE는 병합 처리하는 플래그 (나는 그것을 생각 가지고 preserve-merges)
D. 벤 Knoble

6

당신이 찾고있는 것은입니다 git rebase.

이전 git commit메시지 만 변경 하려면 다음을 사용하면됩니다.

git commit --amend

이전 커밋을 변경 한 다음 편집 내용을 저장하십시오.

그러나 이전 커밋을 변경해야하는 경우을 사용해야 rebase합니다.

git rebase -i HEAD~N 

여기서 N은 2 또는 12 또는 6 등으로 돌아 가려는 커밋 수와 같습니다.

커밋이 포함 된 텍스트 편집기가 제공됩니다. 메시지 pick를 변경하려면 옵션을 에서 reword로 변경하십시오.

변경하려는 커밋을 모두 확인하고 옵션을 적절히 변경했으면 편집기를 저장하고 닫습니다. 그런 다음 각 커밋 메시지를 변경하십시오. 만족하면 다음을 실행할 수 있습니다.

git push --force

원하는 변경을했기 때문에 다른 해시 값으로 git history를 유지해야합니다. 확인해야 할 추가 링크는 다음과 같습니다.

7.6 Git 도구-기록 다시 작성
GitHub 도움말-커밋 메시지 변경
StackOverflow-이전 커밋 메시지 변경에 대한 질문


"리워드"인 commit --amend경우 커밋 프로세스를 엉망으로 만들지 않는 한 " "일 필요는 없습니다 .
Stephen Kitt

내가 귀하의 게시물에서 나의 이해로 할거야 감사합니다, 여기에 단계 : 1. 할 git rebase -i firstshafirstsha(가) 내가 메시지를 변경 할 거라고 커밋의 부모가 편집기, 변화를 다음의 해시를 저지하다 pickreword, enter다음 새 메시지, 문제 git rebase --continue그리고합니까 git push --force?
Tuyen Pham

@ StephenKitt, 나는 당신의 대답을 보았습니다. 나는 당신의 충고를 따르고 편집 할 것입니다. 더 적절한 경우 여러 개의 유사한 답변 보다이 질문에 더 적합하다고 생각되면 귀하의 링크를 추가하여 답변을 귀하의 답변에 병합 할 수 있습니다.
kemotep

@TuyenPham 당신 git rebase -i HEAD~N은 가고 싶은 커밋의 수인 N과 관련이 있습니다. 메시지를 편집하려는 모든 커밋 옵션을에서 pickreword변경하고,이 파일을 저장 하고 , 각 커밋 파일을 변경 한 후 저장하십시오. 일단 당신이 확신하면 당신은 필요합니다 git push --force [Name of git branch you are were working on]. 언제든지 되돌아 가서 다시 수행하거나 단계별로 수행 할 수 있습니다.
kemotep
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.