pull request시에 conflict가 날 때, 처리하는 경우에 대해서 자습해보았다.
우선, pull request시 conflict가 나는 이유를 알아보자.
현재 upstream repository에 commit되어있는 코드가
내가 fork한 repository의 코드와 겹치는 부분이 있기 때문이다.
결국 내 코드에서 겹치는 부분을 해결하고 pull request를 해야한다. (conflict해결 후, fork한 repository에 push만 해주면 된다!)
겹치는 부분을 해결할 때는 2가지 방법이 있다.
1. upstream의 코드를 내 브랜치에다가 merge하는 방법.
2. upstream의 코드를 내 브랜치를 rebase를 해주는 방법.
선택은 2번을 하겠다. 왜냐하면 git graph가 더 깔끔하게 나오기 때문이다.
rebase를 하는 방법은
1브랜치 뒤에, 2브랜치를 붙이고 싶으면(1브랜치를 base로 하고 싶다면)
2브랜치로 switch한 상태에서 "git rebase 1브랜치"를 쳐주면 된다.
추가로 얘기하자면,
저 자습을 하면서 upstream과 origin(fork)와 local repository의 개념에 대해서 자리를 잡을 수 있었다.
git remote 명령어를 사용해보면서 upstream도 결국 remote repository중 하나라는 사실이었다. 그래서 fetch나 push또한 권한만 있다면 할 수 있다는걸 알 수 있었다.
그리고 push, fetch, pull, merge 등은 동기화를 위한 작업일 뿐이라는 사실도 알 수 있었다.
그 외에도 commit을 좀 다듬기 위해 git reset명령어도 사용할 수 있었고, 빠뜨린 커밋을 위해 git commit --amend 옵션을 이용해보기도 했다. 또 아까 말한 rebase를 이용해서 git graph도 깔끔하게 만들 수 있었다.
또 git checkout remotes/origin/bbb와
git checkout -t remotes/origin/bbb의 차이, 즉 detached HEAD상태로 가져오는 것도 알게 되었다.(단순히 -t를 붙이지 않으면 테스트용도로 checkout 해온다. switch를 하면 작업 내용이 사라진다)
P.S.
BFS(너비우선탐색)도 조금 봤다.
'TIL' 카테고리의 다른 글
[Git] git remote, 원격 저장소 확인, 추가, 수정, 삭제 (0) | 2021.10.20 |
---|---|
SQL 쿼리 실행 원리 (0) | 2021.09.05 |
[Java] 동시성, 스레드 조심해야할 사항1 (0) | 2021.08.07 |
[Git] Fork, Pull Request, Clone, Push (0) | 2021.08.01 |
[Spring] Filter란, (0) | 2021.07.30 |