기존, 위로 훼손되지 않은 커밋 메시지를 수정하는 방법은 무엇입니까?


질문

 

나는 커밋 메시지에 잘못된 것을 썼다.

어떻게 메시지를 변경할 수 있습니까?커밋은 아직 밀어지지 않았습니다.


답변

 

가장 최근의 커밋 메시지를 수정하십시오

git commit --amend

가장 최근의 커밋의 커밋 메시지를 변경할 수 있도록 편집기를 열 수 있습니다.또한 명령 줄에서 직접 커밋 메시지를 설정할 수 있습니다.

git commit --amend -m "New commit message"

... 그러나 이것은 다중 행 커밋 메시지 또는 작은 수정을 더욱 번거롭게 할 수 있습니다.

이 작업을 수행하기 전에 작업 복사본 변경 사항이 없거나 커밋 될 것입니다.(변경된 변경 사항은 커밋되지 않습니다.)

이미 원격 지점으로 푸시 된 커밋의 메시지 변경

이미 원격 지점에 대한 커밋을 밀어 넣은 후에 (위에서 설명한대로) 로컬로 커밋을 개정 한 후에도 다음과 같이 커밋을 강요 할 필요가 있습니다.

git push <remote> <branch> --force
# Or
git push <remote> <branch> -f

경고 : 힘을 푸는 것은 원격 지점을 해당 로컬 상태로 덮어 씁니다.로컬 지점에없는 원격 분기에 커밋이 있으면 해당 커밋을 잃게됩니다.

경고 : 이미 다른 사람들과 공유 한 커밋을 개정하는 것에주의하십시오.resending commits는 본질적으로 다른 사람들이 재 작성된 이전 커밋의 복사본을 가지고있는 경우 다른 SHA ID가 다른 경우에 문제가 발생합니다.이전 커밋 사본이있는 사람은 새로 다시 작성된 커밋과 함께 작업을 동기화해야하므로 때로는 어려울 수 있으므로 공유 커밋 기록을 다시 작성하려고 시도하거나 공유 커밋을 다시 작성하지 않도록하십시오.전부.


대화 형 Rebase를 수행하십시오

또 다른 옵션은 대화식 Rebase를 사용하는 것입니다. 이렇게하면 최신 메시지가 아닌 경우에도 업데이트 할 메시지를 편집 할 수 있습니다.

git 스쿼시를 수행하려면 다음과 같이하십시오.

// n is the number of commits up to the last commit you want to be able to edit
git rebase -i HEAD~n

커밋을 스쿼시하면 - 메시지 편집을위한 E / R을 선택하십시오.

git

Interactive Rebase에 대한 중요 사항

Git Rebase -i Head ~ N을 사용할 때 N 이상이있을 수 있습니다.GIT는 마지막 N 커밋의 모든 커밋을 "수집"할 것이며, 그 범위 사이에 어딘가에 병합이 있으면 모든 커밋도 볼 수 있으므로 결과는 N +입니다.

좋은 팁 :

단일 지점 이상을 위해 해야하는 경우 콘텐츠를 수정할 때 충돌을 직면 할 수도 있으면 Git을 다시 문자로 설정하고 Git을 자동으로 해당 충돌을 해결하십시오.


선적 서류 비치

git-commit (1) 설명서 페이지 Git-Rebase (1) 매뉴얼 페이지 git-push (1) 매뉴얼 페이지



답변

git commit --amend -m "your new message"


답변

수정하려는 커밋이 가장 최근에없는 것이 아닙니다.

  1. git rebase --interactive $parent_of_flawed_commit

    If you want to fix several flawed commits, pass the parent of the oldest one of them.

  2. An editor will come up, with a list of all commits since the one you gave.

    1. Change pick to reword (or on old versions of Git, to edit) in front of any commits you want to fix.
    2. Once you save, Git will replay the listed commits.


  3. For each commit you want to reword, Git will drop you back into your editor. For each commit you want to edit, Git drops you into the shell. If you’re in the shell:

    1. Change the commit in any way you like.
    2. git commit --amend
    3. git rebase --continue

이 시퀀스의 대부분은 다양한 명령의 출력에 의해 설명 될 것입니다.그건 매우 쉬워요;당신은 그것을 암기 할 필요가 없습니다. Git Rebase - Interactive는 얼마나 오래 전에 그들이 있었던지 상관없이 커밋을 바로 잡을 수 있음을 기억하십시오.


이미 푸시 한 커밋을 변경하고 싶지는 않습니다.또는 당신이 할 수도 있지만, 그 경우에는 당신의 커밋을 끌어 당기고 그들 위에 일을 끝낼 수있는 모든 사람과 의사 소통을해야합니다.누군가가 리베이스를 푸시하거나 게시 된 지점으로 재설정 한 후에 복구 / 다시 동기화하는 방법은 무엇입니까?



답변

이전 커밋을 수정하려면 변경 사항을 변경하고 해당 변경 단계를 단계별로 실행 한 다음 실행하십시오.

git commit --amend

그러면 새 커밋 메시지를 나타내는 텍스트 편집기에서 파일이 열립니다.이전 커밋 메시지에서 텍스트로 채워진 채로 시작됩니다.원하는대로 커밋 메시지를 변경 한 다음 파일을 저장하고 편집기를 완료하도록 종료하십시오.

이전 커밋을 수정하고 동일한 로그 메시지를 유지하려면 실행하십시오.

git commit --amend -C HEAD

전적으로 제거하여 이전 커밋을 수정하려면 실행

git reset --hard HEAD^

둘 이상의 커밋 메시지를 편집하려면 실행하십시오.

git rebase -i HEAD~commit_count

(commit_count를 편집하려는 커밋 수로 바꾸십시오.)이 명령은 편집기를 시작합니다.첫 번째 커밋 (변경하려는 것)을 "선택"대신 "편집"으로 표시 한 다음 편집기를 저장하고 종료하십시오.커밋하고 실행하려는 변경 사항을 만드십시오.

git commit --amend
git rebase --continue

참고 : Git Commit가 열린 편집기에서 "원하는 변경 사항을 변경할 수도 있습니다.



답변

이미 언급했듯이 Git Commit - 마지막 커밋을 덮어 쓸 수있는 방법입니다.하나의 참고 사항 : 파일을 덮어 쓰려고하는 경우 명령은

git commit -a --amend -m "My new commit message"


답변

Git Filter-Branch를 사용할 수도 있습니다.

git filter-branch -f --msg-filter "sed 's/errror/error/'" $flawed_commit..HEAD

사소한 Git Commit만큼이나 쉽지는 않지만, 잘못된 커밋 메시지가 끝나면 이미 병합이있는 경우 특히 유용합니다.

이것은 머리와 결함이있는 커밋 사이의 모든 커밋을 다시 작성하려고 시도하므로 MSG-Filter 명령을 매우 현명하게 선택해야합니다 .-)

출처:https://stackoverflow.com/questions/179123/how-to-modify-existing-unpushed-commit-messages