ํฐ์คํ ๋ฆฌ ๋ทฐ
๐ ํ ์ํฉ
ํ๋ก์ ํธ ์งํ ๊ณผ์
ํ๋ก์ ํธ๋ฅผ ํ๋ฉด์ ์คํ๋ฆฐํธ๋ฅผ ๋ ๊ฐ๋ก ๋๋์๋ค. ๊ฐ ์คํ๋ฆฐํธ๋ฅผ ๋ธ๋์น๋ก ๋ง๋ค์๋ค.
์ฒซ ์คํ๋ฆฐํธ ๋จ์๋ ๋ธ๋์น ์ด๋ฆ์ผ๋ก 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
Re-doing a reverted merge in Git
I have run into a bit of a problem here: I had a problem-specific branch 28s in Git, that I merged in the general develop branch. Turns out I had done it too fast, so I used git-revert to undo the ...
stackoverflow.com
์์ฝํ์๋ฉด, 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
Gitโ—โRevert The Revert.
TL;DR - if you think of “revert” as “undo”, then you’re going to always miss this part of reverts. Yes, it undoes the data, but no, it…
itnext.io
'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
- ๊ธฐ์ง๊ตญ ์ค์น
- docker
- json web token
- LazyInitializationException
- ์ญ์ง๋ ฌํ
- N+1
- ์ค์๊ฐ๋ฐ์ดํฐ
- google cloud
- ci/cd
- Java Data Types
- Spring Boot
- ๊น๋ฉ
- ์ง์ฐ ๋ก๋ฉ
- ์ฝํ
- Firebase
- @RequestBody
- ํ๋ก๊ทธ๋๋จธ์ค
- DeSerialization
- ๋์ปค
- ์๊ณ ๋ฆฌ์ฆ
- FCM
- DTO
- ๊ฐ์ ์๋ฒ
- spring
- JOIN FETCH
- JPA
- JPQL
- ์ธ์ฆ/์ธ๊ฐ
- gitlab
- Jackson
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 | 31 |