git에서 커밋 범위를 되돌릴 수 있습니까? gitrevisions 문서를 보면 필요한 범위를 지정하는 방법을 알 수 없습니다. 예를 들면 :
A -> B -> C -> D -> E -> HEAD
다음과 같은 작업을 수행하고 싶습니다.
git revert B-D
결과는 다음과 같습니다.
A -> B -> C -> D -> E -> F -> HEAD
여기서 F는 BD 포함의 반대를 포함합니다.
git에서 커밋 범위를 되돌릴 수 있습니까? gitrevisions 문서를 보면 필요한 범위를 지정하는 방법을 알 수 없습니다. 예를 들면 :
A -> B -> C -> D -> E -> HEAD
다음과 같은 작업을 수행하고 싶습니다.
git revert B-D
결과는 다음과 같습니다.
A -> B -> C -> D -> E -> F -> HEAD
여기서 F는 BD 포함의 반대를 포함합니다.
답변:
어떤 버전의 Git을 사용하고 있습니까?
Git1.7.2 +에서만 지원되는 여러 커밋 되돌리기 : 자세한 내용은 " 여러 번 되돌리기를 사용하여 이전 커밋으로 롤백 "을 참조하세요.
현재 git revert
man 페이지 는 현재 Git 버전 (1.7.4+) 전용입니다.
OP Alex Spurling 이 의견에보고 한대로 :
1.7.4로 업그레이드하면 정상적으로 작동합니다.
내 질문에 답하기 위해 내가 찾고 있던 구문은 다음과 같습니다.
git revert B^..D
B^
"B의 첫 번째 부모 커밋"을 의미 B
합니다. 이는 되돌리기 에 포함 할 수 있습니다 . 예를 들어 구문 을 포함하는
" git rev-parse
개정판 지정 섹션 "을 참조하십시오. 자세한 내용은 " 캐럿 ( ) 문자는 무엇을 의미합니까? ")<rev>^
HEAD^
^
되 돌린 각 커밋은 개별적으로 커밋됩니다.
Henrik N 은 주석에서 다음 과 같이 설명합니다 .
git revert OLDER_COMMIT^..NEWER_COMMIT
아래와 같이 바로 커밋하지 않고 되돌릴 수 있습니다.
git revert -n OLDER_COMMIT^..NEWER_COMMIT
git commit -m "revert OLDER_COMMIT to NEWER_COMMIT"
git revert OLDER_COMMIT^..NEWER_COMMIT
^
개정 매개 변수 의 접미사 는 해당 커밋 객체의 첫 번째 부모를 의미합니다."
단일 커밋에서 커밋 범위 B를 D (적어도 git 버전 2에서는)로 되돌리려면 다음을 수행 할 수 있습니다.
git revert -n B^..D
이렇게하면 B의 상위 커밋 (제외됨)에서 D 커밋 (포함됨)으로 커밋에 의해 수행 된 변경 사항이 되돌려 지지만 되 돌린 변경 사항으로 커밋을 생성하지 않습니다. 되돌리기는 작업 트리와 인덱스 만 수정합니다.
변경 사항을 커밋하는 것을 잊지 마십시오.
git commit -m "revert commit range B to D"
동일한 방법을 사용하여 단일 커밋에서 관련되지 않은 여러 커밋을 되돌릴 수도 있습니다. 예를 들어 B와 D를 되돌 리지만 C는 되 돌리지 않습니다.
git revert -n B D
git commit -m "Revert commits B and D"
참조 : https://www.kernel.org/pub/software/scm/git/docs/git-revert.html
정정 해 주신 Honza Haering 에게 감사드립니다.
git revert -n B..D
커밋 B를 되 돌리지 않고 C와 D 만 git revert -n B^..D
되돌립니다. B도 되돌립니다.
git revert -n master~5..master~2
하면 다섯 번째 최신 커밋이 포함되어 있다고 말합니다. 그러나 master~5
실제로는 6 번째 최신 커밋입니다. 표기법에 대한 자세한 정보는 git 문서의 개정 선택 을 참조하십시오. ..
:-)
이렇게 git revert OLDER_COMMIT^..NEWER_COMMIT
나를 위해 작동하지 않았다.
나는 사용 git revert -n OLDER_COMMIT^..NEWER_COMMIT
했고 모든 것이 좋다. 나는 git version을 사용하고 1.7.9.6
있습니다.
-n
또는 --no-commit
단일의 범위에서 모든 변경 사항을 되돌아갑니다 옵션은 모든이의 범위에 커밋 커밋 대신 되돌리기를 만드는, 커밋합니다. 최종 결과는에서와 동일하며 동일한 변경 사항이 되돌려집니다. git 히스토리가 어떻게 보이기를 원하는지에 달려 있습니다.
git rebase -i
관련 커밋을 하나로 스쿼시하는 데 사용 합니다. 그런 다음 되돌릴 하나의 커밋 만 있습니다.