나는 자식 커밋과 후속 푸시를 만들었습니다. 커밋 메시지를 변경하고 싶습니다. 올바르게 이해하면 변경하기 전에 누군가 원격 저장소에서 가져 왔을 수 있으므로 권장하지 않습니다. 아무도 뽑지 않았다는 것을 알면 어떻게합니까?
이것을 할 수있는 방법이 있습니까?
나는 자식 커밋과 후속 푸시를 만들었습니다. 커밋 메시지를 변경하고 싶습니다. 올바르게 이해하면 변경하기 전에 누군가 원격 저장소에서 가져 왔을 수 있으므로 권장하지 않습니다. 아무도 뽑지 않았다는 것을 알면 어떻게합니까?
이것을 할 수있는 방법이 있습니까?
답변:
가장 최근의 커밋 인 경우 다음과 같이하면됩니다.
git commit --amend
그러면 마지막 커밋 메시지가있는 편집기가 나타나고 메시지를 편집 할 수 있습니다. -m
이전 메시지를 지우고 새 메시지를 사용하려는 경우 사용할 수 있습니다 .
그런 다음 푸시 할 때 다음을 수행하십시오.
git push --force-with-lease <repository> <branch>
또는 "+"를 사용할 수 있습니다.
git push <repository> +<branch>
또는 다음을 사용할 수 있습니다 --force
.
git push --force <repository> <branch>
이 명령을 사용할 때주의하십시오.
다른 사람이 같은 지점으로 변경 사항을 푸시 한 경우 해당 변경 내용을 삭제하지 않으려 고 할 수 있습니다. --force-with-lease
업스트림 변경이있는 경우는 (중단 때문에 옵션은 가장 안전
브랜치를 명시 적으로 지정하지 않으면 Git은 기본 푸시 설정을 사용합니다. 기본 푸시 설정이 "일치"이면 여러 분기의 변경 사항을 동시에 삭제할 수 있습니다.
이미 가져온 사람은 이제 오류 메시지를 받게되며 다음과 같이하여 업데이트를해야합니다 (자신이 변경하지 않는다고 가정).
git fetch origin
git reset --hard origin/master # Loses local commits
사용시주의하십시오 reset --hard
. 지점에 변경 사항이 있으면 변경 사항이 삭제됩니다.
파괴 된 데이터는 실제로는 오래된 커밋 메시지 일 뿐이지 만이를 --force
알지 못하며 다른 데이터도 행복하게 삭제합니다. 그래서 생각 --force
으로 "나는 데이터를 제거 할, 나는 파괴되는 데이터 확실히 알고있다." 그러나 파괴 된 데이터가 커밋 될 때 종종 참조 로그에서 오래된 커밋을 복구 할 수 있습니다. 데이터는 실제로 파괴되지 않고 분리 됩니다 (고아 진 커밋은 주기적으로 삭제되지만).
당신은 당신이 데이터를 파괴하고 생각하지 않으면, 멀리 --force
... 나쁜 일이 일어날 수 있습니다 .
이것이 --force-with-lease
다소 안전한 이유 입니다.
git push --force
<저장소>와 <브랜치>없이 당신이 당신의 상류 설정을 경우 옵션도 사용할 수 있습니다.
<repository>
? 그렇 origin
습니까? org/repo
? 아니면 그냥 repo
?
그냥 말해 :
git commit --amend -m "New commit message"
그리고
git push --force
git push origin <BRANCH-NAME>
가 없었습니다 git push --force
. 허용 된 답변에 설명 된대로 사용해야 했습니다.
git push --force
하거나 그렇지 않으면 푸시가 진행되지 않습니다.
Step1 : git rebase -i HEAD~n
마지막 n
커밋에 대한 대화식 리베이스 수행 (즉, 커밋 메시지 3 커밋을 변경하려면 git rebase -i HEAD~3
)
git은 커밋을 처리하기 위해 편집기를 띄웁니다.
# r, reword = use commit, but edit the commit message
바로 우리가 필요합니다!
2 단계 : 메시지를 업데이트하려는 커밋 pick
에 r
대해 변경하십시오 . 커밋 메시지를 변경하지 않아도 무시됩니다. 다음 단계에서 그렇게 할 것입니다. 편집기를 저장하고 닫습니다.
rebase 'plan'을 편집했지만 파일 이름을 바꾸는 프로세스가 시작되지 않으면 다음을 실행하십시오.
git rebase --continue
대화식 세션에 사용되는 텍스트 편집기를 변경하려면 (예 : 기본 vi에서 nano로) 다음을 실행하십시오.
GIT_EDITOR=nano git rebase -i HEAD~n
Step3 : Git은 r
이전에 놓은 모든 개정에 대해 다른 편집기를 팝업합니다 . 커밋 메시지를 원하는대로 업데이트 한 다음 편집기를 저장하고 닫습니다.
Step4 : 모든 커밋 메시지가 업데이트 된 후. git push -f
리모컨을 업데이트하고 싶을 수도 있습니다 .
git rebase -i HEAD~3
git rebase --continue
. 당신이 (예를 들어, 기본에서 대화 형 세션에 사용되는 텍스트 편집기를 변경하고자하는 경우 vi
에 nano
), 실행 GIT_EDITOR=nano git rebase -i HEAD~n
.
주목해야한다 당신이 사용하는 경우 push --force
하여 여러개의 심판으로, 그들은 ALL 결과로 수정됩니다. git repo가 푸시되도록 구성된 위치에주의를 기울여야합니다. 다행히 업데이트 할 단일 분기를 지정하여 프로세스를 약간 보호 할 수있는 방법이 있습니다. 자식 매뉴얼 페이지에서 읽으십시오 :
--force는 푸시 된 모든 참조에 적용되므로 push.default를 일치로 설정하거나 remote로 구성된 여러 푸시 대상과 함께 사용하면 * .push는 현재 분기 (예 : 로컬 참조 포함) 이외의 참조를 덮어 쓸 수 있습니다. 그들의 원격 상대방 뒤에 엄격히). 하나의 브랜치로만 푸시하려면 참조 스펙 앞의 +를 사용하여 푸시합니다 (예 : git push origin + master는 마스터 브랜치를 강제로 푸시합니다).
수정할 경우 이전이 아닌 마지막, 당신이 사용에 필요한 커밋 rebase
여기에 설명 된대로 명령, Github에서 도움말 페이지 의에 이전 또는 복수의 개정 메시지는 메시지 커밋 섹션을
또 다른 옵션은 오류가 포함 된 커밋 개체를 참조하는 추가 "에라타 커밋"(및 푸시)을 생성하는 것입니다. 새로운 에라타 커밋도 수정 기능을 제공합니다. 정오표 커밋은 실질적인 코드 변경은 없지만 중요한 커밋 메시지와 같은 커밋입니다. 예를 들어 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 배경색을 빨간색으로 변경
git commit -m “fixed feature A”
(git이 커밋 ID에 e3ab7312를 부여한다고 가정하자. (나중에 메시지가 잘못되었다는 것을 알았으므로 이제 readme 파일에 공백을 추가하거나 —allow-empty
git 옵션을 사용하는 것과 같이 파일을 부적절하게 변경하십시오 ). .. git commit -m “Errata commit for previous commit e3ab7312... original message should have been ‘fixed feature *B*’
'' '
git notes
이것이 "에라타 커밋"과 같은 목적을 수행한다는 것을 발견했다 . 커밋 메시지의 오류에 주석을 달거나 수정하기 위해 이전 커밋에 메모를 추가하기 만하면됩니다. https://git-scm.com/docs/git-notes
이것은 꽤 잘 작동합니다.
git checkout origin / branchname
이미 지점에 있다면 당기거나 기지를 짓는 것이 좋습니다
git pull
또는
git -c core.quotepath=false fetch origin --progress --prune
나중에 간단하게 사용할 수 있습니다
git commit --amend -m "Your message here"
또는 텍스트 편집기를 열려면
git commit --amend
의견이 많으면 텍스트 편집기를 사용하는 것이 좋습니다. 명령을 사용하여 원하는 텍스트 편집기를 설정할 수 있습니다
git config --global core.editor your_preffered_editor_here
어쨌든 커밋 메시지 변경이 끝나면 저장하고 종료하십시오.
그런 다음 실행
git push --force
그리고 당신은 끝났습니다
비트 버킷 파이프 라인을 사용하는 경우 동일한 문제에 대한 추가 정보
메시지 편집
git commit --amend
서버로 밀다
git push --force <repository> <branch>
그런 다음 파이프 라인의 푸시 명령에 --force를 추가하십시오.
git ftp push --force
그러면 이전 커밋이 삭제되고 현재 커밋이 푸시됩니다.
첫 번째 푸시 후 --force 제거
나는 비트 버킷 파이프 라인에서 그것을 시도하고 잘 작동