GitHub를 커밋하고 푸시 한 후 커밋 메시지를 편집하는 방법이 있습니까? 인라인 주석뿐만 아니라 '메모 추가'가 있지만 커밋 메시지를 실제로 편집하지는 않습니다. git 확장에는 'amend commit'도 있지만 기존 메시지는 편집하지 않습니다.
GitHub를 커밋하고 푸시 한 후 커밋 메시지를 편집하는 방법이 있습니까? 인라인 주석뿐만 아니라 '메모 추가'가 있지만 커밋 메시지를 실제로 편집하지는 않습니다. git 확장에는 'amend commit'도 있지만 기존 메시지는 편집하지 않습니다.
답변:
git rebase -i <commit hash you want to change>^
그러면 각 커밋 및 작업 목록과 함께 기본 편집기 (일반적으로 vi ) 가 열립니다 . 기본적으로 조치는 pick
입니다.
어떤 메시지를 변경하려면 저지를 들어, 변경 pick
에 reword
.
저장하고 종료하십시오 (vi :) :wq
.
이러한 커밋마다 커밋 메시지를 편집 할 수있는 편집기가 제공됩니다. 적합하다고 생각되면 변경하고 저장하고 종료하십시오.
커밋 메시지를 모두 편집하면 명령 프롬프트로 돌아가서 업데이트 된 메시지가 포함 된 새 트리가 생깁니다.
이제를 사용하여 github에 업로드 할 수 있습니다 git push origin --force
.
마지막 커밋을 수정해야하는 경우 1-4 단계를로 바꿀 수 있습니다 git commit --amend
.
^
거기에 있음에 유의하십시오 -실제로 변경하려는 커밋의 부모를 기반으로 제안했습니다.
^^
과 같이 리터럴로 명령을 종료하도록 입력해야합니다 ^
. 예 : git rebase -i 2c747b32^^
Intellij Idea에서는 그렇게 쉽게 할 수 있습니다.
git push origin --force
@Mureinik의 답변에서 제안한대로 나중에 실행해야 합니다.
git-graph가 다음과 같은 경우 ...
O target-commit that you want to change its message [df9c192]
|
O parent-commit [b7ec061]
|
O
( df9c192
그리고 b7ec061
커밋 해쉬는 target-commit과 parent-commit의 커밋 해시입니다.)
다음 지침을 입력하면됩니다 ...
git reset --soft b7ec061
git commit -m "your_new_description"
git push -f
git reset --soft b7ec061
파일 변경 사항을 유지하고 부모 커밋으로 재설정합니다 (예 : b7ec061).git commit -m "..."
로컬로 새로운 커밋을 생성합니다git push -f
새 커밋을 서버로 푸시하고 이전 커밋을 교체합니다 (예 : df9c192)또 다른 옵션은 오류가 포함 된 커밋 개체를 참조하는 추가 "에라타 커밋"(및 푸시)을 생성하는 것입니다. 새로운 에라타 커밋도 수정 기능을 제공합니다. 정오표 커밋은 실질적인 코드 변경은 없지만 중요한 커밋 메시지와 같은 커밋입니다. 예를 들어 readme 파일에 공백 문자 하나를 추가하고 중요한 커밋 메시지로 해당 변경 사항을 커밋하거나 git 옵션을 사용하십시오 --allow-empty
. rebasing보다 확실히 쉽고 안전하며 실제 기록을 수정하지 않으며 분기 트리를 깨끗하게 유지합니다.amend
가장 최근의 커밋을 수정하는 경우에도 좋은 선택이지만 에라타 커밋은 이전 커밋에 적합합니다. 이러한 유형의 일은 단순히 실수를 문서화하는 것만으로 충분하지 않습니다. 나중에 git log를 통해 기능 키워드를 검색해야하는 경우, 원래 커밋 (오래된 오타)에 잘못된 키워드가 사용 되었기 때문에 원래 (잘못된) 커밋이 나타나지 않을 수 있지만 키워드가 나타납니다. 정오표 커밋에서 오타가있는 원래 커밋을 가리 킵니다. 예를 들면 다음과 같습니다.
$ 자식 로그 커밋 0c28141c68adae276840f17ccd4766542c33cf1d 저자 : 첫 번째 마지막 날짜 : 수 8 월 8 일 15:55:52 2018-0600 에라타 커밋 : 이 커밋에는 실질적인 코드 변경이 없습니다. 이 커밋은 이전 커밋 메시지에 대한 수정 사항을 문서화하기 위해서만 제공됩니다. 이것은 오브젝트 e083a7abd8deb5776cb304fa13731a4182a24be1을 커밋하는 것과 관련이 있습니다. 원래 잘못된 커밋 메시지 : 배경색을 빨간색으로 변경 수정 (* 변경 사항 강조 표시 *) : 배경색을 * blue *로 변경 커밋 032d0ff0601bff79bdef3c6f0a02ebfa061c4ad4 저자 : 첫 번째 마지막 날짜 : 수 8 월 8 일 15:43:16 2018-0600 일부 임시 커밋 메시지 커밋 e083a7abd8deb5776cb304fa13731a4182a24be1 저자 : 첫 번째 마지막 날짜 : 수 8 월 8 일 13:31:32 2018-0600 배경색을 빨간색으로 변경
@Mureinik의 답변은 좋지만 초보자는 이해할 수 없습니다.
첫 번째 방법 :
git commit --amend
하면 다음을 볼 수 있습니다.<your existing commit mesage foo bar>
# Please enter the commit message fir your changes. Lines starting
# with # will be ignored, and an empty message aborts the commit.
#
# Date: Sat Aug 24 17:56:16 2019 +0800
#
# On branch is up to date with 'origin/master'.
#
# changes to be committed:
# modified: foo.py
#
pick
이것은 이미 편집 페이지 이므로 맨 위 메시지를 직접 편집하고 다음 과 같이 save & quit 할 수 있습니다 .<your new correction commit message>
# Please enter the commit message for your changes. Lines starting
....
git push -u origin master --force
또는 <how you push normally> --force
. 여기서 핵심은 --force
입니다.두 번째 방법 :
git log
저장소 URL에서 커밋 해시를 보거나 추출 할 수 있습니다.881129d771219cfa29e6f6c2205851a2994a8835
그런 다음 git rebase --interactive 881129d771219cfa29e6f6c2205851a2994a8835
또는 할 수 있습니다 git rebase -i HEAD^
(최신 경우)
당신은 볼 것이다 :
pick <commit hash> <your current commit message>
# Rebase 8db7e8b..fa20af3 onto 8db7e8b
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
# d, drop = remove commit
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out
noop
당신이 경우에 당신은 아마 예를 들어, 잘못 입력하는 다음 git rebase -i 881129d771219cfa29e6f6c2205851a2994a88
실종 된 ^
끝에, 당신은 더 나은 저장하고 원인을 파악하지 않고 편집기를 종료합니다 :noop
# Rebase 8db7e8b..fa20af3 onto 8db7e8b
...
noop
문제 가 없으면 단어 pick
를로 변경하고 reword
다른 단어 는 그대로 남아 있습니다 (이 시점에서 커밋 메시지를 편집하지 마십시오).reword <commit hash> <your current commit message>
# Rebase 8db7e8b..fa20af3 onto 8db7e8b
#
# Commands:
# p, pick = use commit
...
<your existing commit mesage foo bar>
# Please enter the commit message fir your changes. Lines starting
# with # will be ignored, and an empty message aborts the commit.
#
# Date: Sat Aug 24 17:56:16 2019 +0800
#
# interactive rebase in progress; onto b057371
# Last command done (1 command done):
# reword d996ffb <existing commit message foo bar>
# No commands remaining.
# You are currently editing a commit while rebasing branch 'master' on 'b057371'.
#
# changes to be committed:
# modified: foo.py
#
<your new correction commit message>
# Please enter the commit message for your changes. Lines starting
....
git push -u origin master --force
또는 <how you push normally> --force
. 여기서 핵심은 --force
입니다.자세한 내용 은 doc을 참조하십시오 .