쓰기 권한이 없는 repo 를 fork 해서 본인의 repo 로 가져온 뒤, 로컬에 clone 해서 작업을 하는 것이 일반적인 과정이다. 이번에 다루고자 하는 주제는 로컬에서 작업한 내용을 fork 했던 외부 repo 에 PR 을 무사히 보냈지만 Merge Conflict 가 나는 경우에 대해 살펴보고자 한다.
먼저 PR 을 보내고 Merge 가 되면 Commit Hash 값이 PR 을 보낸 branch 의 Commit Hash 값과 달라져서 (Merge 되는 과정에 새로운 Commit 이 생기기 때문) Merge 후 같은 branch 로 fetch 및 rebase 하고 계속 Commit 을 진행한다면 다시 PR 을 보낼 시에 외부 repo 와 fork 한 repo 의 Commit Hash 값이 달라 Merge Conflict 가 일어나게 된다. 그렇기 때문에 PR 을 보내는 branch 와 Merge 후 fetch 및 rebase 하는 branch 를 따로 두어 repo 관리를 해주어야 한다.
Merge 후 fetch 및 rebase 를 하고 fork 한 repo 에 새로운 branch 를 만들고 작업을 한 뒤 다시 PR 을 보내면 Merge Conflict 가 일어나지 않아 매 작업을 할 때마다 branch 를 생성하는 것이 필수적인데 rebase 를 했으면 외부 repo 와 fork 한 repo 와 동기화가 되어 같은 branch 로 진행해도 되지 않을까.. 라는 생각이 든다.. 결국엔 동일한 branch 로 계속 작업을 진행하면 안되는 것이지만, "왜" 라는 것에 초점을 두어 좀 더 생각하고자 한다.
그래도 Commit Hash 값이 달라진다는 것을 알게 되었기에 오늘도 필자는 성장했다.
생각해보니까 Merge 후 fetch 및 rebase 를 하고 fork 한 repo 에 새로운 branch 를 만들고 작업을 하면 새로 작업한 내용만을 외부 repo 에 PR 을 보내게 되기 때문에 새로운 Commit 내용만 Merge 될 수 있어 branch 를 반드시 생성해서 작업을 진행해 주어야 한다.
(후.. 속이 시원하다.)