ํฐ์คํ ๋ฆฌ ๋ทฐ
๐ ํ ์ํฉ
ํ๋ก์ ํธ ์งํ ๊ณผ์
ํ๋ก์ ํธ๋ฅผ ํ๋ฉด์ ์คํ๋ฆฐํธ๋ฅผ ๋ ๊ฐ๋ก ๋๋์๋ค. ๊ฐ ์คํ๋ฆฐํธ๋ฅผ ๋ธ๋์น๋ก ๋ง๋ค์๋ค.
์ฒซ ์คํ๋ฆฐํธ ๋จ์๋ ๋ธ๋์น ์ด๋ฆ์ผ๋ก sprint1 ์ ์ฌ์ฉํ๋ค. sprint1 ์ source ๋ธ๋์น๋ก ๊ฐ ๊ธฐ๋ฅ ๊ตฌํ์ ํ ๋๋ง๋ค 1๊ฐ ๋ธ๋์น์ฉ ๋ง๋ค์๊ณ , ๊ธฐ๋ฅ ๊ตฌํ์ ๋ง์น ๋๋ง๋ค sprint1 ์ผ๋ก๋ง ๋ณํฉ์ ํ๊ณ main ์ ๋๋์๋ค.
sprint1 ์ ๋ชจ๋ ์์ ์ ๋ง์น ํ main ๋ธ๋์น์ ๋ณํฉ์ ํ ์๊ฐ์ด์๋ค.
๋ฌธ์ ๋ฐ์
์คํ๋ฆฐํธ๊ฐ ๋๋๊ธฐ ์ ๊น์ง ๋ชจ๋ ๊ธฐ๋ฅ ๋จ์์ ๋ํ ๋ธ๋์น๋ sprint1 ์๋ง ๋ณํฉ, ์ฆ merge ๊ฐ ๋์ด์ผ ํ๋ค.
๊ทผ๋ฐ ๋ฌด์จ ์๊ฐ์ด์๋์ง, ์ค์๋ก Target branch ๋ฅผ ๋ฐ๊พธ์ด์ฃผ์ง ์๊ณ main ์ ๊ธฐ๋ฅ ํ ๊ฐ๋ฅผ merge ํ๊ณ ๋ง์๋ค.
์ดํ main ์ ์คํ๋ฆฐํธ ๋จ์๊ฐ ๋๋๊ธฐ ์ ๊น์ง๋ ํ์ ์ด ๋จ์ง ์์์ผ๋ฉด ์ข๊ฒ ๋ค๋ ์๊ฐ ๋๋ฌธ์ ๊ธํ revert ๋ฅผ ๋๋ฌ๋ฒ๋ ธ๋ค.
revert ์ฌ์ฉ์ ํ์ ๋ ์์ด merge ํ๋ ํ์ผ๋ค์ด ์ฌ๋ผ์ง๊ณ ์๋ฌด ๋ฌธ์ ์์ด์ง๋ ํ์๋จธ์ ์ ์ด์ฉํ๋ ๊ฒ์ด๋ผ๊ณ ์ฐฉ๊ฐํ๋ค.
ํ์ง๋ง, revert ๋ ๋ฐ๋์ ํ์ ์ ๋จ๊ธด๋ค.
์๊ฐ์ด ํ๋ฌ, ์ด๋๋ง ์ฒซ ์คํ๋ฆฐํธ ๋จ์๊ฐ ๋๋๋ ์์ ์ด ๋์ด์ sprint1 -> main ์ merge request ๋ฅผ ์งํํ๊ณ ,
main branch ๋ ์ฒ์ sprint1 ์์ ์ถ๋ฐํ๋ main ๊ณผ ๋ฌ๋ผ์ ธ ์์์ผ๋ฏ๋ก, merge conflict ๊ฐ ๋ฐ์ํ๋ค!
๋ช ๊ฐ์ ์์ํ ํ์ผ๋ค์ด main branch ์ ์ถ๊ฐ๋์์ผ๋ฉด ๋จ์ํ ํ์ผ์ ์ง์ฐ๊ณ merge ๋ฅผ ๋ค์ ์งํํ๋ฉด ๋์๊ฒ ์ง๋ง, revert ๊ธฐ๋ก ๋ง ์ฒ์ sprint1 ๋ธ๋์น๋ฅผ ์์ฑํ์ ๋์ main ๊ณผ ๋ค๋ฅธ ์ํฉ์์๋ ๊ณผ์ฐ ์ด๋ป๊ฒ merge conflict ๋ฅผ ํด๊ฒฐํ ์ ์์๊น?
๐ ํด๊ฒฐ ๋ฐฉ๋ฒ
์๋ Stack Overflow ํ์ด์ง์์ ๋ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ค ๊ฒ ๊ฐ์ ์ง์์๋ต์ ์ฐพ์๋ค.
https://stackoverflow.com/questions/1078146/re-doing-a-reverted-merge-in-git
์์ฝํ์๋ฉด, merge ๋ฅผ revert ํ๋ ์์ ์ ๊ธฐ์ ์ ์ผ๋ก ์ฆ, ํ์ผ์ ๋ณ๋์ ๊ด๋ จํด์ ์ ํ ๋ฌธ์ ๊ฐ ์์ง๋ง, ์ํฌํ๋ก์ฐ, ์ฆ ์์ ์ ํ๋ฆ์ ๊ด์ ์์๋ ์ฌ๋งํ๋ฉด ํด์ ์๋๋ ์ผ ์ด๋ผ๊ณ ํ๋ค. ๊ทธ๋ฌ๋ ๊ฒฐ๊ตญ ์ด๋ฏธ merge ๋ฅผ revert ํ๋ค๋ฉด, ์ด๋ค ์ด์ ๋ก๋ ๋ค์ ๊ฐ์ merge ๋ฅผ ์คํํด์ผ ํ๋ ์ํฉ์ ๋์ธ๋ค๋ฉด (๋์ ๊ฒฝ์ฐ main ์ sprint1 ์ merge ํ๊ธฐ ์ํด์) revert ๋ฅผ revert ํ๋ ๋ฐฉ๋ฒ๋ฐ์๋ ์๋ค ๊ณ ๋งํ๋ค. (๊ทธ๋์ revert ๋ฅผ revert ๋ ์ด๋ป๊ฒ ํ๋๊ฑด๋ฐ...)
๊ทธ๋ฆฌ๊ณ ์๋ ๋งํฌ๋ฅผ ์ฒจ๋ถํด revert ๋ฅผ revert ํ๋ ๋ฐฉ๋ฒ์ ์๊ฐํ๊ณ ์๋ค:
https://mirrors.edge.kernel.org/pub/software/scm/git/docs/howto/revert-a-faulty-merge.txt
๋ด์ฉ์ ์ดํด๋ณด๋ฉด, ์ค๊ฐ์ ์๋์ ๊ฐ์ ์ค๋ช ์ ์ฐพ์ ์ ์๋ค. merge commit ์ revert ํ๋ฉด regular commit (์ผ๋ฐ์ ์ธ ์ปค๋ฐ) ์ revert ์๋ ๋ค๋ฅด๊ฒ data ๋ง merge ์ ์ผ๋ก ์์๋ณต๊ท๋๊ณ history ์๋ ์๋ฌด๋ฐ ๋ณํ๊ฐ ์๋ค๋ ๊ฒ์ด๋ค. ์ฆ, ํ์ ์ด ๋จ๋๋ค.
Reverting a regular commit just effectively undoes what that commit did, and is fairly straightforward. But reverting a merge commit also undoes the _data_ that the commit changed, but it does absolutely nothing to the effects on _history_ that the merge had.
์ดํ ๊ธ์์๋ ๋ค์ ์ปค๋งจ๋๋ก merge ์ revert ์์ฒด๋ฅผ revert ํ ์ ์๋ค๊ณ ์ด์ผ๊ธฐํ๋ค.
$ git revert <merge revert>
๋ด ํ๋ก์ ํธ์ ์ ์ฉํ๊ธฐ ์ํด, ์ฐ์ ์ธํ ๋ฆฌ์ ์ด์์ main ๋ธ๋์น์ merge revert ๋น์์ ์ํ๋ฅผ ๊ด์ฐฐํ๋ค.
revert commit ์ ๋๋ฌ๋ณด๋, ๊ทธ๋ํ ๋ชจ์์ด ๋ฐ๋์๊ธฐ๋ ํ์ง๋ง ์ง๊ด์ ์ผ๋ก ๋ธ๋์น์ ๊ธฐ๋ก์ด ๋ฐ๋ ์ฌ๋ถ๋ฅผ ์ ์ ์์ด์ GitLab ์์ ์งํํ ์ ์๋์ง ํ์ธํด ๋ณด๋๊น ๊ฐ๋ฅํ๋ค. ์๋์ ๊ฐ์ด ํ๋ฉด ๋๋ค.
1. main ๋ธ๋์น ๋ ํฌ์งํ ๋ฆฌ์์ Last commit ์ ๋ฌธ๊ตฌ๋ฅผ ๋๋ฌ revert ํ๊ณ ์ถ์ revert ์ commit ๊ธฐ๋ก์ ํ์ธํ๋ค.
2. ์ค๋ฅธ์ชฝ ์๋จ์ ๋ณด์ด๋ Options ๋ฒํผ์ ๋๋ฌ Revert ์ต์ ์ ์ ํํ๋ค.
3. ๋ค์๊ณผ ๊ฐ์ ์ฐฝ์ด ๋จ๋๋ฐ, merge request ๋ฅผ ์๋ก ๋ง๋ค์ด์ revert ์ revert ๋ฅผ ์งํํ๊ณ ์ถ์ผ๋ฉด ์ฒดํฌ๋ฐ์ค๋ฅผ ์ฒดํฌํ๋ค.
4. revert commit ์ด ์ฑ๊ณต์ ์ผ๋ก revert ๋์๋ค๋ ๋ฌธ๊ตฌ๊ฐ ๋จ๋๋ฐ, merge request ๋ฅผ ์ ์ถํ๋ฉด revert ๋ฅผ revert ํ ๋ณํ๋ฅผ ๋ธ๋์น์ ์ ์ฉํ ์ ์๋ค๊ณ ์ฐ์ฌ์๋ค.
์ฌ๊ธฐ์ ๊ณ ๋ฏผ์ด ์๊ฒผ๋ค. merge ๋ฅผ revert ํจ์ผ๋ก์ revert ๊ธฐ๋ก์ด ๋จ์์ ์ด ๊ธฐ๋ก์ revert ํ๋ ค๊ณ ํ๋, ์ด๋ฒ์๋ revert ๋ฅผ revert ํ ๊ธฐ๋ก์ด ๋จ์ ๊ฒ ๊ฐ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ค์ ๋ก ์์ฑ๋์๋ค๋ revert-b1ef1ff6 ๋ธ๋์น๋ฅผ ํ์ธํด๋ณด๋, revert ๋ฅผ revert ํ ์ปค๋ฐ ๊ธฐ๋ก๋ค์ด ๋จ์์์๋ค.
์ฐ์ merge ๋ฅผ ํ ํ ์ ์๋๋ฉด main ์ ์ง์ฐ๊ณ sprint1 ์ main ๋ธ๋์น๋ก ๋ง๋ค์ด์ผ๊ฒ ๋ค๋ ์๊ฐ์ merge request ๋ฅผ ๋ณด๋๋ค. ๊ทธ๋ฌ์ main ์ ์ค์๋ก ๋ฌธ์ ๋ธ๋์น 18-postservice ๋ฅผ merge ํ์ ๋์ ๊ฐ์ ์ํฉ์ด ๋์๊ณ , ํ์ฌ sprint1 ๋ ๊ฐ์ ๋ฌธ์ ๋ธ๋์น 18-postservice ๋ฅผ sprint1 ์ merge ํ ์ดํ๊น์ง๋ main ๊ณผ ๊ฐ๊ณ ์ค๊ณง ๋ณํ ์ํฉ์ด์๊ธฐ ๋๋ฌธ์ sprint1 ์ main ์ merge ํ๋ ๊ฒ์ด ๊ฐ๋ฅํด์ก๋ค. ๊ฒฐ๋ก ์ ์ผ๋ก sprint1 ์ main ์ ์ฑ๊ณต์ ์ผ๋ก merge ํ ์ ์์๋ค.
๐ ๊ฒฐ๋ก
merge ๋ฅผ revert ํ ๊ธฐ๋ก์ผ๋ก ์ธํด ๋ธ๋์น A ์ ๋ณ๋์ฌํญ์ด ์๊ฒจ ๋ธ๋์น A ์ merge revert ์ด์ ๋ถํฐ ๋ณํ๋ฅผ ์์์ฌ๋ฆฐ ๋ธ๋์น B ์ ๋ธ๋์น A ๋ก์ merge ๊ฐ ๋ถ๊ฐ๋ฅํ๋ค๋ฉด, merge ๋ฅผ revert ํ revert commit ์ ํ ๋ฒ ๋ revert ํ์ฌ merge ๋ฅผ revert ํ ๊ธฐ๋ก์ ์์ ๋ ๊ฒ์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
๐ข ์ถ์ฒ
https://itnext.io/git-revert-the-revert-88b1e66d71d4
'Project' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Refactoring] ์บ์ฑ ์ฌ์ฉํด ์ฟผ๋ฆฌ ์คํ ์๋ ๊ฐ์ ํ๊ธฐ (1) | 2023.03.05 |
---|---|
[Refactoring] ์ ๋ต ํจํด ์ ์ฉํ๊ธฐ (1) (0) | 2023.02.22 |
[Spring Boot] Could not load or find main class ์๋ฌ (0) | 2023.02.22 |
[๊ฐ๋ฐ์ผ์ง] Spotify Web API ์ฌ์ฉ๊ธฐ (1) (0) | 2023.01.31 |
[๋ฆฌํฉํ ๋ง] JUNIT5 ํ ์คํธ ์ฝ๋ ๋ฆฌํฉํ ๋งํ๊ธฐ - @ParameterizedTest ์ @MethodSource ํ์ฉ (0) | 2023.01.05 |
- Total
- Today
- Yesterday
- Jackson
- JPA
- Spring Boot
- @RequestBody
- FCM
- ์ง์ฐ ๋ก๋ฉ
- JOIN FETCH
- ๊ธฐ์ง๊ตญ ์ค์น
- google cloud
- LazyInitializationException
- DTO
- Firebase
- ci/cd
- ์ธ์ฆ/์ธ๊ฐ
- json web token
- ์ค์๊ฐ๋ฐ์ดํฐ
- ์ฝํ
- ๊น๋ฉ
- gitlab
- JPQL
- ์๊ณ ๋ฆฌ์ฆ
- ํ๋ก๊ทธ๋๋จธ์ค
- docker
- spring
- ๋์ปค
- ๊ฐ์ ์๋ฒ
- N+1
- ์ญ์ง๋ ฌํ
- DeSerialization
- Java Data Types
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |