[revert]

 

특정 커밋들의 반전(+→-, -→+) 커밋을 생성하여,

±제로섬(zero-sum)으로 과거와 같은 상황이지만 새로운 커밋으로 작업할 수 있다.

 


 

커밋들이 브랜치의 흐름에 포함되어 있지 않아도 지정할 수 있다.

 

> git   revert   반전할_커밋들...

공백을 사이에 두고 여러 커밋ID를 선택할 수도 있고,

(합쳐진 커밋끼리 충돌(conflict)이 존재하면 당연히 수동으로 해결한다. git revert --continue)

> git   revert   옛날_커밋ID..최근_커밋ID

공백 없이 ID..ID로, 연속 구간을 선택할 수 있다.

시간상 왼쪽이 예전 것, 오른쪽이 최근 것을 적는다.

(,] 형태로, 옛날_커밋ID는 포함하지 않지만, 최근_커밋ID는 포함한다.

(옛날_커밋ID^..최근_커밋ID를 쓰면 한 칸 이전을 뜻하므로, 옛날_커밋ID도 포함되게 할 수 있다)

 

커밋 생성까지 바로 진행되는데,

-n(--no-commit)옵션으로 Stage 상태까지에서 멈출 수 있다.

 

--no-edit옵션을 주면, 아래처럼 코멘트를 자동으로 작성해준다.


commit 79c06dbeb467d589395fec8254738ba90d7efa32 (HEAD -> a01)

Author: USER <email@address.com>

Date: EEE MMM dd HH:mm:ss yyyy +0900

 

    Revert "fire test"<---- 자동으로 생성된 코멘트

 

    This reverts commit 817ae3685fb17d677dc93ad040a620c5da2227b2.<---- 자동으로 생성된 코멘트

...

 


 

merge 커밋을 지정하여 revert하려면 추가적인 옵션이 필요하다.

> git   log


commit 7651d26b91fac3fa0a13cbaca5fd2d249585f91a (HEAD -> a01, origin/a01)

Merge: 54cd13d aa4b9a1<---- 순서 확인

Author: USER <email@address.com>

Date: EEE MMM dd HH:mm:ss yyyy +0900

 

    Merge remote-tracking branch 'refs/remotes/origin/a01' into a01

...

log를 통해 Merge: 부분의 순서를 확인한다.

> git   revert   -m   순서(1부터)   반전할_병합커밋

순서에 맞는 방향으로 돌아간 것처럼 revert된다.

 


 

[revert]는 수정 없이도 과거 처럼 될 수 있도록 작업하지만,

떠올리는 개념상 [reset]을 먼저 말하고 다른 방법으로써 [revert]를 소개했다.

 

이제 마저 기존 커밋들을 수정하는 작업들을 보러 가자.

수정끝판왕 [rebase 알아보기...]