git에서 커밋 범위 되돌리기 -> HEAD 다음과 같은 작업을 수행하고 싶습니다. git

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 revertman 페이지현재 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"

답변

단일 커밋에서 커밋 범위 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 OLDER_COMMIT^..NEWER_COMMIT나를 위해 작동하지 않았다.

나는 사용 git revert -n OLDER_COMMIT^..NEWER_COMMIT했고 모든 것이 좋다. 나는 git version을 사용하고 1.7.9.6있습니다.


답변

git rebase -i관련 커밋을 하나로 스쿼시하는 데 사용 합니다. 그런 다음 되돌릴 하나의 커밋 만 있습니다.