PR도 approve받아서 master에 merge 후 릴리스 했는데 에러가 나서 revert를 해야 했다.
revert는 딱 되돌리고 싶은 특정 commit만 들어낼 수 있다.
merge한 master의 log를 보면 아래와 같이 merge commit과 개발 branch에서 commit했던 기록들이 나온다.
$ cd /git_repositories/repository
$ git checkout master | git pull
$ git log
commit {revert target merge commit} (HEAD -> master, tag: {tag}, origin/master, origin/HEAD)
Merge: {직전 merge commit} {직전 commit}
Author: {author} <{}>
Date: Thu Jun 3 09:59:44 2021 +0900
Merge pull request #411 from {repository}/{feature/my_develop_branch}
{comment}
commit {commit} (origin/{feature/develop_branch1})
Author: {author} <{}>
Date: Wed Jun 2 16:25:45 2021 +0900
{comment}
<중략>
commit {previous merge_commit} (tag: {tag})
Merge: {직전 merge commit} {직전 commit}
Author: {author} <{}>
Date: Tue May 18 10:04:33 2021 +0900
Merge pull request #408 from {repository}/{feature/other_develop_branch}
{comment}
commit {commit}
Author: {author} <{}>
Date: Thu May 13 15:50:47 2021 +0900
{comment}
여기서 revert하고 싶은(merge 하지 않은 상태로 되돌리고 싶은) 것은 revert target merge commit
이다.
$ git revert -m 1 {revert target merge commit}
-m 1
은 정확히는 파악하고 있지 않지만 merge commit을 revert할 때 붙이는 옵션이다.
revert를 잘 모르고 처음 사용했을 때는 앞으로 돌려야 한다고 생각해서 내 수정사항을 merge 하기 전 상태인 previous merge commit
을 revert 대상으로 적었다.
그러면 어떻게 되냐 하면,
$ git revert -m 1 {previous merge commit}
master에 적용된 수정사항 중에서 다른 사람이 merge한 previous merge commit
이 master에서 사라진다.
이 때 log를 보면 아래처럼 되어있다.
$ git log
commit {revert commit}
Author: {author} <{}>
Date: Thu Jun 3 12:24:26 2021 +0900
Revert "Merge pull request #408 from {repository}/{feature/other_develop_branch}"
This reverts commit {previous merge commit}, reversing
changes made to {previous previous merge commit}.
이 revert를 되돌려 원래 revert하고 싶었던 merge commit을 revert하기 위해선 위에서부터 차례로 commit을 revert하면 된다.
revert는 merge commit이 아니기 때문에 옵션은 붙이지 않아도 된다.
$ git revert {revert commit}
$ git log
commit {revert revert commit}
Author: {author} <{}>
Date: Thu Jun 3 12:50:01 2021 +0900
Revert "Revert "Merge pull request #408 from {repository}/{feature/other_develop_branch}""
This reverts commit {revert commit}.
commit {revert commit}
Author: {author} <{}>
Date: Thu Jun 3 12:24:26 2021 +0900
Revert "Merge pull request #408 from {repository}/{feature/other_develop_branch}"
This reverts commit {previous merge commit}, reversing
changes made to {previous previous merge commit}.
commit {revert target merge commit} (tag: {tag})
Merge: {직전 merge commit} {직전 commit}
Author: {author} <{}>
Date: Thu Jun 3 09:59:44 2021 +0900
Merge pull request #411 from {repository}/{feature/my_develop_branch}
{comment}
이러면 master와 diff가 없는 상태가 되었다(초기 상태로 돌아왔다).
이제 제대로 revert를 하면 아래처럼 된다.
$ git revert -m 1 {revert target merge commit}
$ git log
commit {revert commit} (origin/{feature/my_develop_branch}, {feature/revert_branch})
Author: {author} <{}>
Date: Thu Jun 3 12:52:47 2021 +0900
Revert "Merge pull request #411 from {repository}/{feature/my_develop_branch}"
This reverts commit {revert target merge commit}, reversing
changes made to {previous merge commit}.
commit {revert revert commit}
Author: {author} <{}>
Date: Thu Jun 3 12:50:01 2021 +0900
Revert "Revert "Merge pull request #408 from {repository}/{feature/other_develop_branch}""
This reverts commit {revert commit}.
commit {revert commit}
Author: {author} <{}>
Date: Thu Jun 3 12:24:26 2021 +0900
Revert "Merge pull request #408 from {repository}/{feature/other_develop_branch}"
This reverts commit {previous merge commit}, reversing
changes made to {previous previous merge commit}.
commit {revert target merge commit} (tag: {tag})
Merge: {직전 merge commit} {직전 commit}
Author: {author} <{}>
Date: Thu Jun 3 09:59:44 2021 +0900
Merge pull request #411 from {repository}/{feature/my_develop_branch}
{comment}
그러면 정상적으로 revert가 되었기 때문에 이 작업을 한 branch를 master에 merge한다. 물론 merge 전에 push 했다.
$ git checkout master | git pull
$ git merge origin {feature/revert_branch}
$ git log
commit {merge commit} (HEAD -> master, tag: {tag}, origin/master, origin/HEAD)
Merge: {직전 merge commit} {직전 commit}
Author: {author} <{}>
Date: Thu Jun 3 13:03:34 2021 +0900
Merge pull request #412 from {repository}/{feature/revert_branch}
{comment}
commit {revert commit} (origin/{feature/my_develop_branch}, {feature/revert_branch})
Author: {author} <{}>
Date: Thu Jun 3 12:52:47 2021 +0900
Revert "Merge pull request #411 from {repository}/{feature/my_develop_branch}"
This reverts commit {revert target merge commit}, reversing
changes made to {previous merge commit}.
commit {revert revert commit}
Author: {author} <{}>
Date: Thu Jun 3 12:50:01 2021 +0900
Revert "Revert "Merge pull request #408 from {repository}/{feature/other_develop_branch}""
This reverts commit {revert commit}.
commit {revert commit}
Author: {author} <{}>
Date: Thu Jun 3 12:24:26 2021 +0900
Revert "Merge pull request #408 from {repository}/{feature/other_develop_branch}"
This reverts commit {previous merge commit}, reversing
changes made to {previous previous merge commit}.
commit {revert target merge commit} (tag: {tag})
Merge: {직전 merge commit} {직전 commit}
Author: {author} <{}>
Date: Thu Jun 3 09:59:44 2021 +0900
Merge pull request #411 from {repository}/{feature/my_develop_branch}
{comment}
어쨌든 revert할 때는 당황하지 말고 위에서부터 하면 된다.
'기타 메모' 카테고리의 다른 글
java로 만들어진 툴을 사용하려는데 Unrecognized VM option 'AggressiveOpts' 에러가 날 때 (feat.jEnv) (0) | 2021.10.11 |
---|---|
node 버전을 nodebrew로 관리하기 (0) | 2021.09.14 |
VSCode에서 git worktree로 같은 리포지토리 다른 브랜치 작업 병행하기 (0) | 2021.05.27 |
A/B테스트 결과 분석에 앞서 확통 개념 정리 (0) | 2021.02.04 |
GLUE Benchmark (0) | 2019.03.31 |