답변:
기본적 git revert
으로 병합 커밋을 실제로 의미하는 것이 모호하기 때문에 되돌리기를 거부합니다. 나는 당신 HEAD
이 실제로 병합 커밋 이라고 가정합니다 .
병합 커밋을 되돌리려면 병합의 부모를 메인 트렁크로 간주하려는 것, 즉 되돌릴 대상을 지정해야합니다.
예를 들어, 당신이 켜져 master
있고 git merge unwanted
의 병합을 되돌리기로 결정한 경우, 이것은 종종 부모의 번호가 될 것 입니다 unwanted
. 첫 번째 부모는 병합 전 master
지점이고 두 번째 부모는 팁입니다 unwanted
.
이 경우 다음을 수행 할 수 있습니다.
git revert -m 1 HEAD
git cat-file -p [MERGE_COMMIT_ID]
부모 분기를 순서대로 표시합니다. 나열된 첫 번째 -m 1
는 두 번째 -m 2
입니다.
git revert [HASH] -m 2
분기 1.x-1.x에서 커밋 할 항목이 없으며 작업 디렉토리를 정리하지만 커밋이 되 돌리지 않습니다.
다른 사람이 foo 위에 bar를 만들었지 만 그 동안 baz를 만든 다음 병합하여
git lola * 2582152 (HEAD, master) 병합 지점 'otherguy' | \ | * c7256de (otherguy) 바 * | b7e7176 바즈 | / * 9968f79 foo
참고 : git lola 는 비표준이지만 유용한 별칭입니다.
주사위 없음 git revert
:
$ 자식 되돌리기 헤드 치명적 : Commit 2582152 ...는 병합이지만 -m 옵션이 제공되지 않았습니다.
찰스 베일리는 평소처럼 훌륭한 대답을 했습니다. git revert
에서와 같이 사용
$ git revert --no-edit -m 1 머리 [마스터 e900aad] "병합 지점 'otherguy'"되돌리기 파일 0 개 변경, 삽입 0 개 (+), 삭제 0 개 (-) 삭제 모드 100644 bar
효과적으로 bar
역사를 삭제 하고 생성
git lola * e900aad (HEAD, master) "병합 지점 'otherguy'"되돌리기 * 2582152 'otherguy'병합 지점 | \ | * c7256de (otherguy) 바 * | b7e7176 바즈 | / * 9968f79 foo
그러나 병합 커밋 을 버리고 싶다고 생각합니다 .
$ git reset-하드 헤드 ^ HEAD는 현재 b7e7176 baz에 있습니다 git lola * b7e7176 (HEAD, 마스터) baz | * c7256de (otherguy) 바 | / * 9968f79 foo
에 설명 된대로 git rev-parse
수동
<rev>^
, 예를 들어 HEAD ^,v1.5.1^0
개정 매개 변수
의 접미^
부는 해당 확약 오브젝트의 첫 번째 상위를 의미합니다. n 번째 부모를^<n>
의미합니다 ( 즉, 와 동일 함 ). 특수 규칙으로, 커밋 자체를 의미하며 커밋 객체를 참조하는 태그 객체의 객체 이름 이 사용될 때 사용됩니다 .<rev>^
<rev>^1
<rev>^0
<rev>
그래서 호출하기 전에 git reset
, HEAD^
(나 HEAD^1
) b7e7176이고 HEAD^2
, c7256de이었다 즉 각각 병합의 제 1 및 제 2 부모 커밋.
git reset --hard
작업을 파괴 할 수 있으므로 주의하십시오 .
lola
git 명령 에 추가 하는 쉬운 방법 :git config --global alias.lola "log --graph --decorate --pretty=oneline --abbrev-commit --all"
나는이 문제가 있었고 해결책은 커밋 그래프 (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
브랜치 y를 기준 -m 1
으로 -m 2
병합 할 때 즉, 체리 피킹하려는 공통 부모를 기반으로 병합 하기 때문 입니다 .
git-revert
질문에 관한 것입니다.
-m
독점적으로가 아니라 옵션에 관한 것 git merge
입니다. 즉, -m
옵션 사용에 대한 추론 은 되돌리기 및 체리 픽에 대해 비슷한 것으로 보입니다. 사실이 아닌 경우 알려주십시오. 체리 픽 사용을 구체적으로 다루는 다른 질문을 찾지 못했기 때문에이 답변에 감사드립니다.