오늘은 project를 진행해보면서 궁금했던 git pull을 할 떼 생기는 힌트 메세지에 대해 알아보겠다.(git pull 전략)
이해하기 쉽게 repo를 만들어서 테스트를 해보자.
준비물 : github ID, repository 아무거나 1개
나는 github에 요렇게 repo를 하나 만들어주었고 local에 clone을 받았다.
현재 readme파일에는
"git, github 관련 기능들 공부를 해 볼 repo입니다."라고 적혀있다.
나는 이제 local에서 readme.md 파일을 수정하도록 하겠다.
요렇게 파일을 수정하고 아직 add조차 안 한 상황. 이제 스테이징과 커밋을 완료해보자.
그리고 푸쉬하기 전! 프로젝트와 같은 상황을 연출하고자 한다. 내가 작업한 내용을 깃허브에 올리기 전 다른 사람이 먼저 올린 상황을 재현하고자 github에서 readme파일을 직접 수정했다.
그럼 이제 내 로컬에서 github에 푸쉬를 해보자. 그럼
이와 같은 에러 메세지가 나온다.
이는 내 로컬에서의 상황과 원격 repo, 즉 github에서의 상황이 다르기 때문에 push 할 수 없다고 에러를 띄워주는 것이다.
여기에 나온 힌트처럼 'git pull' 명령어를 통해 원격에 있는 상황을 로컬로 합쳐보자.
그럼 이와 같은 메세지를 볼 수 있다. 내가 궁금했던 내용, rebase에 대해 언급함을 알 수 있다.
3가지 경우가 있다.
git config pull.rebase false # merge(the default strategy)
git config pull.rebase true # rebase
git config pull.ff only # fast-forward only
merge, rebase, fast-forforward only
다음 pull 때는 요 3가지 중 하나를 적용시켜 하라는 거 같은데 우선 내가 프로젝트 때 사용했던 git config pull.rebase false를 먼저 적용시켜 보겠다. 나머지 2개는 다음 포스팅 때 알아보자.
우선 명령어 입력 후 다시 pull을 받아보면
자동 병합에 실패했다고 뜨고, 어디서 충돌이 일어나는지 각 상황을 보여준다.
이는 상대방이 나와 같은 파일을 작업한 후 github에 올렸을 때, 일어날 수 있는 상황으로 어떤 내용으로 수정해야 할 지 고친 후 commit을 해주어야 한다. 나는 두 라인 취소선 처리 후 새로운 문장을 추가하겠다.
요렇게 수정 후 add -> commit -> push 순으로 작업하면 github에는 2개의 커밋이 올라가게 된다.
이렇게 push를 성공함으로써 로컬과, remote 상황이 동일해짐을 확인할 수 있었다.
오늘 테스트를 통해 생각해 볼 수 있는 부분은
git config pull.rebase false
이 명령어는 pull 명령을 실행했을 때 로컬과 원격 상황에 다름이 있을 경우 두 상황을 비교하여 merge하라는 환경설정을 한다는 것이다. 정확한 다른 선택지와의 차이점은 나머지 옵션을 실행해본 후 알 수 있을 것이다.