푸시 후 git commit 메시지 변경(원격에서 끌어온 사람이 없는 경우)
나는 기트 커밋과 그에 따른 추진을 했습니다.커밋 메시지를 변경하고 싶습니다.내가 올바르게 이해했다면, 내가 변경하기 전에 누군가가 원격 리포지토리에서 꺼냈을 수 있기 때문에 이 방법은 권장되지 않습니다.아무도 안 당긴 걸 알면 어떡해요?
이것을 할 수 있는 방법이 있습니까?
변경 내역
가장 최근의 커밋인 경우 다음과 같이 간단히 수행할 수 있습니다.
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
"데이터를 파괴하고 어떤 데이터가 파괴되는지 확실히 알고 있습니다."그러나 파기된 데이터가 커밋되면 reflog에서 오래된 커밋을 복구할 수 있습니다. 실제로 데이터는 파기되는 대신 고아가 됩니다(고아된 커밋은 주기적으로 삭제됨).
데이터를 파괴하고 있다고 생각되지 않는 경우에는 데이터를 보호하는 데 방해가 되지 않습니다.--force
나쁜 일이 생길 수도 있습니다.
이것이 이유입니다.--force-with-lease
어느 정도 안전합니다.
그냥 말해요:
git commit --amend -m "New commit message"
그리고 나서.
git push --force
가장 최근이 아닌 커밋을 편집하려면 다음과 같이 하십시오.
1단계: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
메시지를 업데이트하려는 커밋의 경우.여기서 커밋 메시지를 변경할 필요는 없습니다. 당신은 다음 단계에서 그렇게 할 것입니다.편집기를 저장하고 닫습니다.
기본 '계획'을 편집해도 파일 이름을 변경할 수 있는 프로세스가 시작되지 않으면 다음을 실행합니다.
git rebase --continue
대화형 세션에 사용되는 텍스트 편집기(예: 기본 vi에서 나노)를 변경하려면 다음을 실행합니다.
GIT_EDITOR=nano git rebase -i HEAD~n
3단계: Git는 모든 수정사항에 대해 다른 편집기를 팝업합니다.r
전에. 원하는 대로 커밋 가스를 업데이트한 다음 편집기를 저장하고 닫습니다.
4단계: 모든 커밋 메시지가 업데이트된 후.당신은 하고 싶을지도 모릅니다.git push -f
리모컨을 업데이트합니다.
콘솔에서 다음 두 단계를 사용합니다.
git commit --amend -m "new commit message"
그리고 나서.
git push -f
완료했습니다 :)
여러 참조와 함께 사용할 경우 결과적으로 모두 수정된다는 점에 유의해야 합니다.Gitrepo가 푸시되도록 구성된 위치에 주의해야 합니다.다행히 업데이트할 단일 분기를 지정하여 프로세스를 약간 보호할 수 있는 방법이 있습니다.Gitman 페이지에서 읽어보기:
--force는 푸시된 모든 참조에 적용되므로 push.default를 matching으로 설정하거나 remote.*.push로 구성된 여러 푸시 대상과 함께 사용하면 현재 분기(원격 상대의 엄격한 뒤에 있는 로컬 참조 포함) 이외의 참조를 덮어쓸 수 있습니다.하나의 분기에만 밀어넣으려면 refspec 앞에 +를 사용하여 밀어넣습니다(예: git push origin + master를 사용하여 마스터 분기에 밀어넣습니다).
명령 1.
git commit --amend -m "New and correct message"
그리고나서,
명령 2.
git push origin --force
git commit --amend
그런 다음 현재 창에서 메시지를 편집하고 변경합니다.그후에
git push --force-with-lease
오른쪽 분기에서 변경 사항을 적용하려면
git checkout
#확인을 위해 올바른 분기에서 변경 작업을 수행하고 있는지 확인합니다.
git checkout branchname
그리고나서
git commit --amend -m "new message"
그럼 밀어요.
git push --force
커밋이 커밋을 하려면 마막커이아이닌커수다합사면다니야용해를 .rebase
Github 도움말 페이지의 이전 또는 여러 커밋 메시지의 메시지 수정 섹션에 설명된 명령
이 두 명령을 사용하여 마지막 푸시의 커밋 메시지를 변경합니다.
- git commit --amend-m "새 커밋 메시지".
- git push -- 임대 시 강제 적용.
다른 옵션은 오류가 포함된 커밋 개체를 참조하는 추가 "errata commit"(및 푸시)를 만드는 것입니다. 새 errata commit은 수정도 제공합니다.가 포함된 커밋입니다. 옵션인 ▁the▁--▁anit▁g다를 사용합니다. 예를 들어, readme 파일에 공백 문자를 하나 추가하여 중요한 커밋 메시지로 변경을 커밋하거나 git 옵션을 사용합니다.--allow-empty
리베이스보다 확실히 쉽고 안전하며, 실제 이력을 수정하지 않으며, 가지 트리를 깨끗하게 유지합니다(사용).amend
또한 가장 최근의 커밋을 수정하는 경우에도 좋은 선택이지만, 에라타 커밋은 이전 커밋에 대해 좋은 선택일 수 있습니다.)이런 종류의 일은 매우 드물게 발생하기 때문에 단순히 실수를 기록하는 것만으로도 충분합니다.앞으로 기능 키워드를 Git 로그를 통해 검색해야 하는 경우, 원래 커밋(오류)에 잘못된 키워드가 사용되었기 때문에 원래(오류) 커밋이 표시되지 않을 수 있습니다. 그러나 키워드는 오타가 있는 원래 커밋을 가리키는 에라타 커밋에 나타납니다.다음은 예입니다.
깃 로그commit 0c28141c68adae276840f17cd4766542c33cf1d작성자: 첫 번째 마지막날짜: 8월 8일 수요일 15:55:52 2018-0600 에라타 커밋: 이 커밋은 실질적인 코드 변경이 없습니다. 이 커밋은 이전 커밋 메시지에 대한 수정 사항을 문서화하기 위해서만 제공됩니다. 이것은 커밋 객체 e083a7abd8deb5776cb304fa13731a4182a24be1에 관한 것입니다.원래 잘못된 커밋 메시지: 배경색이 빨간색으로 변경됨보정(*변경 강조 표시됨*): 배경색이 *파란색*으로 변경됨 커밋 032d0ff0601bff79bdef3c6f0a02ebfa061c4ad4작성자: 첫 번째 마지막날짜: 8월 8일 수요일 15:43:16 2018-0600 일부 임시 커밋 메시지 커밋 e083a7abd8deb5776cb304fa13731a4182a24be1작성자: 첫 번째 마지막날짜: 8월 8일 수요일 13:31:32 2018-0600 배경색이 빨간색으로 변경됨
사례 1: 푸시되지 않음 + 최근 커밋:참조
사례 2: 이미 푸시된 + 최근 커밋:참조
사례 3: 푸시되지 않음 + 이전 커밋:참조
사례 4: 이미 푸시된 + 이전 커밋:참조
명령 1
아래 명령을 사용하여 커밋 메시지를 변경해야 합니다.
git commit --amend -m "New and correct message"
명령 2
새 메시지를 추가한 후 아래 명령을 실행합니다.
git push -f origin <your_branch_name>
-S 매개 변수로 오류 메시지를 커밋하면 다음과 같이 작동합니다.
git checkout branch
git commit --amend -m "Your new message"
이 시점에서 변경 사항을 추가했으며 리모컨이 다르다는 것을 잊지 마십시오. 따라서 다음 작업을 수행해야 합니다.
git push --force
VSCode에 있는 경우 --force 매개 변수를 사용하여 git pull을 무시하고 변경된 메시지를 동일한 커밋에 푸시하는 차이를 볼 수 있습니다.
Git은 처음이지만, 제 경험을 덧붙이고 싶습니다.
git commit --amend -m "새로 추가되고 올바른 메시지"
이것은 잘 먹혔지만 다음은 나에게 문제였습니다.커밋 메시지를 변경하기 전에 커밋을 이미 눌렀습니다.마침내, 제가 리모콘을 누르려고 했을 때, 그것은 예외를 던졌습니다.그래서 원격 지점을 업데이트하기 전에 다시 풀다운했어야 했습니다.
git pull origin 지점 이름
git push origin 지점 이름
나의 사소한 경험이 당신에게 도움이 되길 바랍니다.감사해요.
FWIW는 가장 단순한 경우에 선택한 답이 맞습니다.저는 단지 최근의 경험을 공유하고 싶었습니다.
효과가 있었어요.
git commit --amend-m "여기 새 메시지"
git push --force origin
그리고 테스터는 처음으로 지점을 체크아웃할 수 있었고 수정된 메시지만 가지고 있습니다.
따라서 가장 단순한 경우(단일 개발자 및/또는 아무도 지점을 가져오거나 빼거나 체크아웃하지 않은 것으로 알려진 경우)에는 충분합니다.
git commit --amend
유형 키보드를 사용하여 커밋 메시지 편집
git push --force
이건 저한테 꽤 잘 먹히는데,
git 체크아웃 원산지/명칭
이미 지점에 있는 경우 풀 또는 리베이스를 수행하는 것이 좋습니다.
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 제거
나는 비트 버킷 파이프라인에서 그것을 시도했고 그것은 잘 작동합니다.
저는 이미 푸시된 약 6개의 이전 커밋 메시지의 이름을 바꾸기 위해 첫 번째 시도를 했고 그 이후로 추가 커밋을 수행했습니다.
그래서 가장 끔찍한 경우인 'Case 4: 이미 푸시된 + 오래된 커밋'입니다.
저는 빔(Nvim) 사용자이자 빔의 도망자의 엄청난 팬입니다.이것이 제가 그것을 사용한 방법입니다.
다음은 도망자의 기본 재배치와 관련된 일반적인 도움말입니다.
Rebase maps ~
ri Perform an interactive rebase. Uses ancestor of
u commit under cursor as upstream if available.
rf Perform an autosquash rebase without editing the todo
list. Uses ancestor of commit under cursor as
upstream if available.
ru Perform an interactive rebase against @{upstream}.
rp Perform an interactive rebase against @{push}.
rr Continue the current rebase.
rs Skip the current commit and continue the current
rebase.
ra Abort the current rebase.
re Edit the current rebase todo list.
rw Perform an interactive rebase with the commit under
the cursor set to `reword`.
rm Perform an interactive rebase with the commit under
the cursor set to `edit`.
rd Perform an interactive rebase with the commit under
the cursor set to `drop`.
r<Space> Populate command line with ":Git rebase ".
r? Show this help.
커밋 목록을 가져옵니다.
저는.
4d43a1b build(MPL-402): editorconfig fix for messges.json
), 올바른 Conventional Commit 형식이 아니기 때문입니다.커밋 해시 위에 커서를 놓습니다.
4d43a1b
및 유형이렇게 하면 "커서 아래의 커밋을 다음으로 설정한 상태에서 대화형 기본 재배치를 수행합니다.
reword
이 기능과 비교했을 때 얼마나 좋은지 주목하십시오.git rebase -i HEAD~X
이 인지 알고X
그렇게 간단하지 않습니다.이제 정확한 정보를 제공합니다.
git rebase
지휘권그래서 그 버퍼를 쓰고 종료합니다.:wq
그런 다음 git/fugitive 안내에 따라 단계를 수행합니다.일반적인 병합 충돌 프로세스를 통해 수정한 커밋 중 하나에 대해 병합 충돌이 발생했습니다.
바라건대 그것으로 당신이 첫 번째 "나는 리베이스를 한 번도 해본 적이 없는데, 도대체 나는 무엇을 해야 하는가?"라는 장애물을 극복할 수 있기를 바랍니다.이후 단계에 대한 도움이 필요하면 저에게 의견을 남겨주세요.
언급URL : https://stackoverflow.com/questions/8981194/changing-git-commit-message-after-push-given-that-no-one-pulled-from-remote
'programing' 카테고리의 다른 글
mongodb 인덱스 생성 작업 상태 (0) | 2023.05.07 |
---|---|
에서 이름으로 워크시트를 가져오는 방법.NET? (0) | 2023.05.07 |
입력 유형 ="파일" 버튼 스타일 지정 (0) | 2023.05.07 |
Eclipse 기본 작업 공간을 변경하는 방법은 무엇입니까? (0) | 2023.05.07 |
스크립트 파일의 시작 부분에 #!/bin/bash를 입력해야 하는 이유는 무엇입니까? (0) | 2023.05.07 |