나는 자식 커밋과 후속 푸시를 만들었습니다. 커밋 메시지를 변경하고 싶습니다. 올바르게 이해하면 변경하기 전에 누군가 원격 저장소에서 가져 왔을 수 있으므로 권장하지 않습니다. 아무도 뽑지 않았다는 것을 알면 어떻게합니까?
이것을 할 수있는 방법이 있습니까?
답변
역사 변경
가장 최근의 커밋 인 경우 다음과 같이하면됩니다.
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 commit --amend -m "New commit message"
그리고
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 commit --amend -m "new commit message"
그리고
git push -f
완료 🙂
답변
주목해야한다 당신이 사용하는 경우 push --force
하여 여러개의 심판으로, 그들은 ALL 결과로 수정됩니다. git repo가 푸시되도록 구성된 위치에주의를 기울여야합니다. 다행히 업데이트 할 단일 분기를 지정하여 프로세스를 약간 보호 할 수있는 방법이 있습니다. 자식 매뉴얼 페이지에서 읽으십시오 :
–force는 푸시 된 모든 참조에 적용되므로 push.default를 일치로 설정하거나 remote로 구성된 여러 푸시 대상과 함께 사용하면 * .push는 현재 분기 (예 : 로컬 참조 포함) 이외의 참조를 덮어 쓸 수 있습니다. 그들의 원격 상대방 뒤에 엄격히). 하나의 브랜치로만 푸시하려면 참조 스펙 앞의 +를 사용하여 푸시합니다 (예 : git push origin + master는 마스터 브랜치를 강제로 푸시합니다).
답변
수정할 경우 이전이 아닌 마지막, 당신이 사용에 필요한 커밋 rebase
여기에 설명 된대로 명령, Github에서 도움말 페이지 의에 이전 또는 복수의 개정 메시지는 메시지 커밋 섹션을
답변
명령 1 .
git commit --amend -m "New and correct message"
그때,
명령 2 .
git push origin --force