왜 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^2
c7256de, 즉 병합 커밋의 첫 번째 부모와 두 번째 부모입니다.
요.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
'programing' 카테고리의 다른 글
루비에서 SHA1 해시를 만들려면 어떻게 해야 합니까? (0) | 2023.06.01 |
---|---|
Android에서 현재 시간 및 날짜를 가져오는 방법 (0) | 2023.06.01 |
현재 스레드가 주 스레드인지 확인합니다. (0) | 2023.06.01 |
"db.createUser는 함수가 아닙니다" 및 "암호는 비워 둘 수 없습니다" (0) | 2023.06.01 |
사용자 지정 .NET 예외를 직렬화할 수 있도록 만드는 올바른 방법은 무엇입니까? (0) | 2023.06.01 |