-
[Git] 여러 커밋 revert 하기저장소/git 2022. 2. 5. 17:59
1개의 브랜치에서 여러 커밋을 진행한 후, master에 머지를 했다가 해당 작업물에 문제가 생겼다면 머지 이전으로 되돌아가야 합니다. 하지만 이 때, 커밋 내용이 여러개이므로 squash를 진행하지 않았다면 당황하게 됩니다.
여기서는 여러 커밋 내용을 1번에 revert 하는 방법을 설명하겠습니다.
merge가 완료된 상태에서 revert 하기
먼저 아래와 같은 형태로 브랜치 그래프가 있다고 가정합니다.
* commit 9aed3a99358ccc5bbfd2dd99d29a82273115801a (HEAD -> master) |\ Merge: ccdd474 9796ce6 | | Author: brownbear <@gmail.com> | | Date: Sat Feb 5 16:13:16 2022 +0900 | | | | Merge pull request #1 from brownbear/develop | | | | Develop | | | * commit 9796ce6a4f430df90c9bb038810c5981acf7f02b (origin/develop, develop) | | Author: brownbear <@gmail.co.kr> | | Date: Sat Feb 5 16:11:58 2022 +0900 | | | | 커밋2 | | | * commit 6e04a4404f40e72b81ca93e8d36f8a4ce6728d30 |/ Author: brownbear <@gamil.co.kr> | Date: Sat Feb 5 16:09:11 2022 +0900 | | 커밋1 | * commit ccdd474c9fa68823c3c31a2b4c1fc88ba345c501 | Author: brownbear <@brownbear.co.kr> | Date: Sun Jan 23 00:55:23 2022 +0900 | | 오류 수정master에서 develop 브랜치가 분기된 후, develop 브랜치에 커밋이 [커밋1, 커밋2]로 총 2개가 반영된 다음, 다시 master로 머지가 된 케이스입니다.
여기서 develop 브랜치의 작업물에 이상이 있어 머지된 내용을 전부 되돌리려고 합니다.
즉, 현재
9aed3a99358ccc5bbfd2dd99d29a82273115801a에서ccdd474c9fa68823c3c31a2b4c1fc88ba345c501로 옮겨야 되는 상황입니다.git revert {현재 커밋 해시} -m {되돌릴 부모 번호}를 입력하면 merge한 내용을 revert할 수 있습니다.* commit 9aed3a99358ccc5bbfd2dd99d29a82273115801a (HEAD -> master) |\ Merge: ccdd474 9796ce6 | | Author: brownbear <@gmail.com> | | Date: Sat Feb 5 16:13:16 2022 +0900 | | | | Merge pull request #1 from brownbear/develop | | | | Develop를 보면
Merge: ccdd474 9796ce6로 되어 있는데ccdd474가 parent number 1이고9796ce6가 2입니다.이러한 로그는 아래 명령어로 확인할 수 있습니다.
# git log {확인할 커밋 해시} -n {출력할 커밋 개수} git log 9aed3a99358ccc5bbfd2dd99d29a82273115801a -n 1 commit 9aed3a99358ccc5bbfd2dd99d29a82273115801a Merge: ccdd474 9796ce6 Author: brownbear <@gmail.com> Date: Sat Feb 5 16:13:16 2022 +0900 Merge pull request #1 from brownbear/develop Develop (END)이제 부모 번호를 알았으니 아래와 같이 명령어로 merge 내용을 revert 해봅니다.
git revert 9aed3a99358ccc5bbfd2dd99d29a82273115801a -m 1 git log --graph * commit 0e0f7a32d6f6078e5aca9d0bb1c7a6c3ed22b4f5 (HEAD -> master) | Author: brownbear <@gamil.co.kr> | Date: Sat Feb 5 16:52:51 2022 +0900 | | Revert "Merge pull request #1 from brownbear/develop" | | This reverts commit 9aed3a99358ccc5bbfd2dd99d29a82273115801a, reversing | changes made to ccdd474c9fa68823c3c31a2b4c1fc88ba345c501. | * commit 9aed3a99358ccc5bbfd2dd99d29a82273115801a |\ Merge: ccdd474 9796ce6 | | Author: brownbear <@gmail.com> | | Date: Sat Feb 5 16:13:16 2022 +0900 | | | | Merge pull request #1 from brownbear/develop | | | | Develop | | | * commit 9796ce6a4f430df90c9bb038810c5981acf7f02b (origin/develop, develop) | | Author: brownbear <@brownbear.co.kr> | | Date: Sat Feb 5 16:11:58 2022 +0900 | | | | 커밋2 | | | * commit 6e04a4404f40e72b81ca93e8d36f8a4ce6728d30 |/ Author: brownbear <@gamil.co.kr> | Date: Sat Feb 5 16:09:11 2022 +0900 | | 커밋1 | * commit ccdd474c9fa68823c3c31a2b4c1fc88ba345c501 | Author: brownbear <@gmail.co.kr> | Date: Sun Jan 23 00:55:23 2022 +0900 | | 오류 수정 |원하던대로 develop 브랜치의 커밋 내용이 전부 revert 된 것을 볼 수 있습니다.
만약 revert한 브랜치를 다시 돌리려면 기존 방식처럼
git revert 해당 커밋 해시를 진행하면 됩니다.여러 커밋 일괄 revert
merge가 아닌 여러 커밋을 한번에 revert 하는 방법은
git revert 되돌아갈 커밋 해시..되돌리기 시작할 커밋 해시로 가능합니다.아래와 같은 커밋 내용이 있다고 가정합니다.
commit b028478c25f5e85d8ca4015223161bece00a40a7 (HEAD -> develop, origin/develop) Author: brownbear <@gmail.co.kr> Date: Sat Feb 5 17:43:48 2022 +0900 커밋3 commit 1d42496f5dba4b7122efbec8da79de82af216acc Author: brownbear <@gmail.co.kr> Date: Sat Feb 5 17:43:35 2022 +0900 커밋2 commit cf9e99587e77228e652109113d2bff5cc6d2aa6f Author: brownbear <@gmail.co.kr> Date: Sat Feb 5 17:43:15 2022 +0900 커밋1 commit 9796ce6a4f430df90c9bb038810c5981acf7f02b Author: brownbear <@gamil.co.kr> Date: Sat Feb 5 16:11:58 2022 +0900 커밋2 commit 6e04a4404f40e72b81ca93e8d36f8a4ce6728d30 Author: brownbear <@gamil.co.kr> Date: Sat Feb 5 16:09:11 2022 +0900 커밋1 commit ccdd474c9fa68823c3c31a2b4c1fc88ba345c501 Author: brownbear <@gamil.co.kr> Date: Sun Jan 23 00:55:23 2022 +0900 오류 수정현재
b028478c25f5e85d8ca4015223161bece00a40a7이 커밋에서ccdd474c9fa68823c3c31a2b4c1fc88ba345c501커밋으로 돌리고 싶을 때, 아래와 같이 명령어를 입력합니다.git revert ccdd474c9fa68823c3c31a2b4c1fc88ba345c501..b028478c25f5e85d8ca4015223161bece00a40a7 * commit 06b107c3b45edc0baf5de5eebd16bf107a4e3ba3 (HEAD -> develop) | Author: brownbear <@gamil.co.kr> | Date: Sat Feb 5 17:54:06 2022 +0900 | | Revert "커밋1" | | This reverts commit 6e04a4404f40e72b81ca93e8d36f8a4ce6728d30. | * commit bb5ccaed368e7b36267ec8056bc54e67152a20ae | Author: brownbear <@gmail.co.kr> | Date: Sat Feb 5 17:54:04 2022 +0900 | | Revert "커밋2" | | This reverts commit 9796ce6a4f430df90c9bb038810c5981acf7f02b. | * commit d820e298adb75cb740e484cb5c329b8a71da3b0a | Author: brownbear <@gmail.co.kr> | Date: Sat Feb 5 17:53:59 2022 +0900 | | Revert "커밋1" | | This reverts commit cf9e99587e77228e652109113d2bff5cc6d2aa6f. | * commit ecdfbdb1d5075a9ff9330f7e2cbc6728cc96bcda | Author: brownbear <@gmail.co.kr> | Date: Sat Feb 5 17:53:50 2022 +0900 | | Revert "커밋2" | | This reverts commit 1d42496f5dba4b7122efbec8da79de82af216acc. | * commit 474039c2de798bc3330e81cd4eba4e0450505058 | Author: brownbear <@gmail.co.kr> | Date: Sat Feb 5 17:53:41 2022 +0900 | | Revert "커밋3" | | This reverts commit b028478c25f5e85d8ca4015223161bece00a40a7. |커밋된 역순으로 revert 커밋이 자동으로 생성되는 것을 볼 수 있습니다.
만약 자동 commit을 사용하지 않으려면
-n옵션을 추가해주면 됩니다. (stage까지 올라가기 때문에 commit만 수동으로 해주면 됨)