programing

왜 gitrevert는 m 옵션 누락에 대해 불평합니까?

starjava 2023. 6. 1. 21:39
반응형

왜 gitrevert는 m 옵션 누락에 대해 불평합니까?

그래서 저는 다른 사람들과 함께 프로젝트를 진행하고 있고, 여러 개의 깃허브 포크가 작업되고 있습니다.누군가가 문제를 해결했고 저는 그의 포크를 병합했지만, 그 후 더 나은 해결책을 찾을 수 있다는 것을 깨달았습니다.방금 한 약속을 되돌리고 싶습니다.저는 이것을 하려고 했습니다.git revert HEAD하지만 그것은 나에게 다음과 같은 오류를 주었습니다.

fatal: Commit <SHA1>은 병합이지만 no-m 옵션이 제공되었습니다.

그게 무슨 의미죠?병합하고 커밋할 때 -m 옵션을 사용하여 "Merged with <username>"이라고 말했습니다.

내가 여기서 뭘 잘못하고 있는 거지?

기본적으로git revert병합 커밋의 실제 의미가 모호하므로 이를 되돌리기를 거부합니다.나는 당신의HEAD사실상 병합 커밋입니다.

병합 커밋을 되돌리려면 기본 트렁크로 간주할 병합의 부모, 즉 원래대로 되돌릴 대상을 지정해야 합니다.

종종 이것은 1번 부모가 될 것입니다. 예를 들어, 당신이 위에 있었다면.master그리고 했습니다.git merge unwanted그리고 나서 합병을 되돌리기로 결정했습니다.unwanted첫 번째 부모는 당신의 사전 합병일 것입니다.master가지와 두 번째 부모는 의 일각이 될 것입니다.unwanted.

이 경우 다음을 수행할 수 있습니다.

git revert -m 1 HEAD

git cat-file -p [MERGE_COMMIT_ID]부모 분기를 순서대로 표시합니다.첫 번째 목록은 -m1, 두 번째 목록은 -m2입니다.

다른 사람이 푸 위에 바를 만들었는데, 당신이 그 사이에 바를 만들고 합병해서 역사를 만들었다고 가정해보세요.

지톨라2582152 (HEAD, 마스터) 지점 '기타' 병합|\* c7256de(기타) 막대| b7e7176 바즈|/9968f79 foo

참고: gitlola는 표준이 아니지만 유용한 별칭입니다.

주사위가 없습니다.git revert:

git revert HEAD치명적: 2582152 커밋...병합이지만 no-m 옵션이 제공되었습니다.

찰스 베일리는 평소처럼 훌륭한 대답을 했습니다.사용.git revert에 있어서와 같이

git revert --no-edit -m 1 HEAD[master e900aad] "지점 합병 'other guy'" 되돌리기파일 0개 변경, 삽입 0개((+), 삭제 0개((-)삭제 모드 100644 bar

효과적으로 삭제bar의 역사를 만들어냅니다.

지톨라e900aad (HEAD, 마스터) "지점 'other guy' 병합" 되돌리기258152 지점 '기타' 병합|\* c7256de(기타) 막대| b7e7176 바즈|/9968f79 foo

하지만 합병 커밋을 버리시려는 것 같습니다.

git reset --hard HEAD^HEAD는 지금 b7e7176 baz에 있습니다.
지톨라b7e7176 (HEAD, 마스터) baz* c7256de(기타) 막대|/9968f79 foo

설명서에 설명된 대로

<rev>^ HEAD 예: HEAD^,v1.5.1^0
^의 첫 합니다. ^<n>n번째 부모(즉, )를 의미합니다. <rev>^는 와동합다니등다에 합니다.<rev>^1). ). 특별한 규칙으로,<rev>^0커밋 자체를 의미하며 다음과 같은 경우에 사용됩니다.<rev>커밋 개체를 참조하는 태그 개체의 개체 이름입니다.

호하기전에를 하기 전에.git reset,HEAD^(또는)HEAD^1)는이었고, )는 b7e7176이다,HEAD^2c7256de, 즉 병합 커밋의 첫 번째 부모와 두 번째 부모입니다.

요.git reset --hard왜냐하면 그것은 일을 파괴할 수 있기 때문입니다.

이 문제가 있었습니다. 해결책은 커밋 그래프(gitk 사용)를 보고 다음과 같은 문제가 있다는 것을 확인하는 것이었습니다.

*   commit I want to cherry-pick (x)
|\  
| * branch I want to cherry-pick to (y)
* | 
|/  
* common parent (x)

나는 이제 내가 하고 싶은 것을 이해합니다.

git cherry-pick -m 2 mycommitsha

는 는이유 때문입니다.-m 1, 공통부기병합반면는하로반으로서,-m 2가지를 기반으로 한 병합, 그것이 제가 체리 픽하고 싶은 것입니다.

원래 질문에서 git 오류의 '-m 옵션'이 커밋 메시지를 나타내는 것으로 잘못되었을 수 있습니다.다른 답변에서 설명한 것처럼 '-mn'을 사용하여 병합의 n번째 부모를 지정하여 주 트렁크로 간주하는 부모를 선택합니다.

언급URL : https://stackoverflow.com/questions/5970889/why-does-git-revert-complain-about-a-missing-m-option

반응형