푸시 후 자식 커밋 메시지 변경 (원격에서 아무도 가져 오지 않은 경우)
나는 자식 커밋과 후속 푸시를 만들었습니다. 커밋 메시지를 변경하고 싶습니다. 내가 올바르게 이해한다면, 변경하기 전에 누군가 원격 저장소에서 가져 왔을 수 있기 때문에 이것은 바람직하지 않습니다. 아무도 당기지 않았다는 것을 알고 있으면 어떻게합니까?
이 작업을 수행하는 방법이 있습니까?
변화하는 역사
가장 최근 커밋 인 경우 다음과 같이 간단하게 수행 할 수 있습니다.
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
커밋에 대해 대화 형 리베이스를 수행합니다 .
git은 해당 커밋을 처리하기 위해 편집기를 표시합니다.이 명령을 확인하십시오 # r, reword = use commit, but edit the commit message
.
2 단계 : 메시지를 업데이트하려는 커밋을로 변경 pick
합니다 r
. 편집기를 저장하고 닫습니다.
3 단계 : 다음 커밋 파일에서 원하는대로 커밋 메시지를 업데이트합니다.
Step4 : 모든 커밋 후 메시지가 업데이트됩니다. git push -f
리모컨을 업데이트 할 수 있습니다 .
콘솔에서 다음 두 단계를 사용하십시오.
git commit --amend -m "new commit message"
그리고
git push -f
완료 :)
여러 개의 ref와 함께 사용 push --force
하면 결과적으로 모두 수정 된다는 점에 유의해야합니다 . git repo가 푸시하도록 구성된 위치에주의를 기울여야합니다. 다행히 업데이트 할 단일 분기를 지정하여 프로세스를 약간 보호 할 수있는 방법이 있습니다. git man 페이지에서 읽으십시오.
--force는 푸시되는 모든 참조에 적용되므로 push.default를 일치로 설정하거나 remote. *. push로 구성된 여러 푸시 대상과 함께 사용하면 현재 분기가 아닌 참조 (로컬 참조 포함)를 덮어 쓸 수 있습니다. 원격 대응 자 뒤에 엄격하게). 한 브랜치에만 강제로 푸시하려면 refspec 앞에 +를 사용하여 푸시합니다 (예 : git push origin + master를 사용하여 마스터 브랜치에 강제로 푸시).
If you want to modify an older commit, not the last one, you will need to use rebase
command as explained in here,Github help page , on the Amending the message of older or multiple commit messages section
Command 1.
git commit --amend -m "New and correct message"
Then,
Command 2.
git push origin --force
git commit --amend
then edit and change the message in the current window. After that do
git push --force-with-lease
Another option is to create an additional "errata commit" (and push) which references the commit object that contains the error -- the new errata commit also provides the correction. An errata commit is a commit with no substantive code changes but an important commit message -- for example, add one space character to your readme file and commit that change with the important commit message, or use the git option --allow-empty
. It's certainly easier and safer than rebasing, it doesn't modify true history, and it keeps the branch tree clean (using amend
is also a good choice if you are correcting the most recent commit, but an errata commit may be a good choice for older commits). This type of thing so rarely happens that simply documenting the mistake is good enough. In the future, if you need to search through a git log for a feature keyword, the original (erroneous) commit may not appear because the wrong keyword was used in that original commit (the original typo) -- however, the keyword will appear in the errata commit which will then point you to the original commit that had the typo. Here's an example:
$ git log commit 0c28141c68adae276840f17ccd4766542c33cf1d Author: First Last Date: Wed Aug 8 15:55:52 2018 -0600 Errata commit: This commit has no substantive code change. This commit is provided only to document a correction to a previous commit message. This pertains to commit object e083a7abd8deb5776cb304fa13731a4182a24be1 Original incorrect commit message: Changed background color to red Correction (*change highlighted*): Changed background color to *blue* commit 032d0ff0601bff79bdef3c6f0a02ebfa061c4ad4 Author: First Last Date: Wed Aug 8 15:43:16 2018 -0600 Some interim commit message commit e083a7abd8deb5776cb304fa13731a4182a24be1 Author: First Last Date: Wed Aug 8 13:31:32 2018 -0600 Changed background color to red
This works for me pretty fine,
git checkout origin/branchname
if you're already in branch then it's better to do pull or rebase
git pull
or
git -c core.quotepath=false fetch origin --progress --prune
Later you can simply use
git commit --amend -m "Your message here"
or if you like to open text-editor then use
git commit --amend
I will prefer using text-editor if you have many comments. You can set your preferred text-editor with command
git config --global core.editor your_preffered_editor_here
Anyway, when your are done changing the commit message, save it and exit
and then run
git push --force
And you're done
additional information for same problem if you are using bitbucket pipeline
edit your message
git commit --amend
push to the sever
git push --force <repository> <branch>
then add --force to your push command on the pipeline
git ftp push --force
This will delete your previous commit(s) and push your current one.
remove the --force after first push
i tried it on bitbucket pipeline and its working fine
'developer tip' 카테고리의 다른 글
Pandas를 사용하는 '대용량 데이터'워크 플로 (0) | 2020.09.28 |
---|---|
자바의 정적 클래스 (0) | 2020.09.28 |
C ++ 식별자에서 밑줄을 사용하는 규칙은 무엇입니까? (0) | 2020.09.28 |
NuGet을 사용하여 이전 버전의 패키지 다운로드 (0) | 2020.09.28 |
Vim의 외부 명령에 대한 파이핑 버퍼 (0) | 2020.09.25 |